ARGOMENTO
    about_Functions_Advanced_Parameters

DESCRIZIONE BREVE
    Illustra come aggiungere parametri statici e dinamici alle funzioni
    che dichiarano l'attributo CmdletBinding.

DESCRIZIONE DETTAGLIATA
    È possibile dichiarare i propri parametri quando si scrivono 
    funzioni ed è possibili scrivere funzioni in modo che possano 
    accedere ai parametri comuni disponibili ai cmdlet compilati. Per 
    ulteriori informazioni sui parametri comuni di Windows 
    PowerShell, vedere about_CommonParameters.



Parametri statici

    Nell'esempio seguente viene mostrata una dichiarazione di 
    parametro che definisce un parametro ComputerName. Questo 
    parametro presenta le caratteristiche seguenti:

        - È obbligatorio.
        - Accetta l'input dalla pipeline.
        - Accetta una matrice di stringhe come input.

        Param
          (
            [parameter(Mandatory=$true,
            ValueFromPipeline=$true)]
            [String[]]
            $ComputerName
          ) 
  

    L'unico attributo obbligatorio che deve essere utilizzato quando 
    si dichiara un parametro è l'attributo Parameter. Tuttavia, è 
    possibile dichiarare anche l'attributo Alias e diversi argomenti di 
    convalida. Non ci sono limiti al numero di attributi che è possibile 
    aggiungere a una dichiarazione di parametro.


  Attributo Parameter

      L'attributo Parameter viene utilizzato per dichiarare un 
      parametro della funzione.
      Questo attributo presenta gli argomenti denominati seguenti 
      utilizzati per definire le caratteristiche del parametro, ad 
      esempio se il parametro è obbligatorio o facoltativo.


    Argomento denominato Mandatory

        L'argomento Mandatory indica che il parametro è obbligatorio 
        quando viene eseguita la funzione. Se non è specificato 
        questo argomento, il parametro è facoltativo. Nell'esempio 
        seguente viene mostrata la dichiarazione di un parametro richiesto 
        quando viene eseguita la funzione.

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            $ComputerName
          ) 


    Argomento denominato Position

        L'argomento Position specifica la posizione del parametro. Se 
        questo argomento non è specificato, è necessario specificare 
        il nome del parametro o l'alias in modo esplicito quando si 
        imposta il parametro. Inoltre, se nessuno dei parametri di 
        una funzione dispone di posizioni, in fase di esecuzione di 
        Windows PowerShell vengono assegnate posizioni a ogni 
        parametro in base all'ordine in cui i parametri vengono ricevuti. 

        Nell'esempio seguente viene mostrata la dichiarazione di un 
        parametro il cui valore deve essere specificato come primo 
        argomento quando viene eseguito il cmdlet. Si noti che questa 
        funzione può essere eseguita con o senza la specifica del nome del 
        parametro.

        Param
          (
            [parameter(Position=0)]
            [String[]]
            $ComputerName
          ) 


    Argomento denominato ParameterSetName

        L'argomento ParameterSetName specifica il set di parametri al 
        quale un parametro appartiene. Se non è specificato alcun set di 
        parametri, il parametro appartiene a tutti i set di parametri 
        definiti dalla funzione. Questo comportamento implica che ogni set di 
        parametri deve disporre di un parametro univoco che non sia un membro 
        di alcun altro set di parametri. Nell'esempio seguente viene mostrata la 
        dichiarazione di due parametri che appartengono a due set di 
        parametri diversi. 

        Param
          (
            [parameter(Mandatory=$true,
                      ParameterSetName="Computer")] 
            [String[]]
            $ComputerName
          ) 

        Param
          (
            [parameter(Mandatory=$true,
                      ParameterSetName="User")] 
            [String[]]
            $UserName
          ) 

        Per ulteriori informazioni sui set di parametri, vedere 
        l'argomento relativo ai set di parametri dei cmdlet in MSDN 
        Library all'indirizzo https://go.microsoft.com/fwlink/?LinkId=1
        42183 (le informazioni potrebbero essere in lingua inglese).


    Argomento denominato ValueFromPipeline

        L'argomento ValueFromPipeline specifica che il parametro 
        accetta input da un oggetto pipeline. Specificare questo 
        argomento se il cmdlet accede all'oggetto completo, non solo a una 
        proprietà dell'oggetto. Nell'esempio seguente viene mostrata la 
        dichiarazione di un parametro ComputerName obbligatorio che accetta 
        l'oggetto di input passato alla funzione dalla pipeline.

        Param
          (
            [parameter(Mandatory=$true,
                      ValueFromPipeline=$true)] 
            [String[]]
            $ComputerName
          ) 


    Argomento denominato ValueFromPipelineByPropertyName

        L'argomento valueFromPipelineByPropertyName specifica che il 
        parametro accetta input da una proprietà di un oggetto pipeline. 
        Specificare questo attributo se le condizioni seguenti sono vere:

            - Il parametro accede a una proprietà dell'oggetto 
              reindirizzato.

            - La proprietà ha lo stesso nome o lo stesso alias del 
              parametro.

        Ad esempio, se la funzione presenta un parametro ComputerName e 
        l'oggetto reindirizzato presenta una proprietà ComputerName, il 
        valore della proprietà ComputerName viene assegnato al parametro 
        ComputerName della funzione.

        Nell'esempio seguente viene mostrata la dichiarazione di un 
        parametro ComputerName che accetta input dalla proprietà 
        ComputerName dell'oggetto di input passato al cmdlet.

        Param
          (
            [parameter(Mandatory=$true,
                      ValueFromPipelineByPropertyName=$true)] 
            [String[]]
            $ComputerName
          ) 


    Argomento denominato ValueFromRemainingArguments

        L'argomento ValueFromRemainingArguments specifica che il parametro 
        accetta tutti gli argomenti restanti non associati ai parametri della 
        funzione. Nell'esempio seguente viene mostrata la dichiarazione di un 
        parametro ComputerName che accetta tutti gli argomenti restanti 
        dell'oggetto di input passato alla funzione.

        Param
          (
            [parameter(Mandatory=$true,
                      ValueFromRemainingArguments=$true)] 
            [String[]]
            $ComputerName
          ) 


    Argomento denominato HelpMessage

        L'argomento HelpMessage specifica un messaggio che contiene 
        una breve descrizione del parametro. Nell'esempio seguente viene 
        mostrata una dichiarazione di parametro che fornisce una descrizione del 
        parametro.

        Param
          (
            [parameter(Mandatory=$true,
                      HelpMessage="Una matrice di nomi di computer.")]                       
            [String[]]
            $ComputerName
          ) 


  Attributo Alias

      L'attributo Alias specifica un altro nome per il parametro. Non vi è 
      limite al numero di alias che possono essere assegnati a un parametro. 
      Nell'esempio seguente viene mostrata una dichiarazione di parametro 
      obbligatoria che aggiunge l'alias "CN" al parametro ComputerName.

        Param
          (
            [parameter(Mandatory=$true)]
            [alias("CN")]
            [String[]]
            $ComputerName
          ) 


  Attributi di convalida dei parametri

      Questi attributi definiscono come vengono convalidati gli 
      argomenti delle funzioni avanzate in fase di esecuzione di Windows 
      PowerShell.


    Attributo di convalida AllowNull

        L'attributo AllowNull consente di impostare su Null 
        l'argomento di un parametro obbligatorio del cmdlet. Nell'esempio 
        seguente, il parametro ComputerName può contenere un valore Null 
        anche se questo parametro è obbligatorio. 

        Param
          (
            [parameter(Mandatory=$true)]
            [String]
            [AllowNull()]
            $ComputerName
          ) 


    Attributo di convalida AllowEmptyString

        L'attributo AllowEmptyString consente una stringa vuota come 
        argomento di un parametro obbligatorio del cmdlet. 
        Nell'esempio seguente, il parametro ComputerName può 
        contenere un una stringa vuota ("") anche se questo parametro è 
        obbligatorio. 

        Param
          (
            [parameter(Mandatory=$true)]
            [String]
            [AllowEmptyString()]
            $ComputerName
          ) 


    Attributo di convalida AllowEmptyCollection

        L'attributo AllowEmptyCollection consente una raccolta vuota come 
        argomento di un parametro obbligatorio del cmdlet. 

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [AllowEmptyCollection()]
            $ComputerName
          ) 


    Attributo di convalida ValidateCount

        L'attributo ValidateCount specifica il numero minimo e massimo di 
        argomenti che il parametro può accettare. In fase di esecuzione di 
        Windows PowerShell viene generato un errore se il numero di argomenti 
        non è compreso in tale intervallo. Nell'esempio seguente, il parametro 
        ComputerName può presentare da uno a cinque argomenti. 

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidateCount(1,5)]
            $ComputerName
          ) 


    Attributo di convalida ValidateLength

        L'attributo ValidateLength specifica la lunghezza minima e massima 
        dell'argomento del parametro. In fase di esecuzione di Windows 
        PowerShell viene generato un errore se la lunghezza dell'argomento 
        del parametro non è compresa in tale intervallo.
        Nell'esempio seguente, i nomi dei computer specificati devono 
        contenere da uno a 10 caratteri. 

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidateLength(1,10)]
            $ComputerName
          ) 


    Attributo di convalida ValidatePattern

        L'attributo ValidatePattern specifica un'espressione regolare che 
        convalida il modello dell'argomento del parametro. In fase di 
        esecuzione di Windows PowerShell viene generato un errore se 
        l'argomento del parametro non corrisponde a questo modello. 
        Nell'esempio seguente, l'argomento del parametro deve essere 
        un numero di quattro cifre e ogni cifra deve essere un numero 
        da 0 a 9. 

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidatePattern("[0-9][0-9][0-9][0-9]")] 
            $ComputerName
          ) 


    Attributo di convalida ValidateRange

        L'attributo ValidateRange specifica i valori minimo e massimo 
        dell'argomento del parametro. In fase di esecuzione di Windows 
        PowerShell viene generato un errore se l'argomento del parametro non 
        è compreso in tale intervallo. Nell'esempio seguente, l'argomento del 
        parametro non può essere minore di 0 o maggiore di 10. 


        Param
          (
            [parameter(Mandatory=$true)]
            [Int[]]
            [ValidateRange(0,10)]
            $Count
          ) 


    Attributo di convalida ValidateScript

        L'attributo ValidateScript specifica uno script utilizzato per 
        convalidare l'argomento del parametro. In fase di esecuzione di Windows 
        PowerShell viene generato un errore se il risultato dello script è 
        false o se lo script genera un'eccezione. Nell'esempio seguente il 
        valore del parametro Count deve essere minore di 4.

        Param
          (
            [parameter()]
            [Int]
            [ValidateScript({$_ -lt 4})]
            $Count
          ) 


    Attributo ValidateSet

        L'attributo ValidateSet specifica un set di valori validi per 
        l'argomento del parametro. In fase di esecuzione di Windows 
        PowerShell viene generato un errore se l'argomento del parametro non 
        corrisponde a un valore nel set.
        Nell'esempio seguente, l'argomento del parametro può 
        contenere solo i nomi Steve, Mary e Carl. 

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidateRange("Steve", "Mary", "Carl")] 
            $UserName
          ) 


    Attributo di convalida ValidateNotNull


        L'attributo ValidateNotNull specifica che non è possibile 
        impostare l'argomento del parametro su Null. In fase di 
        esecuzione di Windows PowerShell viene generato un errore se 
        il valore del parametro è Null.  

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidateNotNull()]
            $UserName
          ) 


    Attributo di convalida ValidateNotNullOrEmpty

        L'attributo ValidateNotNullOrEmpty specifica che l'argomento del 
        parametro non può essere impostato su Null né essere vuoto. In fase di 
        esecuzione di Windows PowerShell viene generato un errore se il 
        parametro è specificato ma il relativo valore è Null, una stringa 
        vuota o una matrice vuota.  

        Param
          (
            [parameter(Mandatory=$true)]
            [String[]]
            [ValidateNotNullOrEmpty()]
            $UserName
          ) 



 Parametri dinamici
    
    I parametri dinamici sono parametri di un cmdlet, una funzione o uno script
    che sono disponibili solo in determinate condizioni.
    
    Ad esempio, diversi cmdlets del provider hanno parametri disponibili solo 
    quando si utilizza il cmdlet nel percorso del provider. Un parametro dinamico 
    familiare è il parametro Encoding di un cmdlet Set-Item, che è disponibile 
    solo quando il cmdlet Set-Item è utilizzato nel percorso del provider FileSystem. 
    
    Per creare un parametro dinamico per una funzione o uno script, utilizzare la
    parola chiave Dynamicparam. 
      
    La sintassi è la seguente. 
      
      DynamicParam {<elenco istruzioni>}  
      
    Nell'elenco istruzioni, utilizzare un'istruzione If per specificare le condizioni in     base alle quali il parametro è disponibile nella funzione. 
      
    Utilizzare il cmdlet New-Object per creare un oggetto     System.Management.Automation.RuntimeDefinedParameter per rappresentare il
    parametro e specificare il nome.
      
    È inoltre possibile utilizzare il comando New-Object per creare un oggetto     System.Management.Automation.ParameterAttribute per rappresentare attributi del     paramentro, ad esempio Mandatory, Position o ValueFromPipeline, o il relativo set di     parametri.
      
    Di seguito viene riportata una funzione di esempio con parametri standard chiamati 
    Name e Path, nonché un parametro dinamico opzionale denominato DP1. Il parametro DP1 è     nel set di parametri PSet1 e dispone di un tipo Int32. Il parametro DP1 è disponibile     nella funzione di esempio solo quando il valore del parametro Path contiene "HKLM:", il       quale indica che è in uso nell'unità del Registro HKEY_LOCAL_MACHINE.


    function Sample {
      Param ([String]$Name, [String]$Path) 

      DynamicParam
      {
        if ($path -match "*HKLM*:")
        {
          $dynParam1 = new-object 
            System.Management.Automation.RuntimeDefinedParameter("dp1",
            [Int32], $attributeCollection)

          $attributes = new-object System.Management.Automation.ParameterAttribute
          $attributes.ParameterSetName = 'pset1'
          $attributes.Mandatory = $false

          $attributeCollection = new-object 
            -Type System.Collections.ObjectModel.Collection``1[System.Attribute]
          $attributeCollection.Add($attributes)
 
          $paramDictionary = new-object 
            System.Management.Automation.RuntimeDefinedParameterDictionary
          $paramDictionary.Add("dp1", $dynParam1)
        
          return $paramDictionary
        } End if
      }
    }  

    Per ulteriori informazioni, vedere "RuntimeDefinedParameter Class" in MSDN Library
    all'indirizzo https://go.microsoft.com/fwlink/?LinkID=145130
    (le informazioni potrebbero essere in lingua inglese).



VEDERE ANCHE
    about_Advanced Functions
    about_Functions_Advanced_Methods  
    about_Functions_CmdletBindingAttribute




Argomenti della Guida