giovedì 27 settembre 2018

Come (ciclare su) leggere un file excel con Powershell

Buongiorno a tutti,
 eccoci qui con un altro articolo interessante che vede protagonisti excel e gli script.

Nello scorso articolo "Come (ciclare su) leggere un file EXCEL con VBSCRIPT" abbiamo visto come è possibile leggere un file di excel da vbscript e lanciare dei comandi riga per riga, con i valori delle celle come parametri.

Oggi vediamo come fare la stessa cosa... ...con Powershell!

Bando alle ciance, ecco cosa faremo:

  1. Creeremo un file excel con gli utenti che ci interessa usare
  2. Cicleremo (loop) sul file excel per ottenere ogni utente
  3. Interpelleremo il dominio Active Directory per ottenere informazioni su ciascun utente: vedremo l'ultima volta che l'utente ha cambiato la password



Il file excel users.xlsx

ecco come si presenta il nostro file (l'ho riciclato dall'altro articolo):

come vedete, nella colonna E troviamo lo username degli utenti.

Lo script

import-module activedirectory #importo il modulo Active Directory

$ExcelObject = new-Object -comobject Excel.Application  # creo l'instanza di programma excel
$ExcelObject.visible = $false # non voglio che la finestra di excel sia visibile
$ExcelObject.DisplayAlerts =$false # non voglio vedere alerts o messaggi da excel.
$strPath1="C:\Users\DiegoC\Desktop\TMP\Private\SCRIPTOMANE\2018-09-25_powershell_excel\users.xlsx"  # definisco il percorso del file excel.

if (Test-Path $strPath1) {  #controllo che il file ESISTA
$ActiveWorkbook = $ExcelObject.WorkBooks.Open($strPath1)  # apro il workbook excel.
$ActiveWorksheet = $ActiveWorkbook.Worksheets.Item(1)  # seleziono il foglio numero 1
} else { 
echo "ORRORE: il file excel non esiste"; # altrimenti scrivo un messaggio simpatico....
}
$intRow = 2 # parto dalla riga 2, perchè la prima contiene le intestazioni
Do {
    $UserName = $ActiveWorksheet.Cells.Item($intRow, 5).Value() #leggo lo username dalla quinta colonna (E)
    $FName = $ActiveWorksheet.Cells.Item($intRow, 1).Value() #leggo il full Name dalla prima colonna (A)
    $obj = get-aduser $UserName -Properties PasswordLastSet # ottengo da AD le proprietà dell'utente, incluso quando ha cambiato la pw l'ultima volta.
    write-host "l'utente " $FName " ha cambiato la password il " $obj.PasswordLastSet
    $intRow++

} While ($ActiveWorksheet.Cells.Item($intRow,1).Value() -ne $null) #continuo fino a che non trovo una riga vuota.
$ExcelObject.Workbooks.Close() # chiudo il file
$ExcelObject.Quit() # chiudo excel






Il risultato


Come vedete, leggere un file excel con Powershell, riga per riga, non è molto diverso da come si fa con Vbscript. Tuttavia Powershell offre veramente moltissime possibilità per amministrare i nostri server, le nostre applicazioni e, in generale, interagire con windows in maniera parecchio facile e veloce.

Ad esempio, se ci trovassimo su un server Exchange (o se stessimo interagendo con il server dal nostro client attraverso una session remota di Powershell) potremmo lanciare dei comandi per ogni casella di posta o utente riportato nel nostro file...



A voi la scelta dei comandi da far eseguire alla nostra amata Powershell, con i dati che leggete da excel!

Happy Scripting!

Nessun commento:

Posta un commento

I commenti sono soggetti a moderazione, prima di essere pubblicati.

Qualsiasi contenuto illecito, immorale o che io ritenga (arbitrariamente) offensivo od inappropriato, verrà cancellato.