Potenza della shell per Windows

PowerShell è progettato per funzionare nel modo in cui lavorano gli amministratori, anziché gli utenti finali, utilizzando comandi e script della shell interattivi. Tuttavia, puoi comunque utilizzare la GUI di MMC per alcune attività: esegui alcune funzioni nella MMC, quindi premi un pulsante e c'è uno script che esegue quelle stesse funzioni. PowerShell supera i limiti di cmd.exe e fornisce tutte le funzioni necessarie per automatizzare le operazioni quotidiane.

Potenza della shell per Windows

Come funziona PowerShell

L'MSI di installazione straordinariamente piccolo di PowerShell esegue tutte le normali operazioni di installazione, creando un file cartella di installazione denominata %programfiles%\Windows PowerShell\v1.0 e copiando i file PS principali e il supporto strumenti in esso. Vengono inoltre impostate alcune voci di registro nella chiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1 per gestire il controllo delle versioni (notare che "v1.0" nei file di programma e \1 nella chiave di registro).

Gli script di PowerShell hanno un'estensione di file PS1, l'idea è che il numero finale, qui 1, cambierà con ogni versione. Quindi puoi avere installazioni affiancate di v1 e v2 e gli script prenderanno di mira la versione giusta. Il programma di installazione modifica anche la voce Percorso del sistema, aggiungendo "C:\Programmi\Windows PowerShell\v1.0\" in modo che il sistema possa trovare powershell.exe, l'eseguibile principale. powershell.exe è infatti un'applicazione non gestita che determina semplicemente l'ambiente richiesto e quindi carica dinamicamente la versione corretta di CLR e della shell stessa, che è tutto codice gestito.

L'host PowerShell è implementato da microsoft.powershell.consolehost.dll, una piccola DLL che supporta PowerShell interazione con la console: consolehost.dll chiama il motore PowerShell per visualizzare un prompt dei comandi e raccogliere l'input dell'utente in lavorazione. La maggior parte delle funzionalità di PowerShell è implementata da system.management.automation.dll, situato nella cartella di installazione di PowerShell (%Programfiles%\windows PowerShell\v1.0 per impostazione predefinita).

Una delle cose che mi ha entusiasmato fin dall'inizio è stata che uno degli obiettivi chiave del design di questo prodotto è abilitare agli amministratori di accedere alla potenza di .NET in modo incentrato sull'amministratore, anziché incentrato sul programmatore, modo. Ma cosa significa in realtà? Quando utilizzi quasi tutti gli strumenti di amministrazione, devi prima gestire uno o più oggetti; si utilizza lo strumento per stabilire il contesto e puntare a una chiave di registro o a un'unità organizzativa. Quindi fai qualcosa a quell'oggetto, ad esempio aggiungendo alcune nuove chiavi al registro, modificando una password o altro. Questa seconda azione può includere anche la rendicontazione sugli oggetti e sui loro stati.

Ecco un frammento di script che controlla una serie di cartelle per vedere se un particolare file è presente e, in caso contrario, stampa un messaggio:

$radice = ls C:\ | Dove {$_.PSIsContainer}

$cartellaok = 0

foreach ($dir in $root){

$nam = $dir.nome+”\md5OK”

$ok = ls $nam -ea continua silenziosamente

Se (! $ok){ write-host “Controllo MD5 mancante in $($dir.name)”}

altrimenti {$folderok++}

}

write-host "$($root.count) controllato, $folderok sono OK"

Questo script esegue innanzitutto la scansione della cartella principale della mia unità C, seleziona solo le cartelle nell'unità C e assegna questo insieme di voci alla variabile $root, un array di oggetti di voci di directory. Quindi lo script esamina ciascun oggetto cartella in questo array per vedere se contiene un file chiamato MD5OK (un breve file di flag che indica che tutti i file in questa cartella hanno il checksum MD5 convalidato). Lo script visualizza un messaggio per qualsiasi cartella in cui questo file non è presente e infine stampa un riepilogo dei risultati. Sono stati prima selezionati gli oggetti su cui agire, poi elaborati, con qualche rendicontazione di sintesi. Naturalmente, questo è un esempio molto semplificato, privo di gestione degli errori (ad esempio, cosa succede se l'unità C non ha voci di directory?), ma illustra un approccio amministrativo. Ho sviluppato e utilizzato una serie di script simili a questo per gestire un archivio di file di grandi dimensioni (circa 1.500 cartelle, ciascuna con da cinque a 50 file, con dimensioni comprese tra 50 MB e 500 MB).