Richiesta di conferma dai cmdlet
I cmdlet devono richiedere conferma quando stanno per apportare una modifica al sistema esterno all'ambiente Windows PowerShell. 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 di Windows PowerShell, il cmdlet non deve richiedere 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 parametro SupportsShouldProcess
dell'attributo Cmdlet su true
. In questo modo vengono abilitati i parametri del cmdlet Confirm
e WhatIf
forniti da Windows PowerShell. Il parametro Confirm
consente all'utente di controllare se viene visualizzata la richiesta di conferma. Il parametro WhatIf
consente all'utente di determinare se il cmdlet deve visualizzare un messaggio o eseguirne l'azione. Non aggiungere manualmente i parametri Confirm
e WhatIf
a un 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 dell'operazione che modifica il sistema. Progettare il cmdlet in modo che se la chiamata restituisce un valore di false
, l'operazione non viene eseguita e il cmdlet elabora l'operazione successiva.
Chiamata al metodo ShouldContinue
La maggior parte dei cmdlet richiede la conferma usando solo il metodo System.Management.Automation.Cmdlet.ShouldProcess. Tuttavia, alcuni casi potrebbero richiedere una conferma aggiuntiva. Per questi casi, integrare la chiamata System.Management.Automation.Cmdlet.ShouldProcess con una chiamata al metodo System.Management.Automation.Cmdlet.ShouldContinue. In questo modo il cmdlet o il provider possono controllare in modo più corretto l'ambito del Sì a tutte le risposta alla richiesta di conferma.
Se un cmdlet chiama il metodo System.Management.Automation.Cmdlet.ShouldContinue, il cmdlet deve fornire anche un parametro switch Force
. Se l'utente specifica Force
quando l'utente richiama il cmdlet, il cmdlet deve comunque chiamare 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 chiamata da un ambiente non interattivo in cui l'utente non può essere richiesto. L'aggiunta di un parametro Force
garantisce che il comando possa comunque essere eseguito quando 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 al metodo System.Management.Automation.Cmdlet.ShouldProcess, vedere How to Request Confirmations.
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 parametro ConfirmImpact
dell'attributo Cmdlet su High, Medium o Low. È possibile specificare un valore per ConfirmImpact
solo quando si specifica anche il parametro SupportsShouldProcess
per il cmdlet.
Per la maggior parte dei cmdlet, non è necessario specificare in modo esplicito ConfirmImpact
. Usare invece l'impostazione predefinita del parametro , ovvero Medium. Se si imposta ConfirmImpact
su Alto, 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 di non conferma
Se il cmdlet o il provider deve inviare un messaggio ma non richiedere la conferma, può chiamare i tre metodi seguenti. Evitare di usare il metodo System.Management.Automation.Cmdlet.WriteObject per inviare messaggi di questi tipi perché System.Management.Automation.Cmdlet.WriteObject output è indeterminato con l'output normale del cmdlet o del provider, che rende difficile la scrittura di script.
Per prestare attenzione all'utente e continuare con l'operazione, il cmdlet o il provider può chiamare il metodo System.Management.Automation.Cmdlet.WriteWarning.
Per fornire informazioni aggiuntive che l'utente può recuperare usando il parametro
Verbose
, il cmdlet o il provider può chiamare il metodo System.Management.Automation.Cmdlet.WriteVerbose.Per fornire dettagli a livello di debug per altri sviluppatori o per il supporto tecnico del prodotto, il cmdlet o il provider può chiamare il metodo System.Management.Automation.Cmdlet.WriteDebug. L'utente può recuperare queste informazioni usando il parametro
Debug
.
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:
A tale scopo, chiama 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.