Żądanie potwierdzenia z poziomu poleceń cmdlet

Polecenia cmdlet powinny żądać potwierdzenia, gdy mają wprowadzić zmianę w systemie spoza Windows PowerShell operacyjnego. Jeśli na przykład polecenie cmdlet ma dodać konto użytkownika lub zatrzymać proces, przed kontynuowaniem polecenie cmdlet powinno wymagać potwierdzenia od użytkownika. Z kolei jeśli polecenie cmdlet ma zmienić zmienną Windows PowerShell, polecenie cmdlet nie musi wymagać potwierdzenia.

Aby można było wykonać żądanie potwierdzenia, polecenie cmdlet musi wskazać, że obsługuje żądania potwierdzenia, i musi wywołać metody System.Management.Automation.Cmdlet.ShouldProcess i System.Management.Automation.Cmdlet.ShouldContinue (opcjonalnie), aby wyświetlić komunikat żądania potwierdzenia.

Obsługa żądań potwierdzenia

Aby obsługiwać żądania potwierdzenia, polecenie cmdlet musi ustawić parametr SupportsShouldProcess atrybutu polecenia cmdlet na true . Umożliwia to parametry Confirm WhatIf polecenia cmdlet i , które są udostępniane przez Windows PowerShell. Parametr Confirm umożliwia użytkownikowi kontrolowanie, czy żądanie potwierdzenia jest wyświetlane. Parametr umożliwia użytkownikowi określenie, czy WhatIf polecenie cmdlet powinno wyświetlać komunikat, czy wykonywać jego akcję. Nie należy ręcznie dodawać parametrów Confirm i WhatIf do polecenia cmdlet.

W poniższym przykładzie pokazano deklarację atrybutu polecenia cmdlet, która obsługuje żądania potwierdzenia.

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

Wywoływanie metod żądania potwierdzenia

W kodzie polecenia cmdlet wywołaj metodę System.Management.Automation.Cmdlet.ShouldProcess przed operacją, która zmienia system. Zaprojektuj polecenie cmdlet tak, aby jeśli wywołanie zwraca wartość , operacja nie jest wykonywana, a false polecenie cmdlet przetwarza następną operację.

Wywoływanie metody ShouldContinue

Większość polecenia cmdlet żąda potwierdzenia tylko przy użyciu metody System.Management.Automation.Cmdlet.ShouldProcess. Jednak niektóre przypadki mogą wymagać dodatkowego potwierdzenia. W takich przypadkach należy uzupełnić wywołanie System.Management.Automation.Cmdlet.ShouldProcess wywołaniem metody System.Management.Automation.Cmdlet.ShouldContinue. Dzięki temu polecenie cmdlet lub dostawca może dokładniej kontrolować zakres tak do wszystkich odpowiedzi na monit o potwierdzenie.

Jeśli polecenie cmdlet wywołuje metodę System.Management.Automation.Cmdlet.ShouldContinue, to polecenie cmdlet musi również podać Force parametr przełącznika. Jeśli użytkownik określi, kiedy użytkownik wywołuje polecenie cmdlet, polecenie cmdlet powinno nadal wywoływać polecenie Force System.Management.Automation.Cmdlet.ShouldProcess,ale powinno pominąć wywołanie metody System.Management.Automation.Cmdlet.ShouldContinue.

System.Management.Automation.Cmdlet.ShouldContinue zgłasza wyjątek, gdy jest wywoływany ze środowiska nieinterakcyjnego, w którym nie można monitować użytkownika. Dodanie Force parametru gwarantuje, że polecenie może być nadal wykonywane, gdy jest wywoływane w środowisku nieinterakcyjnym.

W poniższym przykładzie pokazano, jak wywołać polecenia System.Management.Automation.Cmdlet.ShouldProcess i System.Management.Automation.Cmdlet.ShouldContinue.

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

Zachowanie wywołania System.Management.Automation.Cmdlet.ShouldProcess może się różnić w zależności od środowiska, w którym jest wywoływane polecenie cmdlet. Użycie poprzednich wytycznych pomoże zapewnić, że polecenie cmdlet będzie działać spójnie z innymi poleceniami cmdlet, niezależnie od środowiska hosta.

Aby uzyskać przykład wywołania metody System.Management.Automation.Cmdlet.ShouldProcess, zobacz How to Request Confirmations (Jak żądać potwierdzeń).

Określanie poziomu wpływu

Podczas tworzenia polecenia cmdlet określ poziom wpływu (ważność) zmiany. W tym celu ustaw wartość parametru atrybutu ConfirmImpact polecenia cmdlet na Wysoki, Średni lub Niski. Wartość można określić tylko ConfirmImpact wtedy, gdy określono SupportsShouldProcess również parametr polecenia cmdlet .

W przypadku większości cmdlet nie trzeba jawnie określać wartości ConfirmImpact . Zamiast tego użyj domyślnego ustawienia parametru, które ma wartość Średni. Jeśli ConfirmImpact ustawisz wartość Wysoki, operacja zostanie domyślnie potwierdzina. Zarezerwuj to ustawienie w przypadku akcji o wysokim stopniu zakłócenia, takich jak ponownie sformatowanie woluminu dysku twardego.

Wywoływanie metod niepotwierdzeń

Jeśli polecenie cmdlet lub dostawca musi wysłać komunikat, ale nie żąda potwierdzenia, może wywołać następujące trzy metody. Unikaj używania metody System.Management.Automation.Cmdlet.WriteObject do wysyłania komunikatów tego typu, ponieważ dane wyjściowe System.Management.Automation.Cmdlet.WriteObject są połączone z normalnymi danymi wyjściowymi polecenia cmdlet lub dostawcy, co utrudnia pisanie skryptów.

Polecenia cmdlet i dostawcy najpierw wywołują następujące metody, aby zażądać potwierdzenia przed podjęciem próby wykonania operacji, która zmienia system poza Windows PowerShell:

W tym celu wywołują metodę System.Management.Automation.Cmdlet.Shouldprocess, która monituje użytkownika o potwierdzenie operacji na podstawie sposobu wywołania polecenia przez użytkownika.

Zobacz też

Pisanie polecenia cmdlet programu Windows PowerShell