Sito web di notizie tecnologiche e videogames.

Leggere le classi del CIM con Powershell

7

Nello scorso articolo dedicato al CIM abbiamo visto cos’è ed abbiamo fatto qualche semplice esempio tramite Poweshell.

In questo articolo, invece, andremo a scrivere uno script che raccoglie le informazioni principali di un computer e le organizza in strutture dati tali da facilitare la scrittura su file, che sarà il passo successivo.

NB: Il linguaggio di scripting usato in questo articolo è Powershell (v 5.1)

Primo passo:  raccogliere le informazioni del CIM

$so_versions = Get-CimInstance -Class Win32_OperatingSystem
$pc_names    = Get-CimInstance -Class Win32_Computersystem
$products    = Get-CimInstance -Class Win32_Product       
$nics        = Get-CimInstance -Class Win32_NetworkAdapterConfiguration –Filter 'IPEnabled = true'

  • Così facendo raccoglieremo e memorizzeremo la versione del sistema operativo, il nome del pc, i sw installati e le configurazioni di rete attive sul pc.

Secondo passo:  elaborare le informazioni acquisite dal CIM

I dati appena acquisiti sono ancora ‘grezzi’, quindi vanno elaborati e memorizzati in altre variabili.

Per questo dichiariamo altre quattro variabili:

$nics_array = New-Object System.Collections.ArrayList
$products_array = New-Object System.Collections.ArrayList
$so_version
$pc_name 
  • Come potete notare le prime due sono degli ArrayList, questo perché le configurazioni di rete e i prodotti di un computer possono essere più di uno. La struttura dati dell’ArrayList ci permette proprio di memorizzare più elementi in un unico spazio, come fosse una lista di informazioni.

Terzo passo:  utilizzo delle funzioni

Per scopi di leggibiltà del codice divideremo l’elaborazione dei dati in quattro funzioni diverse.

La funzione relativa alla versione del sistema operativo è la seguente:

function get_so_version{
    foreach($so in $so_versions)
    {
        $script:so_version = $so.version
    }
}
  • In questo modo la variabile $so_version conterrà la versione del sistema operativo del pc pronta per essere scritta su file

La funzione che raccoglie il nome del computer è analoga a quella per la versione del SO:

function get_pc_name{
foreach($pcn in $pc_names){
$script:pc_name = $pcn.name
}
}
  • Ovviamente cambiano le variabili rispetto alla funzione precedente. La logica rimane la medesima.

La funzione seguente è quella relativa alle informazioni di rete:

function get_network_info{
foreach ($nic in $nics){
 $nic_array = New-Object System.Collections.ArrayList
        $IPAddress = $nic.IPAddress
        $ipsubnet = $nic.ipsubnet
        $macaddress = $nic.macaddress
        $dnshostname = $nic.dnshostname
        $defaultipgateway = $nic.defaultipgateway
        $nic_array.AddRange(($IPAddress, $ipsubnet, $macaddress, $dnshostname, $defaultipgateway))
        $script:nics_array.Add($nic_array)
    }
}
  • Analizzando ogni elemento presente nell’ArrayList $nics andremo a creare un’ArrayList per ogni elemento trovato (ovvero per ogni configurazione di rete attiva). L’ArrayList di ogni configurazione di rete verrà popolato con una serie di proprietà (indirizzo ip, subnet, mac address,gateway e dns).

La funzione che raccoglie i prodotti software del computer è analoga a quella per le informazioni di rete:

function get_products{
    foreach($product in $products){
        $product_array = New-Object System.Collections.ArrayList
        $name = $product.name
        $version = $product.version
        $product_array.AddRange(($name, $version))
        $script:products_array.Add($product_array)
    }
}
  • Ovviamente cambiano le variabili rispetto alla funzione precedente. La logica rimane la medesima.

A questo punto lo script dovrebbe risultare il seguente:

Leggere le classi del CIM con Powershell
Leggere le classi del CIM con Powershell

Conclusione:

Arrivati a questo punto le variabili $nics_array, $products_array, $so_version e $pc_name contengono le informazioni del computer pronte ad essere scritte su file.

Ma questo lo vedremo nel prossimo articolo!

Se vuoi saperne di più … utilizzo classi CIM con Powershell

Commenti