PowerShellを使用して、多数のサーバー間でアプリケーションのXMLディレクトリ一覧を更新していますが、実際の更新に問題があります。例として次のXMLを使用して、\ GlobalNAS ...などのようなものを使用するようにqualnas1でファイルパスを更新し、qualnas2エントリを削除します。PowerShellを使用してXMLファイルを更新する
<?xml version="1.0" encoding="UTF-8" ?>
<directory>
<filepath>\\qualnas1\library\content</filepath>
<filepath>\\qualnas2\library\content</filepath>
<filepath type="sssb">\\qualnas1\SSSB\content</filepath>
</directory>
タイプ= SSSBとファイルパスのノードは、私は$ _。InnerTextプロパティを使用するときに動作しますが、更新したり、他のノードを削除する方法を見つけることができません。ここに私のコードです:私は、Powerguiブロックを使用してコードをステップ実行した場合、各ノードが見つからないとエラー(のXmlElementへの変換文字列)を取得、私は期待通り/削除が試行された置き換えるが、いずれか、またはエラーさ
$DirectoryXMLPath = 'C:\Temp\directory.xml'
if (Test-Path $DirectoryXMLPath)
{
$DirectoryXML = New-Object XML
$DirectoryXML.Load($DirectoryXMLPath)
$DirectoryXML.PreserveWhitespace = $true
# Find qualnas1 path and replace with GlobalNAS
$DirectoryXML.directory.filepath | Where-Object { $_ -eq '\\qualnas1\library\content' } |
ForEach-Object { $_.InnerText = '\\GlobalNAS\library\content' }
# Find extraneous library paths and remove them
$DirectoryXML.directory.filepath.Remove('\\qualnas2\library\content')
# $DirectoryXML.directory.mountpoint | Where-Object { $_ -eq '\\qualnas2\library\content' } |
# ForEach-Object { $DirectoryXML.RemoveChild($_) }
# This line is good! Need InnerText as attribute type exists
$DirectoryXML.directory.filepath | Where-Object { $_.InnerText -eq '\\qualnas1\SSSB\content' } |
ForEach-Object { $_.InnerText = '\\GlobalNAS\SSSB\content' }
}
どのように私が割り当てを行うかに応じて更新もありません。とにかく、SSSBの例のような属性がない場合、特定のノードを変更/削除するには?
注意:PreserveWhitespaceは、Load()の前に設定する必要があります。 http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.preservewhitespace.aspx – NYCdotNet