Delen via


Bevestiging vragen vanuit cmdlets

Cmdlets moeten een bevestiging aanvragen wanneer ze op het punt staan een wijziging aan te brengen in het systeem dat zich buiten de Windows PowerShell-omgeving bevindt. Als een cmdlet bijvoorbeeld op het punt staat om een gebruikersaccount toe te voegen of een proces te stoppen, moet de cmdlet een bevestiging van de gebruiker vereisen voordat deze wordt voortgezet. Als een cmdlet daarentegen een Windows PowerShell-variabele gaat wijzigen, hoeft de cmdlet geen bevestiging te vereisen.

Als u een bevestigingsaanvraag wilt indienen, moet de cmdlet aangeven dat deze bevestigingsaanvragen ondersteunt en moet de System.Management.Automation.Cmdlet.ShouldProcess en System.Management.Automation.Cmdlet.ShouldContinue (optioneel) aanroepen om een bevestigingsaanvraagbericht weer te geven.

Ondersteunende bevestigingsaanvragen

Ter ondersteuning van bevestigingsaanvragen moet de cmdlet de SupportsShouldProcess parameter van het cmdlet-kenmerk instellen op true. Hiermee worden de parameters Confirm en WhatIf cmdlets ingeschakeld die worden geleverd door Windows PowerShell. Met de parameter Confirm kan de gebruiker bepalen of de bevestigingsaanvraag wordt weergegeven. Met de parameter WhatIf kan de gebruiker bepalen of de cmdlet een bericht moet weergeven of de actie moet uitvoeren. Voeg de parameters Confirm en WhatIf niet handmatig toe aan een cmdlet.

In het volgende voorbeeld ziet u een declaratie van cmdlet-kenmerken die bevestigingsaanvragen ondersteunt.

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

De bevestigingsaanvraagmethoden aanroepen

Roep in de cmdlet-code de methode System.Management.Automation.Cmdlet.ShouldProcess aan voordat de bewerking waarmee het systeem wordt gewijzigd, wordt uitgevoerd. Ontwerp de cmdlet zodat als de aanroep een waarde van falseretourneert, de bewerking niet wordt uitgevoerd en de cmdlet de volgende bewerking verwerkt.

De methode ShouldContinue aanroepen

De meeste cmdlets vragen bevestiging met behulp van alleen de System.Management.Automation.Cmdlet.ShouldProcess methode. Voor sommige gevallen is echter mogelijk extra bevestiging vereist. Voor deze gevallen vult u de aanroep System.Management.Automation.Cmdlet.ShouldProcess aan met een aanroep naar de methode System.Management.Automation.Cmdlet.ShouldContinue. Hierdoor kan de cmdlet of provider het bereik van de Ja nauwkeuriger beheren voor alle antwoord op de bevestigingsprompt.

Als een cmdlet de methode System.Management.Automation.Cmdlet.ShouldContinue aanroept, moet de cmdlet ook een Force switchparameter opgeven. Als de gebruiker Force opgeeft wanneer de gebruiker de cmdlet aanroept, moet de cmdlet nog steeds System.Management.Automation.Cmdlet.ShouldProcessaanroepen, maar moet de aanroep naar System.Management.Automation.Cmdlet.ShouldContinueworden overgeslagen.

System.Management.Automation.Cmdlet.ShouldContinue genereert een uitzondering wanneer deze wordt aangeroepen vanuit een niet-interactieve omgeving waarin de gebruiker niet kan worden gevraagd. Als u een Force parameter toevoegt, zorgt u ervoor dat de opdracht nog steeds kan worden uitgevoerd wanneer deze wordt aangeroepen in een niet-interactieve omgeving.

In het volgende voorbeeld ziet u hoe u System.Management.Automation.Cmdlet.ShouldProcess en System.Management.Automation.Cmdlet.ShouldContinueaanroept.

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

Het gedrag van een System.Management.Automation.Cmdlet.ShouldProcess aanroep kan variƫren, afhankelijk van de omgeving waarin de cmdlet wordt aangeroepen. Door de vorige richtlijnen te gebruiken, zorgt u ervoor dat de cmdlet consistent werkt met andere cmdlets, ongeacht de hostomgeving.

Zie Bevestigingen aanvragenvoor een voorbeeld van het aanroepen van de methode System.Management.Automation.Cmdlet.ShouldProcess.

Het impactniveau opgeven

Wanneer u de cmdlet maakt, geeft u het impactniveau (de ernst) van de wijziging op. Hiervoor stelt u de waarde van de parameter ConfirmImpact van het cmdlet-kenmerk in op Hoog, Gemiddeld of Laag. U kunt alleen een waarde voor ConfirmImpact opgeven wanneer u ook de parameter SupportsShouldProcess voor de cmdlet opgeeft.

Voor de meeste cmdlets hoeft u niet expliciet ConfirmImpactop te geven. Gebruik in plaats daarvan de standaardinstelling van de parameter, namelijk Normaal. Als u ConfirmImpact instelt op Hoog, wordt de bewerking standaard bevestigd. Reserveer deze instelling voor zeer verstorende acties, zoals het opnieuw formatteren van een hardeschijfvolume.

Niet-bevestigingsmethoden aanroepen

Als de cmdlet of provider een bericht moet verzenden maar geen bevestiging aanvraagt, kan deze de volgende drie methoden aanroepen. Vermijd het gebruik van de methode System.Management.Automation.Cmdlet.WriteObject om berichten van deze typen te verzenden, omdat System.Management.Automation.Cmdlet.WriteObject uitvoer wordt vermengd met de normale uitvoer van uw cmdlet of provider, waardoor het schrijven van scripts moeilijk wordt.

Cmdlets en providers roepen eerst de volgende methoden aan om bevestiging aan te vragen voordat ze proberen een bewerking uit te voeren waarmee een systeem buiten Windows PowerShell wordt gewijzigd:

Ze doen dit door de methode System.Management.Automation.Cmdlet.ShouldProcess aan te roepen, waarmee de gebruiker wordt gevraagd om de bewerking te bevestigen op basis van de manier waarop de gebruiker de opdracht heeft aangeroepen.

Zie ook

Een Windows PowerShell-cmdlet schrijven