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