Come analizzare file XML utilizzando PowerShell
-
Usa
Select-Xml
per Analizzare File XML Utilizzando PowerShell -
Usa la Classe
System.Xml.XmlDocument
per Analizzare File XML Utilizzando PowerShell -
Usa la Classe
System.Xml.XmlTextReader
per Analizzare File XML Utilizzando PowerShell - Conclusione

Il Linguaggio di Marcatura Estensibile o formato XML è ancora ampiamente utilizzato oggi. I file di configurazione, i feed RSS e i file di Office sono solo alcuni esempi che utilizzano il formato XML.
L’analisi dell’XML in PowerShell è un’attività comune, spesso necessaria per compiti come l’estrazione di dati, la gestione della configurazione e l’automazione. Sebbene PowerShell offra diversi metodi per analizzare l’XML, ogni metodo ha i suoi punti di forza e casi d’uso.
In questo articolo esploreremo tre metodi per analizzare l’XML in PowerShell: utilizzando il cmdlet Select-Xml
, la classe System.Xml.XmlDocument
e la classe System.Xml.XmlTextReader
. Forniremo esempi dettagliati e spiegazioni per ogni metodo, evidenziando la loro sintassi, funzionalità e applicazioni pratiche.
Usa Select-Xml
per Analizzare File XML Utilizzando PowerShell
Analizza Elementi XML di PowerShell
Innanzitutto, copriamo uno dei modi più popolari e semplici per utilizzare PowerShell per analizzare l’XML con Select-XML
. Il comando Select-Xml
di PowerShell ci consente di fornire un file o una stringa XML e un filtro XPath
per estrarre informazioni specifiche.
Abbiamo un file XML su molti PC che vorremmo analizzare con PowerShell. Ad esempio, ogni macchina ha un nome, un indirizzo IP e un elemento Include
che può essere utilizzato in un rapporto.
Esempio di XML:
<Computers>
<Computer>
<Name>WINPC-01</Name>
<Ip>127.0.0.1</Ip>
<Include>true</Include>
</Computer>
<Computer>
<Name>WINPC-02</Name>
<Ip>192.168.1.105</Ip>
<Include>false</Include>
</Computer>
<Computer>
<Name>WINPC-03</Name>
<Ip>192.168.1.104</Ip>
<Include>true</Include>
</Computer>
</Computers>
Vogliamo utilizzare PowerShell per analizzare questo file XML e ottenere i nomi dei computer. Per farlo, potremmo usare il comando Select-XML
.
Ad esempio, nel file sopra, i nomi dei computer appaiono nel testo interno (InnerXML
) dell’elemento Name
.
Prima forniremmo il corretto XPath
per trovare i nomi dei computer. Solo i nodi Name
contenuti negli elementi Computer
verrebbero restituiti utilizzando questa tecnica XPath
.
Codice di esempio:
Select-Xml -Path sample.xml -XPath '/Computers/Computer/Name' | ForEach-Object { $_.Node.InnerXML }
Usiamo Select-Xml
per cercare nel file XML situato in C:\path\sample.xml
i nodi corrispondenti all’espressione XPath '/Computers/Computer/Name'
. Questa espressione XPath istruisce PowerShell a selezionare tutti gli elementi <Name>
all’interno di ciascun elemento <Computer>
sotto il nodo radice <Computers>
.
Poi utilizziamo il cmdlet ForEach-Object
per iterare sui risultati restituiti dal cmdlet Select-Xml
. All’interno di questo ciclo, accediamo alla proprietà InnerXML
di ogni nodo corrispondente.
Questa proprietà contiene il contenuto del testo interno dell’elemento XML, permettendoci di estrarre i dati desiderati.
Output:
Analizza Attributi XML di PowerShell
Ora, prendiamo un nuovo approccio per individuare i nomi dei computer. Invece di essere rappresentati da elementi XML, i descrittori dei computer sono espressi direttamente da attributi XML.
Di seguito è riportato un esempio di file XML con descrittori di computer rappresentati da attributi. Possiamo ora vedere ogni descrittore come un attributo piuttosto che come un elemento.
Esempio di XML:
<Computers>
<Computer name="WINPC-01" ip="127.0.0.1" include="true" />
<Computer name="WINPC-02" ip="192.168.1.104" include="false" />
<Computer name="WINPC-03" ip="192.168.1.105" include="true" />
</Computers>
Poiché ogni descrittore è un attributo, modifica l’XPath
solo per trovare gli elementi Computer
. Quindi, utilizzando un cmdlet ForEach-Object
, trova il valore dell’attributo name
.
Codice di esempio:
Select-Xml -Path sample.xml -XPath '/Computers/Computer' | ForEach-Object { $_.Node.name }
Usiamo Select-Xml
per cercare nel file XML situato in C:\path\computers-attr.xml
i nodi corrispondenti all’espressione XPath '/Computers/Computer'
. Questa espressione XPath seleziona tutti gli elementi <Computer>
sotto il nodo radice <Computers>
.
Poi utilizziamo il cmdlet ForEach-Object
per iterare sui risultati; all’interno del ciclo, accediamo alla proprietà name
di ogni nodo corrispondente. Questa proprietà rappresenta il valore dell’attributo name
di ciascun elemento <Computer>
.
Output:
Che stiamo leggendo elementi o attributi, la sintassi di Select-Xml
è scomoda: ci costringe a utilizzare il parametro XPath
, poi a piping il risultato a un ciclo e infine a cercare i dati sotto la proprietà Node
.
Usa la Classe System.Xml.XmlDocument
per Analizzare File XML Utilizzando PowerShell
La classe System.Xml.XmlDocument
per analizzare l’XML in PowerShell offre una soluzione versatile ed efficace per gestire i dati XML, rendendola uno strumento prezioso per vari compiti di automazione, elaborazione dei dati e gestione della configurazione.
Questo metodo comporta la creazione di un’istanza della classe XmlDocument
, il caricamento del contenuto XML nell’oggetto documento e quindi la navigazione attraverso i nodi del documento per accedere ai dati desiderati.
Codice di esempio:
$xmlDocument = New-Object System.Xml.XmlDocument
$xmlDocument.Load("sample.xml")
$computerNodes = $xmlDocument.SelectNodes("//Computer")
foreach ($computerNode in $computerNodes) {
$name = $computerNode.SelectSingleNode("Name").InnerText
Write-Output $name
}
In questo frammento di codice, creiamo una nuova istanza della classe System.Xml.XmlDocument
utilizzando New-Object
. Poi carichiamo il contenuto XML dal file C:\path\computers.xml
dentro l’oggetto $xmlDocument
utilizzando il metodo Load
.
Usiamo il metodo SelectNodes
per recuperare tutti gli elementi <Computer>
nel documento XML.
Poi, iteriamo su ogni nodo <Computer>
utilizzando un ciclo foreach
. All’interno del ciclo, usiamo SelectSingleNode
per trovare l’elemento <Name>
all’interno di ogni nodo <Computer>
e estrarre il suo testo interno utilizzando la proprietà InnerText
.
Infine, usiamo Write-Output
per stampare i nomi dei computer.
Output:
Usa la Classe System.Xml.XmlTextReader
per Analizzare File XML Utilizzando PowerShell
Analizzare l’XML in PowerShell utilizzando la classe System.Xml.XmlTextReader
offre un metodo semplice ed efficiente in termini di memoria per elaborare i dati XML. Questa classe fornisce uno stream in sola lettura, solo in avanti, che analizza i dati XML in modo efficiente senza caricare l’intero documento in memoria.
Utilizzando XmlTextReader
, gli script di PowerShell possono estrarre in modo efficiente elementi o attributi specifici dai documenti XML, abilitando compiti come l’estrazione di dati, la gestione della configurazione e l’automazione.
Codice di esempio:
$xmlFilePath = "sample.xml"
$xmlReader = [System.Xml.XmlTextReader]::new($xmlFilePath)
while ($xmlReader.Read()) {
if ($xmlReader.NodeType -eq "Element" -and $xmlReader.Name -eq "Name") {
$name = $xmlReader.ReadString()
Write-Output $name
}
}
In questo frammento di codice, specifichiamo il percorso al file XML utilizzando la variabile $xmlFilePath
. Poi creiamo una nuova istanza della classe System.Xml.XmlTextReader
e la inizializziamo con il contenuto XML dal file specificato da $xmlFilePath
.
Usiamo un ciclo while
per iterare attraverso il contenuto XML utilizzando il metodo Read
della classe XmlTextReader
. All’interno del ciclo, verifichiamo se il tipo di nodo corrente è un elemento e se il suo nome è Name
.
Se entrambe le condizioni sono soddisfatte, utilizziamo il metodo ReadString
per estrarre il testo interno dell’elemento <Name>
e stamparlo utilizzando Write-Output
.
Output:
Conclusione
Analizzare l’XML in PowerShell è un’abilità versatile ed essenziale per molti compiti di automazione e elaborazione dei dati. Comprendendo i vari metodi disponibili, come Select-Xml
, System.Xml.XmlDocument
e System.Xml.XmlTextReader
, gli utenti di PowerShell possono estrarre e manipolare efficientemente i dati dai documenti XML per soddisfare le proprie esigenze.
Che si tratti di analizzare elementi o attributi, ciascun metodo offre i suoi vantaggi, consentendo agli script di PowerShell di gestire i dati XML in modo efficace. Sfruttando queste tecniche di analisi, gli utenti di PowerShell possono semplificare i loro flussi di lavoro e raggiungere i loro obiettivi di automazione in modo più efficiente.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn