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




Argomenti della Guida