Set di parametri dei cmdlet

PowerShell usa set di parametri per consentire di scrivere un singolo cmdlet in grado di eseguire azioni diverse per scenari diversi. I set di parametri consentono di esporre parametri diversi all'utente. E, per restituire informazioni diverse in base ai parametri specificati dall'utente.

Esempi di set di parametri

Ad esempio, il cmdlet di PowerShell restituisce informazioni diverse a seconda che l'utente specifichi Get-EventLog il parametro List o LogName. Se si specifica il parametro List, il cmdlet restituisce informazioni sui file di log stessi, ma non sulle informazioni sugli eventi che contengono. Se si specifica il parametro LogName, il cmdlet restituisce informazioni sugli eventi in un registro eventi specifico. I parametri List e LogName identificano due set di parametri separati.

Parametro univoco

Ogni set di parametri deve avere un parametro univoco che il runtime di PowerShell usa per esporre il set di parametri appropriato. Se possibile, il parametro univoco deve essere un parametro obbligatorio. Quando un parametro è obbligatorio, l'utente deve specificare il parametro e il runtime di PowerShell usa tale parametro per identificare il set di parametri. Il parametro univoco non può essere obbligatorio se il cmdlet è progettato per l'esecuzione senza specificare alcun parametro.

Più set di parametri

Nella figura seguente la colonna sinistra mostra tre set di parametri validi. Il parametro A è univoco per il primo set di parametri, il parametro B è univoco per il secondo set di parametri e il parametro C è univoco per il terzo set di parametri. Nella colonna di destra i set di parametri non hanno un parametro univoco.

Illustrazione dei set di parametri

Requisiti del set di parametri

I requisiti seguenti si applicano a tutti i set di parametri.

  • Ogni set di parametri deve avere almeno un parametro univoco. Se possibile, impostare questo parametro come parametro obbligatorio.

  • Un set di parametri che contiene più parametri posizionali deve definire posizioni univoche per ogni parametro. Due parametri posizionali non possono specificare la stessa posizione.

  • Solo un parametro in un set può dichiarare la ValueFromPipeline parola chiave con un valore true . Più parametri possono definire la ValueFromPipelineByPropertyName parola chiave con un valore true .

  • Se non viene specificato alcun set di parametri per un parametro, il parametro appartiene a tutti i set di parametri.

Nota

Per un cmdlet o una funzione, è previsto un limite di 32 set di parametri.

Set di parametri predefiniti

Quando vengono definiti più set di parametri, è possibile usare la parola DefaultParameterSetName chiave dell'attributo Cmdlet per specificare il set di parametri predefinito. PowerShell usa il set di parametri predefinito se non è in grado di determinare il set di parametri da usare in base alle informazioni fornite dal comando. Per altre informazioni sull'attributo Cmdlet, vedere Dichiarazione dell'attributo cmdlet.

Dichiarazione di set di parametri

Per creare un set di parametri, è necessario specificare la parola chiave quando ParameterSetName si dichiara l'attributo Parameter per ogni parametro nel set di parametri. Per i parametri che appartengono a più set di parametri, aggiungere un attributo Parameter per ogni set di parametri. Questo attributo consente di definire il parametro in modo diverso per ogni set di parametri. Ad esempio, è possibile definire un parametro come obbligatorio in un set e facoltativo in un altro. Tuttavia, ogni set di parametri deve contenere un parametro univoco. Per altre informazioni, vedere Dichiarazione di attributi di parametro.

Nell'esempio seguente il parametro UserName è il parametro univoco del set di parametri e il parametro Test01 ComputerName è il parametro univoco del Test02 set di parametri. Il parametro SharedParam appartiene a entrambi i set ed è obbligatorio per il Test01 set di parametri, ma facoltativo per il Test02 set di parametri.

[Parameter(Position = 0, Mandatory = true, ParameterSetName = "Test01")]
public string UserName
{
  get { return userName; }
  set { userName = value; }
}
private string userName;

[Parameter(Position = 0, Mandatory = true, ParameterSetName = "Test02")]
public string ComputerName
{
  get { return computerName; }
  set { computerName = value; }
}
private string computerName;

[Parameter(Mandatory= true, ParameterSetName = "Test01")]
[Parameter(ParameterSetName = "Test02")]
public string SharedParam
{
    get { return sharedParam; }
    set { sharedParam = value; }
}
private string sharedParam;