Richiesta di conferma dai cmdlet

I cmdlet devono richiedere conferma quando stanno per apportare una modifica al sistema esterno all'Windows PowerShell locale. Ad esempio, se un cmdlet sta per aggiungere un account utente o arrestare un processo, il cmdlet deve richiedere conferma all'utente prima di procedere. Al contrario, se un cmdlet sta per modificare una variabile Windows PowerShell, non è necessario che il cmdlet richieda la conferma.

Per effettuare una richiesta di conferma, il cmdlet deve indicare che supporta le richieste di conferma e deve chiamare i metodi System.Management.Automation.Cmdlet.ShouldProcess e System.Management.Automation.Cmdlet.ShouldContinue (facoltativo) per visualizzare un messaggio di richiesta di conferma.

Supporto delle richieste di conferma

Per supportare le richieste di conferma, il cmdlet deve impostare il SupportsShouldProcess parametro dell'attributo Cmdlet su true . In questo modo Confirm vengono WhatIf abilitati i parametri del cmdlet e forniti da Windows PowerShell. Il Confirm parametro consente all'utente di controllare se viene visualizzata la richiesta di conferma. Il WhatIf parametro consente all'utente di determinare se il cmdlet deve visualizzare un messaggio o eseguire la relativa azione. Non aggiungere manualmente i Confirm parametri e a un WhatIf cmdlet.

Nell'esempio seguente viene illustrata una dichiarazione di attributo Cmdlet che supporta le richieste di conferma.

[Cmdlet(VerbsDiagnostic.Test, "RequestConfirmationTemplate1",
        SupportsShouldProcess = true)]

Chiamata dei metodi di richiesta di conferma

Nel codice del cmdlet chiamare il metodo System.Management.Automation.Cmdlet.ShouldProcess prima che venga eseguita l'operazione che modifica il sistema. Progettare il cmdlet in modo che se la chiamata restituisce il valore , l'operazione non viene eseguita e il cmdlet elabora false l'operazione successiva.

Chiamata del metodo ShouldContinue

La maggior parte dei cmdlet richiede la conferma usando solo il metodo System.Management.Automation.Cmdlet.ShouldProcess. Tuttavia, in alcuni casi potrebbe essere necessaria una conferma aggiuntiva. In questi casi, integrare la chiamata System.Management.Automation.Cmdlet.ShouldProcess con una chiamata al metodo System.Management.Automation.Cmdlet.ShouldContinue. Ciò consente al cmdlet o al provider di controllare in modo più fine l'ambito di Sì a tutte le risposte alla richiesta di conferma.

Se un cmdlet chiama il metodo System.Management.Automation.Cmdlet.ShouldContinue, anche il cmdlet deve fornire un Force parametro switch. Se l'utente specifica quando l'utente richiama il cmdlet, il cmdlet deve comunque chiamare Force System.Management.Automation.Cmdlet.ShouldProcess, ma deve ignorare la chiamata a System.Management.Automation.Cmdlet.ShouldContinue.

System.Management.Automation.Cmdlet.ShouldContinue genererà un'eccezione quando viene chiamato da un ambiente non interattivo in cui l'utente non può essere richiesto. L'aggiunta di un parametro garantisce che il comando possa comunque essere eseguito quando Force viene richiamato in un ambiente non interattivo.

Nell'esempio seguente viene illustrato come chiamare System.Management.Automation.Cmdlet.ShouldProcess e System.Management.Automation.Cmdlet.ShouldContinue.

if (ShouldProcess (...) )
{
  if (Force || ShouldContinue(...))
  {
     // Add code that performs the operation.
  }
}

Il comportamento di una chiamata System.Management.Automation.Cmdlet.ShouldProcess può variare a seconda dell'ambiente in cui viene richiamato il cmdlet. L'uso delle linee guida precedenti consente di garantire che il cmdlet si comporti in modo coerente con altri cmdlet, indipendentemente dall'ambiente host.

Per un esempio di chiamata del metodo System.Management.Automation.Cmdlet.ShouldProcess, vedere Come richiedere conferme.

Specificare il livello di impatto

Quando si crea il cmdlet, specificare il livello di impatto (la gravità) della modifica. A tale scopo, impostare il valore del ConfirmImpact parametro dell'attributo Cmdlet su High, Medium o Low. È possibile specificare un valore solo ConfirmImpact per quando si specifica anche il parametro per il cmdlet SupportsShouldProcess .

Per la maggior parte dei cmdlet non è necessario specificare in modo esplicito ConfirmImpact . Usare invece l'impostazione predefinita del parametro , che è Medium. Se si imposta ConfirmImpact su Alta, l'operazione verrà confermata per impostazione predefinita. Riservare questa impostazione per azioni altamente dannose, ad esempio la riformattazione di un volume del disco rigido.

Chiamata di metodi non di conferma

Se il cmdlet o il provider deve inviare un messaggio ma non richiedere conferma, può chiamare i tre metodi seguenti. Evitare di usare il metodo System.Management.Automation.Cmdlet.WriteObject per inviare messaggi di questi tipi perché l'output di System.Management.Automation.Cmdlet.WriteObject è associato al normale output del cmdlet o del provider, il che rende difficile la scrittura di script.

I cmdlet e i provider chiamano prima i metodi seguenti per richiedere la conferma prima di tentare di eseguire un'operazione che modifica un sistema all'esterno di Windows PowerShell:

Questa operazione viene eseguita chiamando il metodo System.Management.Automation.Cmdlet.Shouldprocess, che richiede all'utente di confermare l'operazione in base al modo in cui l'utente ha richiamato il comando.

Vedere anche

Scrittura di un cmdlet di Windows PowerShell