Używam programu PowerShell do aktualizowania wykazu katalogu XML dla aplikacji na wielu serwerach, ale z problemem powodującym faktyczne aktualizacje. Na przykład za pomocą poniższego kodu XML, który chce zaktualizować ścieżki do plików za pomocą qualnas1, aby użyć czegoś takiego jak \ GlobalNAS ... itd. I usunąć wpis qualnas2.Aktualizowanie plików XML za pomocą programu PowerShell
<?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>
Węzeł filepath z type = sssb działa, gdy używam $ _. InnerText, ale nie może znaleźć sposób, aby zaktualizować lub usunąć pozostałe węzły. Tu jest mój kodu:
$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' }
}
Jeśli I krok poprzez kod przy użyciu PowerGUI każdy węzeł znajduje i wymienić/usuń próby jak będę oczekiwać, ale albo się błędy (ciąg do konwersji XMLELEMENT) lub brak błędów ale nie ma żadnych aktualizacji w zależności od tego, jak wykonuję zadanie. W każdym razie, aby zmienić/usunąć określone węzły, jeśli nie ma atrybutów jak w przykładzie SSSB?
Uwaga: ZachowajPrzestrzeń należy ustawić przed załadowaniem(). http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.preservewhitespace.aspx – NYCdotNet