Anfordern der Bestätigung von Cmdlets

Cmdlets sollten eine Bestätigung anfordern, wenn sie eine Änderung am System vornehmen möchten, das sich außerhalb der Windows PowerShell Umgebung befindet. Wenn ein Cmdlet beispielsweise ein Benutzerkonto hinzufügen oder einen Prozess beenden möchte, sollte das Cmdlet eine Bestätigung des Benutzers erfordern, bevor es fortgesetzt wird. Im Gegensatz dazu muss das Cmdlet keine Bestätigung erfordern, wenn ein Cmdlet eine Windows PowerShell Variable ändern soll.

Um eine Bestätigungsanforderung zu erstellen, muss das Cmdlet angeben, dass es Bestätigungsanforderungen unterstützt, und die Methoden System.Management.Automation.Cmdlet.ShouldProcess und System.Management.Automation.Cmdlet.ShouldContinue (optional) aufrufen, um eine Bestätigungsanforderungsmeldung anzuzeigen.

Unterstützende Bestätigungsanforderungen

Um Bestätigungsanforderungen zu unterstützen, muss das Cmdlet den SupportsShouldProcess Parameter des Cmdlet-Attributs auf true festlegen. Dadurch werden die Confirm WhatIf Cmdlet-Parameter und aktiviert, die von Windows PowerShell bereitgestellt werden. Mit Confirm dem -Parameter kann der Benutzer steuern, ob die Bestätigungsanforderung angezeigt wird. Mit WhatIf dem Parameter kann der Benutzer bestimmen, ob das Cmdlet eine Meldung anzeigen oder seine Aktion ausführen soll. Fügen Sie die Parameter und nicht manuell Confirm WhatIf zu einem Cmdlet hinzu.

Das folgende Beispiel zeigt eine Cmdlet-Attributdeklaration, die Bestätigungsanforderungen unterstützt.

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

Aufrufen der Methoden der Bestätigungsanforderung

Rufen Sie im Cmdlet-Code die System.Management.Automation.Cmdlet.ShouldProcess-Methode auf, bevor der Vorgang ausgeführt wird, der das System ändert. Entwerfen Sie das Cmdlet so, dass der Vorgang nicht ausgeführt wird, wenn der Aufruf den Wert false zurückgibt, und das Cmdlet den nächsten Vorgang verarbeitet.

Aufrufen der ShouldContinue-Methode

Die meisten Cmdlets fordern eine Bestätigung nur mithilfe der System.Management.Automation.Cmdlet.ShouldProcess-Methode an. In einigen Fällen ist jedoch möglicherweise eine zusätzliche Bestätigung erforderlich. Ergänzen Sie in diesen Fällen den Aufruf System.Management.Automation.Cmdlet.ShouldProcess durch einen Aufruf der System.Management.Automation.Cmdlet.ShouldContinue-Methode. Dadurch kann das Cmdlet oder der Anbieter den Bereich von Ja auf alle Antworten auf die Bestätigungsaufforderung genauer steuern.

Wenn ein Cmdlet die System.Management.Automation.Cmdlet.ShouldContinue-Methode aufruft, muss das Cmdlet auch einen Force switch-Parameter bereitstellen. Wenn der Benutzer Force angibt, wann der Benutzer das Cmdlet aufruft, sollte das Cmdlet trotzdem System.Management.Automation.Cmdlet.ShouldProcessaufrufen, aber den Aufruf von System.Management.Automation.Cmdlet.ShouldContinueumgehen.

System.Management.Automation.Cmdlet.ShouldContinue löst eine Ausnahme aus, wenn sie aus einer nicht interaktiven Umgebung aufgerufen wird, in der der Benutzer nicht aufgefordert werden kann. Durch hinzufügen eines Force Parameters wird sichergestellt, dass der Befehl weiterhin ausgeführt werden kann, wenn er in einer nicht interaktiven Umgebung aufgerufen wird.

Das folgende Beispiel zeigt, wie System.Management.Automation.Cmdlet.ShouldProcess und System.Management.Automation.Cmdlet.ShouldContinueaufgerufen werden.

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

Das Verhalten eines System.Management.Automation.Cmdlet.ShouldProcess-Aufrufs kann je nach Umgebung variieren, in der das Cmdlet aufgerufen wird. Mithilfe der vorherigen Richtlinien können Sie sicherstellen, dass sich das Cmdlet unabhängig von der Hostumgebung konsistent mit anderen Cmdlets verhält.

Ein Beispiel für den Aufruf der System.Management.Automation.Cmdlet.ShouldProcess-Methode finden Sie unter Anfordern von Bestätigungen.

Angeben der Auswirkungsstufe

Geben Sie beim Erstellen des Cmdlets die Auswirkungsstufe (den Schweregrad) der Änderung an. Legen Sie hierzu den Wert des ConfirmImpact Parameters des Cmdlet-Attributs auf Hoch, Mittel oder Niedrig fest. Sie können nur dann einen Wert für ConfirmImpact angeben, wenn Sie auch den SupportsShouldProcess Parameter für das Cmdlet angeben.

Für die meisten Cmdlets müssen Sie nicht explizit ConfirmImpact angeben. Verwenden Sie stattdessen die Standardeinstellung des Parameters Medium. Wenn Sie ConfirmImpact auf Hoch festlegen, wird der Vorgang standardmäßig bestätigt. Reservieren Sie diese Einstellung für hochgradig störende Aktionen wie das Neuformatieren eines Festplattenvolumes.

Aufrufen von Nichtbestätigungsmethoden

Wenn das Cmdlet oder der Anbieter eine Nachricht senden muss, aber keine Bestätigung anfordert, kann es die folgenden drei Methoden aufrufen. Vermeiden Sie die Verwendung der System.Management.Automation.Cmdlet.WriteObject-Methode, um Nachrichten dieser Typen zu senden, da die Ausgabe von System.Management.Automation.Cmdlet.WriteObject nicht mit der normalen Ausgabe Ihres Cmdlets oder Anbieters zusammenfällt, was das Schreiben von Skripts erschwert.

Cmdlets und Anbieter rufen zunächst die folgenden Methoden auf, um eine Bestätigung anzufordern, bevor sie versuchen, einen Vorgang auszuführen, der ein System außerhalb von Windows PowerShell ändert:

Dazu wird die System.Management.Automation.Cmdlet.Shouldprocess-Methode aufgerufen, die den Benutzer dazu auffordert, den Vorgang basierend darauf zu bestätigen, wie der Benutzer den Befehl aufgerufen hat.

Weitere Informationen

Schreiben eines Windows PowerShell-Cmdlets