web-dev-qa-db-ja.com

XMLファイルのコンテンツを更新するPowerShellスクリプト

XMLファイルを処理してコンテンツを更新するPowershellスクリプトの作成を手伝ってください。次の例では、スクリプトを使用して、Config.button.commandの例でファイルパスを引き出して変更したいと思います。 C:\ Prog\Laun.jarをC:\ Prog32\folder\test.jarに変更します。助けてください。ありがとう。

<config>
 <button>
  <name>Spring</name>
  <command>
     C:\sy32\Java.exe -jar "C:\Prog\Laun.jar" YAHOO.COM --type SPNG --port 80
  </command>
  <desc>studies</desc>
 </button>
 <button>
  <name>JET</name>
    <command>
       C:\sy32\Java.exe -jar "C:\Prog\Laun.jar" YAHOO.COM --type JET --port 80
    </command>
  <desc>school</desc>
 </button>
</config>
20
user2359932

2つの解決策があります。次のように、xmlとして読み取り、テキストを置き換えることができます。

#using xml
$xml = [xml](Get-Content .\test.xml)
$xml.SelectNodes("//command") | % { 
    $_."#text" = $_."#text".Replace("C:\Prog\Laun.jar", "C:\Prog32\folder\test.jar") 
    }

$xml.Save("C:\Users\graimer\Desktop\test.xml")

または、通常のテキストファイルのように、単純な文字列の置換を使用して同じようにはるかに簡単かつ高速に実行できます。これをお勧めします。例:

#using simple text replacement
$con = Get-Content .\test.xml
$con | % { $_.Replace("C:\Prog\Laun.jar", "C:\Prog32\folder\test.jar") } | Set-Content .\test.xml
26
Frode F.

私はこれが古い投稿であることを知っていますが、これは他の人を助けるかもしれません...

探している要素が明確にわかっている場合は、次のように要素を指定するだけです。

# Read the existing file
[xml]$xmlDoc = Get-Content $xmlFileName

# If it was one specific element you can just do like so:
$xmlDoc.config.button.command = "C:\Prog32\folder\test.jar"
# however this wont work since there are multiple elements

# Since there are multiple elements that need to be 
# changed use a foreach loop
foreach ($element in $xmlDoc.config.button)
{
    $element.command = "C:\Prog32\folder\test.jar"
}

# Then you can save that back to the xml file
$xmlDoc.Save("c:\savelocation.xml")
20
ThisWholeDev

これを試して:

$xmlFileName = "c:\so.xml"
$match = "C:\\Prog\\Laun\.jar"
$replace = "C:\Prog32\folder\test.jar"


# Create a XML document
[xml]$xmlDoc = New-Object system.Xml.XmlDocument

# Read the existing file
[xml]$xmlDoc = Get-Content $xmlFileName

$buttons = $xmlDoc.config.button
$buttons | % { 
    "Processing: " + $_.name + " : " + $_.command
    $_.command = $_.command -Replace $match, $replace
    "Now: " + $_.command
    }

"Complete, saving"
$xmlDoc.Save($xmlFileName)
1
Stuart Whelan