ARGOMENTO about_Scripts DESCRIZIONE BREVE Viene illustrato come scrivere ed eseguire script in Windows PowerShell. DESCRIZIONE DETTAGLIATA Uno script è un file di testo che contiene uno o più comandi di Windows PowerShell. Gli script di Windows PowerShell hanno l'estensione .ps1. La scrittura di uno script consente di salvare un comando per l'uso successivo e di agevolarne la condivisione con altri. Fatto più importante, consente di eseguire i comandi semplicemente digitando il percorso dello script e il nome file. Gli script possono essere semplici come un solo comando in un file o estesi come un programma complesso. Gli script dispongono di funzionalità aggiuntive, ad esempio il commento speciale #Requires, l'utilizzo di parametri, il supporto per le sezioni di dati e la firma digitale per la protezione. È anche possibile scrivere argomenti della Guida per gli script e per qualsiasi funzione nello script. MODALITÀ DI SCRITTURA DI UNO SCRIPT Uno script può contenere qualsiasi comando di Windows PowerShell valido, inclusi comandi singoli, comandi che utilizzano la pipeline, funzioni e strutture di controllo quali istruzioni IF e cicli For. Per scrivere uno script, avviare un editor di testo, ad esempio Blocco note o un editor di script, quale Windows PowerShell Integrated Scripting Environment (ISE). Digitare i comandi e salvarli in un file con un nome file valido e l'estensione .ps1. L'esempio seguente è uno script semplice che ottiene i servizi in esecuzione nel sistema corrente e li salva in un file di registro. Il nome del file di registro viene creato dalla data corrente. $date = (get-date).dayofyear get-service | out-file "$date.log" Per creare questo script, aprire un editor di testo o un editor di script, digitare i comandi, quindi salvarli in un file denominato ServiceLog.ps1. MODALITÀ DI ESECUZIONE DI UNO SCRIPT Per poter eseguire uno script, è necessario modificare il criterio di esecuzione predefinito di Windows PowerShell. Il criterio di esecuzione predefinito "Restricted" impedisce l'esecuzione di tutti gli script, inclusi gli script che si scrivono nel computer locale. Per ulteriori informazioni, vedere about_Execution_Policies. Per eseguire uno script, digitare il nome e il percorso completi del file di script. Ad esempio, per eseguire lo script ServicesLog nella directory C:\Scripts, digitare: c:\scripts\ServicesLog.ps1 Per eseguire uno script nella directory corrente, digitare il percorso della directory corrente oppure usare un punto per rappresentare la directory corrente, seguito da una barra rovesciata di percorso (.\). Ad esempio, per eseguire lo script ServicesLog.ps1 nella directory locale, digitare: .\ServicesLog.ps1 Come una funzionalità di protezione, Windows PowerShell non esegue script quando si fa doppio clic sulla loro icona in Esplora risorse o quando si digita il loro nome senza un percorso completo, anche quando lo script è nella directory corrente. Per ulteriori informazioni sull'esecuzione di comandi e script in Windows PowerShell, vedere about_Command_Precedence. ESECUZIONE DI SCRIPT IN MODALITÀ REMOTA Per eseguire uno script in un computer remoto, utilizzare il parametro FilePath del cmdlet Invoke-Command. Immettere il percorso e il nome dello script come valore del parametro FilePath. Lo script deve trovarsi nel computer locale o in una directory accessibile dal computer locale. Il comando seguente esegue lo script ServicesLog.ps1 nel computer remoto Server01. invoke-command -computername Server01 -filepath C:\scripts\servicesLog.ps1 PARAMETRI NEGLI SCRIPT Per definire i parametri in uno script, utilizzare un'istruzione Param. L'istruzione Param deve essere la prima istruzione in uno script, ad eccezione di commenti e di eventuali istruzioni #Requires. I parametri degli script funzionano in modo analogo ai parametri delle funzioni. I valori dei parametri sono disponibili a tutti i comandi nello script. Tutte le funzionalità dei parametri di funzione, incluso l'attributo Parameter e i relativi argomenti denominati sono validi anche negli script. Quando eseguono lo script, gli utenti digitano i parametri dopo il nome dello script. Nell'esempio seguente viene mostrato uno script Test-Remote.ps1 che dispone di un parametro ComputerName. Entrambe le funzioni di script possono accedere al valore del parametro ComputerName. param ($ComputerName = $(throw "Il parametro ComputerName è obbligatorio.")) function CanPing { $error.clear() $tmp = test-connection $computername -erroraction SilentlyContinue if (!$?) {write-host "Ping non riuscito: $ComputerName."; return $false} else {write-host "Ping riuscito: $ComputerName"; return $true} } function CanRemote { $s = new-pssession $computername -erroraction SilentlyContinue if ($s -is [System.Management.Automation.Runspaces.PSSession]) {write-host "Test remoto riuscito: $ComputerName."} else {write-host "Test remoto non riuscito: $ComputerName."} } if (CanPing $computername) {CanRemote $computername} Per eseguire questo script, digitare il nome del parametro dopo il nome dello script. Ad esempio: C:\PS> .\test-remote.ps1 -computername Server01 Ping riuscito: Server01 Test remoto non riuscito: Server01 Per ulteriori informazioni sull'istruzione Param e sui parametri delle funzioni, vedere about_Functions e about_Functions_Advanced_Parameters. GUIDA RELATIVA AGLI SCRIPT Il cmdlet Get-Help ottiene la Guida relativa a script, nonché a cmdlet, provider e funzioni. Per ottenere la Guida per uno script, digitare Get-Help e percorso e nome file dello script. Se il percorso dello script è contenuto nella variabile di ambiente Path, è possibile omettere il percorso. Ad esempio, per ottenere la Guida per lo script ServicesLog.ps1, digitare: get-help C:\admin\scripts\ServicesLog.ps1 È possibile scrivere la Guida per uno script mediante uno dei due metodi seguenti: -- Guida basata su commenti relativa agli script Creare un argomento della Guida mediante parole chiave speciali nei commenti. Per creare una Guida basata su commenti per uno script, è necessario posizionare i commenti all'inizio o alla fine del file di script. Per ulteriori informazioni sulla Guida basata su commenti, vedere about_Comment_Based_Help. -- Guida basata su XML relativa agli script Creare un argomento della Guida basato su XML, ad esempio il tipo di guida che viene in genere creato per i cmdlet. Creare una Guida basata su XML quando si prevede di tradurla in più lingue. Per associare lo script all'argomento della Guida basato su XML, utilizzare la parola chiave di commento della Guida .ExternalHelp. Per ulteriori informazioni sulla parola chiave ExternalHelp, vedere about_Comment_Based_Help. Per ulteriori informazioni sulla Guida basata su XML, vedere l'argomento relativo alla scrittura della Guida relativa ai cmdlet in MSDN Library all'indirizzo https://go.microsoft.com/fwlink/?LinkID=123415.. AMBITO DELLO SCRIPT E DOT SOURCING Ogni script viene eseguito nel proprio ambito. Funzioni, variabili, alias e unità create nello script sono presenti solo nell'ambito dello script. Non è possibile accedere a questi elementi o ai loro valori, nell'ambito nel quale viene eseguito lo script. Per eseguire uno script in un ambito diverso, è possibile specificare un ambito, ad esempio globale o locale, oppure è possibile eseguire il dot sourcing dello script. La funzionalità di dot sourcing consente di eseguire uno script nell'ambito corrente anziché nell'ambito dello script. Quando si esegue uno script sottoposto a dot sourcing, i comandi nello script vengono eseguiti come se fossero stati digitati nel prompt dei comandi. Funzioni, variabili, alias e unità vengono create dallo script nell'ambito in cui si lavora. Una volta eseguito lo script, è possibile utilizzare gli elementi creati e accedere ai loro valori nella sessione corrente. Per sottoporre a dot sourcing uno script, digitare un punto (.) e uno spazio prima del percorso dello script. Ad esempio: . C:\scripts\UtilityFunctions.ps1 -oppure- . .\UtilityFunctions.ps1 Dopo l'esecuzione dello script UtilityFunctions, vengono aggiunte all'ambito corrente le funzioni e variabili create dallo script. Ad esempio, lo script UtilityFunctions.ps1 crea la funzione New-Profile e la variabile $ProfileName. #In UtilityFunctions.ps1 function New-Profile { Write-Host "Esecuzione funzione New-Profile" $profileName = split-path $profile -leaf if (test-path $profile) {write-error "È già presente un profilo $profileName in questo computer."} else {new-item -type file -path $profile -force } } Se si esegue lo script UtilityFunctions.ps1 nell'ambito relativo, la funzione New-Profile e la variabile $ProfileName sono presenti solo durante l'esecuzione dello script. Al termine dello script, tali funzione e variabile vengono rimosse, come mostrato nell'esempio seguente. C:\PS> .\UtilityFunctions.ps1 C:\PS> New-Profile Termine 'new-profile' non riconosciuto come nome di cmdlet, funzione, programma eseguibile o file script. Verificare il termine e riprovare At line:1 char:12 + new-profile <<<< + CategoryInfo : ObjectNotFound: (new-profile:String) [], + FullyQualifiedErrorId : CommandNotFoundException C:\PS> $profileName C:\PS> Quando si sottopone a dot sourcing uno script e lo si esegue, lo script crea la funzione New-Profile e la variabile $ProfileName nella sessione dell'ambito corrente. Dopo che lo script viene eseguito, è possibile utilizzare la funzione New-Profile nella sessione, come mostrato nell'esempio seguente. C:\PS> . .\UtilityFunctions.ps1 C:\PS> New-Profile Directory: C:\Users\juneb\Documents\WindowsPowerShell Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 1/14/2009 3:08 PM 0 Microsoft.PowerShellISE_profile.ps1 C:\PS> $profileName Microsoft.PowerShellISE_profile.ps1 Per ulteriori informazioni sull'ambito, vedere about_Scopes. SCRIPT NEI MODULI Un modulo è un insieme di risorse di Windows PowerShell correlate che possono essere distribuite come un'unità. È possibile utilizzare i moduli per organizzare script, funzioni e altre risorse. È anche possibile utilizzare moduli per distribuire il codice ad altri e ottenere codice da fonti attendibili. È possibile includere script nei moduli o creare un modulo di script, ossia un modulo costituito completamente o principalmente da uno script e risorse di supporto. Un modulo di script è semplicemente uno script con estensione .psm1. Per ulteriori informazioni sui moduli, vedere about_Modules. ALTRE FUNZIONALITÀ DEGLI SCRIPT Windows PowerShell offre molte funzionalità utili che è possibile utilizzare negli script. #Requires È possibile utilizzare un'istruzione #Requires per impedire l'esecuzione di uno script senza i moduli o gli snap-in specificati e una versione specificata di Windows PowerShell. Per ulteriori informazioni, vedere about_Requires. $MyInvocation La variabile automatica $MyInvocation contiene informazioni sul comando corrente, incluso lo script corrente. È possibile utilizzare questa variabile e le proprietà relativa per ottenere informazioni sullo script mentre è in esecuzione. Ad esempio, la variabile $MyInvocation.MyCommand.Path contiene il percorso e il nome file dello script. Sezioni Data È possibile utilizzare la parola chiave Data per separare i dati dalla logica negli script. Le sezioni Data possono inoltre agevolare la localizzazione. Per ulteriori informazioni, vedere about_Data_Sections e about_Script_Localization. Firma degli script È possibile aggiungere una firma digitale a uno script. A seconda dei criteri di esecuzione, è possibile utilizzare firme digitali per limitare l'esecuzione di script che potrebbero includere comandi non sicuri. Per ulteriori informazioni, vedere about_Execution_Policies e about_Signing. VEDERE ANCHE about_Command_Precedence about_Comment_Based_Help about_Execution_Policies about_Functions about_Modules about_Profiles about_Requires about_Scopes about_Script_Blocks about_Signing Invoke-Command