Utilizzo PowerShell per aggiornare un elenco di directory XML per un'applicazione su un numero di server, ma che presenta un problema relativo agli aggiornamenti effettivi. Usando il seguente XML come esempio, cercando di aggiornare i percorsi di file con qualnas1 per usare qualcosa come \ GlobalNAS ... etc e rimuovere la voce qualnas2.Aggiornamento di file XML tramite 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>
Il nodo percorsofile con type = SSSB funziona quando uso il $ _. InnerText, ma non riesce a trovare un modo per aggiornare o rimuovere gli altri nodi. Qui è il mio codice:
$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' }
}
Se io passo attraverso il codice usando PowerGUI ogni nodo viene trovato e la sostituzione/rimozione è tentato come mi aspetto, ma o ottenere gli errori (stringa alla conversione XmlElement) o nessun errore ma nessun aggiornamento a seconda di come eseguo l'assegnazione. Ad ogni modo per cambiare/rimuovere nodi specifici se non ci sono attributi come nell'esempio SSSB?
Nota: PreserveWhitespace deve essere impostato prima di Load(). http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.preservewhitespace.aspx – NYCdotNet