0

次のpowershellスクリプトを使用してノード値を更新しようとしています

$XMLContents = [XML] (Get-content "C:\Test.xml")
$XPath="/Parameters/Parameter[ParameterName='pTxtRuntimeUserName']/ParameterValue"
$MachineNameInXML= Select-XML -XML $XMLContents -XPath $Xpath
$Userstring=$($MachineNameInXML.Node.'#text')
$Userstring = $Userstring.Replace("WIN2K8R25\administrator","WIN2K8R25\ABC")
$Userstring
$XMLContents.Save("C:\Test.xml")

$Userstring を表示すると、置き換えられた値「WIN2K8R25\ABC」が正しく表示されますが、xml ファイルでは更新されませんでした。古いユーザー名 "WIN2K8R25\administrator" のままです。

私の XML ファイルには多くのパラメーター ノードが含まれています。いくつかのサンプル ノードの値だけをコピーしました。

<Parameters>
    <Parameter IsEncrypted="False">
      <ParameterName>pTxtRuntimeUserName</ParameterName> 
      <ParameterValue>WIN2K8R25\administrator</ParameterValue> 
    </Parameter>
    <Parameter IsEncrypted="False">
      <ParameterName>pTxtABC</ParameterName> 
      <ParameterValue>XYCr</ParameterValue> 
    </Parameter>
</Parameters>

どこを見逃しているのかわかりません。これで何が欠けていますか?

4

2 に答える 2

2

この行で:

$Userstring = $Userstring.Replace("WIN2K8R25\administrator","WIN2K8R25\ABC")

変数を新しい値に再割り当てしているように見えます$Userstringが、これは DOM の内容には影響しません。

その後、新しい行を追加するのはどうですか:

$MachineNameInXML.Node.InnerText = $Userstring

$Userstringまたは、変数の使用を完全にスキップすることもできます。

$XMLContents = [XML] (Get-content "C:\Test.xml")
$XPath="/Parameters/Parameter[ParameterName='pTxtRuntimeUserName']/ParameterValue"
$MachineNameInXML= Select-XML -XML $XMLContents -XPath $Xpath
$MachineNameInXML.Node.InnerText = $MachineNameInXML.Node.InnerText.Replace("WIN2K8R25\administrator","WIN2K8R25\ABC")
$XMLContents.Save("C:\Test.xml")
于 2013-01-16T11:12:34.740 に答える
1

試す:

$path = "C:\Test.xml"
$XMLContents = [XML] (Get-content $path)
$Node = $XMLContents.SelectNodes("/Parameters/Parameter[ParameterName='pTxtRuntimeUserName']/")
$Node[0].ParameterValue = $Node[0].ParameterValue.Replace("WIN2K8R25\administrator","WIN2K8R25\ABC")
$XMLContents.Save($path)

それを行うには見栄えの良い方法かもしれませんが、そのパラメーター名を持つノードが1つだけである限り、機能するはずです。

于 2013-01-16T11:23:45.570 に答える