PowerShell을 사용하여 XML 파일에서 값을 수정 / 만드는 방법은 무엇입니까?


24

PowerShell을 사용하여 XML 파일에서 값을 수정 / 작성할 수 있는지 알고 싶습니다. 기본적으로 나는 관심이있다 :

  • XML 파일에서 값을 수정하거나 존재하지 않는 경우 작성하십시오 (예 : 항목을 검색하고 존재하지 않는 경우 작성하고 값을 수정해야 함)
  • 같은 XML 파일에서 다른 XML 구문을 처리하십시오.

구문 1 :

<설정>
  <setting id = "Location2"value = "바르셀로나, 스페인"/>
  <setting id = "Location2id"value = "zmw : 00000.1.08181"/>
</ settings>

구문 2 :

<설정>
    <뮤직 플레이어>
        <crossfade> 0 </ crossfade>
        <queuebydefault> false </ queuebydefault>
    </ musicplayer>
</ settings>

구문 3 :

<설정>
    <스킨 설정>
        <setting type = "bool"name = "skin.confluence.HomepageHideRecentlyAddedVideo"> 거짓 </ setting>
    </ skinsettings>
</ settings>

어떤 도움이라도 대단히 감사하겠습니다.

감사.

답변:


36

PowerShell은 XML 파일 처리를 완벽하게 지원합니다.

예를 들어, 우리가 제공 한 첫 번째 블러를 가져 와서 settings.xml"C : \ blah"폴더에 이름이 지정된 XML 파일에 붙여 넣으면 다음과 같이 각 설정의 ID를 얻을 수 있습니다.

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.setting.id

다음을 반환합니다 :

Location2
Location2id

$myXML.settings.setting.value

보고:

Barcelona, Spain
zmw:00000.1.08181

XML 파일 내용을 구문 # 2에서 제공 한 흐림으로 바꾼 경우 :

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade

보고:

0

을 읽으려면 crossfade2로 변경하고 다시 저장하십시오.

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.musicplayer.crossfade = 2
$myXML.Save("C:\blah\settings.xml")

주석 후 편집 :

바르셀로나 예제에서와 같이 XML 요소 자체를 변경하는 것은 포함 된 데이터가 아니라 XML 구조 자체를 편집하기 때문에 약간 까다 롭습니다.

[xml]$myXML = Get-Content C:\blah\settings.xml
$myXML.settings.ChildNodes.Item(0).value = "New York, USA"
$myXML.Save("C:\blah\settings.xml")

스킨 설정 예제의 경우 다음과 같이 시도하십시오.

$myXML.settings.skinsettings.setting."#text" = "true"

다음 자료를 확인하십시오.


답변 해주셔서 감사합니다. 귀하의 제안을 읽었으며 바르셀로나에서 뉴욕으로 첫 번째 얼룩의 id = "Location2"값을 성공하지 않고 업데이트하려고합니다. 세 번째 얼룩과 동일합니다 ( "true"로 변경하려고 함). 이러한 종류의 값을 어떻게 찾고 수정합니까?
Serieofilo

다음을 사용하여 변경하려는 노드를 선택하려고 $MyXML.SelectSingleNode("/settings/skinsettings/setting[@type='bool' and @name='skin.confluence.HomepageHideRecentlyAddedVideo']")하지만 값을 "false"에서 "true"로 변경하는 방법은 무엇입니까? 또는 이와 같은 노드가 없으면 어떻게 만들 수 있습니까?
Serieofilo

1
내 편집 내용을 확인하십시오. 더 많은 정보를 추가했습니다. :)
Ƭᴇcʜιᴇ007
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.