Microsoft PowerShell è una grande piattaforma di scripting. Microsoft fornisce il supporto PowerShell per quasi tutti i ruoli e le caratteristiche di Windows Server. È possibile utilizzare PowerShell per automatizzare compiti ripetuti, nonché eseguire facilmente compiti utilizzando la riga di comando che di solito si eseguono utilizzando gli strumenti GUI. Per esempio, in un ambiente di produzione, se avete bisogno di controllare lo stato delle patch sui server Windows, usare l’approccio di scripting di PowerShell è molto più facile che connettersi ad ogni server individualmente e poi controllare lo stato delle patch. Sono un utente regolare di PowerShell e ho progettato migliaia di script PowerShell nei miei 18 anni di esperienza IT.
Prima di PowerShell, il principale linguaggio di scripting per eseguire compiti operativi di Windows era Visual Basic Scripting. Anche se Visual Basic Scripting esiste ancora e molti amministratori IT preferiscono ancora usare lo scripting VB, vale la pena menzionare che PowerShell riduce la complessità del codice. Ad esempio, per controllare i servizi su un computer Windows, è necessario scrivere il codice VBScript in un blocco note, salvare il file come .VBS e poi eseguirlo utilizzando il file di esecuzione host CSCript. Ma usando PowerShell puoi usare un semplice cmdlet Get-Service che può aiutarti a elencare rapidamente i servizi da un computer Windows. Se avete bisogno di salvare l’output in un file usando lo script VB, avrete di nuovo bisogno di scrivere un mucchio di codice nello script VB, che comporta l’apertura del file e poi la scrittura del contenuto del file. PowerShell semplicemente non richiede di aprire il file prima che il contenuto recuperato da una cmdlet PowerShell possa essere scritto in un file. Tutto quello che devi fare è usare le cmdlets “Export-CSV” o “Add-Content”.
Cmdlets: Gli elementi costitutivi degli script PowerShell
PowerShell offre cmdlets (pronunciato “command-lets”), a volte indicati come strumenti a riga di comando, che è possibile utilizzare per ottenere informazioni sul sistema operativo, applicazioni installate su un computer Windows, informazioni di rete, stato delle patch sul computer Windows, e molto altro. È importante notare che le cmdlets di PowerShell sono scritte in .NET e usano classi .NET per eseguire i compiti richiesti. Se desideri scoprire quali cmdlets PowerShell sono disponibili sul computer locale, esegui questo comando:
Get-Command
Get-Command è un cmdlet PowerShell che recupera cmdlets, funzioni, filtri e script PowerShell installati sul computer locale. Il comando qui sopra interroga tutti i moduli PowerShell installati sul computer locale. Se hai bisogno di vedere tutti i comandi installati sul computer locale in un ordine, esegui questo comando:
Get-Command -Type cmdlet | Sort-Object -Property Noun |FT -GroupBy Noun
Tre tipi di operazioni PowerShell
Usando PowerShell puoi eseguire tre tipi di operazioni. Sono Get, Set e Remove. Qualsiasi cmdlet PowerShell che inizia con “Get” è tipicamente usato per recuperare informazioni dai componenti di Windows. Per esempio, Get-ADUser esegue un’operazione di lettura contro il database Active Directory per recuperare le informazioni dell’utente. Alcuni esempi di utilizzo del cmdlet Get-ADUser PowerShell sono mostrati di seguito:
Get-ADUser -Filter * -SearchBase “OU=TestUsers,DC=TechGenix,DC=Com”
Il comando precedente recupera tutti gli account utente situati in un’unità organizzativa mentre il comando sottostante recupera le proprietà associate a un singolo utente di Active Directory:
Get-ADUser -Identity JohnThomas -Properties *
I cmdlets PowerShell che iniziano con “Set” sono usati per modificare le informazioni dei componenti Windows. Per esempio, usando Set-ADUser puoi vari compiti operativi come mostrato nei comandi qui sotto:
Set-ADUser -Identity JohnThomas -HomeFolder \\Server1\%UserName%
I comandi qui sotto impostano la proprietà della posta per l’utente JohnThomas.
$ThisUser = Get-ADUser -Identity JohnThomas -Properties Mail
$ThisUser.Mail = [email protected]
Set-ADUser -Instance $ThisUser
Tutti i cmdlets PowerShell che iniziano con “Remove” sono usati per eseguire operazioni di cancellazione. Per esempio, Remove-ADUser può essere usato per rimuovere un utente Active Directory come mostrato di seguito:
Remove-ADUser -Identity JohnThomas
Combinazione di cmdlets PowerShell
Una delle migliori caratteristiche che PowerShell fornisce è la capacità di combinare due o più cmdlets PowerShell in un singolo comando PowerShell. Tali comandi sono talvolta chiamati comandi PowerShell one-liner. Per esempio, se hai bisogno di rimuovere tutti gli account utente disabilitati da Active Directory, puoi combinare i cmdlets PowerShell Search-ADAccount e Remove-ADUser come mostrato nel comando seguente:
Search-ADAccount -AccountDisabled | Where {$_.ObjectClass -eq “User”} | Remove-ADUser
Come puoi vedere nel comando qui sopra, Search-ADAccount PowerShell cmdlet esegue una ricerca in tutta la directory attiva per cercare gli account disabilitati e poi usando l’operatore pipe (|) stai istruendo il Remove-ADUser ad eseguire un’operazione di cancellazione solo sugli utenti che vengono recuperati dal Search-ADAccount.
Alias di PowerShell
Anche se molte cmdlets di PowerShell sono facili da leggere e usare, PowerShell fornisce anche una caratteristica chiamata alias di PowerShell. PowerShell è abbastanza intelligente da completare il nome di una cmdlet PowerShell con la pressione del tasto Tab. Nel caso tu abbia difficoltà a ricordare il nome delle cmdlet PowerShell, puoi creare alias PowerShell. Per esempio, puoi creare un alias per il cmdlet PowerShell Get-MailBoxStatistics usando il comando seguente:
New-Alias ShowMB Get-MailBoxStatistics
Quando digiti “ShowMB” nella finestra PowerShell, PowerShell cerca il cmdlet associato all’alias ShowMB e lo esegue.
Salvare le informazioni in un file CSV
Quando si tratta di salvare le informazioni in un file CSV, PowerShell risparmia molto lavoro di scripting. PowerShell fornisce il cmdlet “Export-CSV” che puoi usare con qualsiasi altro cmdlet PowerShell. Per impostazione predefinita, qualsiasi comando PowerShell che si esegue mostra le informazioni risultanti nella finestra di comando PowerShell a meno che non si aggiunga Export-CSV alla fine del comando come mostrato nel comando sottostante:
Get-ADUser -Filter * -SearchBase “OU=TestUsers,DC=TechGenix,DC=Com” | Export-CSV C:\Temp\AllUsersInAnOU.CSV
Nota che nel comando di cui sopra, stai solo aggiungendo “Export-CSV” alla fine del comando per avere l’output esportato in un file CSV.
Come puoi vedere, gli script PowerShell riducono il tempo necessario per eseguire compiti operativi quotidiani. PowerShell è in grado di eseguire tre compiti operativi; Get, Set e Remove e il 97% delle cmdlet PowerShell inizia con queste tre parole per identificare facilmente la funzione di una cmdlet PowerShell. Abbiamo anche spiegato come sia facile combinare due cmdlets in un singolo comando per rendere i tuoi script PowerShell più efficienti.