Sito web di notizie tecnologiche e videogames.

Powershell: scrittura su XML delle informazioni del CIM

2

Nello scorso articolo dedicato a Powershell abbiamo visto come raccogliere ed elaborare le informazioni delle classi del CIM.

Come promesso in questo articolo andremo ad aggiungere allo script precedente una funzione per scriverle su un file XML!

Cos’è l’XML?

L’XML (eXtensible Markup Language) è un metalinguaggio di markup che fornisce un formato per la descrizione di dati. I file .XML vengono successivamente aperti con un browser e visualizzati come fossero una pagina web.

Per esempio, se fossi un concessionario di auto e avessi bisogno di memorizzare delle informazioni su alcune auto che possiedo potrei generare il seguente codice XML:

<?xml version="1.0"?>
<ROOT>
<AUTO1>
<MARCA> MARCA DELLA MACCHINA </MARCA>
<TARGA> TARGA DELLA MACCHINA </TARGA>             
<COLORE> COLORE DELLA MACCHINA </COLORE>
</AUTO1>
<AUTO2>
<MARCA> MARCA DELLA MACCHINA </MARCA>
<TARGA> TARGA DELLA MACCHINA </TARGA>             
<COLORE> COLORE DELLA MACCHINA </COLORE>
</AUTO2>
</ROOT>

Il codice darà come risultato il seguente output:

Powershell: scrittura su XML delle informazioni del CIM
Powershell: scrittura su XML delle informazioni del CIM

Come possiamo notare nella struttura dati fornita, i TAG <AUTO>, che identificano ogni macchina, sono indentati (spostati a destra) rispetto al TAG <ROOT>. Questo perché essi sono ‘figli’ del TAG radice del documento (in questo caso <ROOT>). Probabilmente in un prossimo articolo approfondiremo questo metalinguaggio, per ora mi limito a darvi un’idea di quello che è.

Ora che abbiamo un’idea di cos’è l’XML possiamo procedere modificando il file .ps1 dello scorso atricolo!

Primo passo: dichiarare la variabili per l’XML

Powershell: scrittura su XML delle informazioni del CIM
Powershell: scrittura su XML delle informazioni del CIM
  • La prima riga di codice memorizza dentro una variabile il perscorso del file di destinazione dove andremo a scrivere. Non c’è bisogno che il file si già esistente in quanto il nostro programma lo creerà da solo;
  • Con la seconda riga andremo a memorizzare dentro una variabile l’oggetto che scriverà sul file .xml;
  • La terza e la quarta riga servono per fornire una descrizione della pagina e il nome del TAG ‘radice’.

Dato che vogliamo memorizzare sul file .xml le informazioni di un computer, struttureremo il file xml nel seguente modo:

<ROOT>
<PC Name="nome del pc">
<Operating_System Version="versione sistema operativo"/>
<Networks>
     <Network IP_Address="indirizzo ip" … />
<Network IP_Address="indirizzo ip" … />
</Networks>
<Products>
<Product Name="nome sw" Version="versione"/>
<Product Name="nome sw" Version="versione"/>
</Products>
</PC>
</ROOT>

 

Secondo passo: scrivere la funzione per la scrittura su XML

Powershell: scrittura su XML delle informazioni del CIM
Powershell: scrittura su XML delle informazioni del CIM
  • La prima riga serve per creare un oggetto che possa modificare il file .xml
  • La seconda riga crea un TAG <PC> tramite il metodo “CreateElement”
  • La terza esplicita che il TAG <PC> è figlio del TAG <ROOT>, questo perchè tutti i tag devono essere figli di qualche altro TAG, eccetto il TAG <ROOT>
  • La quarta riga aggiunge un attributo “Name” a <PC> e come valore ci mette $pc_name, ovvero la variabile che contiene il nome del pc (l’abbiamo definita nello scorso articolo).
  • Nella quinta e sesta riga si crea un TAG <Operating_System>,figlio di <PC>, con attributo “version” e con valore $so.version. Questo perchè <Networks> è uno dei campi di <PC>
  • Nella settima riga si crea <Networks>, figlio di <PC>. Questo perchè <Networks> è uno dei campi di <PC>
  • Il ciclo foraech scorre l’ArrayList $nics_array (che contiene un array per ogni configurazione di rete attiva). Per ogni array contenuto in $nics_array viene creato un TAG <Network> figlio di <Networks> e gli vengono assegnati determinati attributi e valori come l’indirizzo ip, il mac address …
  • Il secondo ciclo foreach scorre l’ArrayList di prodotti con la stessa logica del ciclo precedente.

Conclusione

A questo punto sarà sufficiente richiamare la funzione ed eseguire il programma affinchè venga creato un file .xml come il seguente:

Powershell: scrittura su XML delle informazioni del CIM
Powershell: scrittura su XML delle informazioni del CIM

Se vuoi saperne di più … il CIM & WMI, oppure CIM Cmdlets

Commenti