Potremmo trovarci nella situazione in cui ci viene richiesto di controllare se diverse postazioni siano connesse in rete. Il modo più semplice per eseguire tale controllo consiste nel verificare se le postazioni rispondono al ping. In questo articolo mostrerò come raggiungere tale obiettivo con uno script PowerShell che, dato un elenco di postazioni contenuto in un file di testo, provvede ad eseguire il ping e a memorizzare i risultati all'interno di un documento MS Excel.
Lo script può essere scaricato dal seguente link
DOWNLOAD
 |
FIG 1 - Script PowerShell PingHost2Excel |
La prima istruzione consiste nell'assegnare alla variabile $path il nome del file, comprensivo di percorso, contenente l'elenco delle workstation da verificare. Il contenuto del file sarà simile a quello mostrato in FIG 2: ogni riga contiene il nome della postazione da verificare.
 |
FIG 2 - Elenco Workstation da verificare |
Successivamente con Test-Path verifichiamo se il file è presente, in caso contrario terminiamo lo script visualizzando il messaggio di file non trovato
$path = ".\ElencoWKS.txt"
if (Test-Path $path)
Se il file contenente l'elenco delle workstation viene trovato procediamo alla creazione di un nuovo documento MS Excel e a posizionarci sul primo foglio di lavoro.
$objExcel = new-object -comobject excel.application
$objWorkbook = $objExcel.Workbooks.Add()
$objWorksheet = $objWorkbook.Worksheets.Item(1)
Con la seguente istruzione facciamo in modo che il documento MS Excel sia visibile a video durante la compilazione.
$objExcel.Visible = $True
La prima riga del foglio di lavoro la utilizziamo come intestazione assegnando un nome a ciascuna colonna in base al contenuto che andremo successivamente ad inserire.
$objWorksheet.Cells.Item(1, 1) = "Nome Host"
$objWorksheet.Cells.Item(1, 2) = "Ping"
$objWorksheet.Cells.Item(1, 3) = "Indirizzo IP"
Nella variabile $wks andiamo a caricare l'elenco delle postazioni da analizzare. La variabile $row viene inizializzata a 2 (nella prima riga del foglio di lavoro abbiamo inserito l'intestazione) e verrà utilizzata per spostarci alla riga successiva man mano che verranno analizzate/inserite le workstation in elenco.
$wks= gc $path
$row=2
La parte più importante dello script è rappresentata dal ciclo foreach-object: per ogni postazione presente in elenco provvede ad inserire, all'interno del file MS Excel, il nome della postazione, l'esito del ping (OK se andato a buon fine o KO nel caso in cui non si riceve risposta) e l'eventuale indirizzo IP della postazione.
$wks| foreach-object{
$ping=$null
$workstation = $_
$ping = Test-Connection $workstation -Count 1 -ea silentlycontinue
$objWorksheet.Cells.Item($row,1) = $workstation
if($ping){
$objWorksheet.Cells.Item($row,2) = "OK"
$objWorksheet.Cells.Item($row,3) = $ping.IPV4Address.IPAddressToString
}
else {
$objWorksheet.Cells.Item($row,2) = "KO"
$objWorksheet.Cells.Item($row,3) = "-"
}
$row++
}
 |
FIG 3 - Foglio MS Excel con i risultati della verifica |