從 Cmdlet 要求確認

當 Cmdlet 即將對 Windows PowerShell 環境以外的系統進行變更時,應要求確認。 例如,如果 Cmdlet 即將新增使用者帳戶或停止處理常式,則在繼續進行之前,該 Cmdlet 應要求使用者確認。 相反地,如果 Cmdlet 即將變更 Windows PowerShell 變數,則 Cmdlet 不需要確認。

為了發出確認要求,指令程式必須指出它支援確認要求,且必須呼叫 ShouldProcessShouldContinue (選擇性的) 方法,以顯示確認要求訊息的資訊,以顯示確認要求訊息。

支援確認要求

若要支援確認要求,Cmdlet 必須將 SupportsShouldProcess Cmdlet 屬性的參數設定為 true 。 這會啟用 Confirm Windows PowerShell 所提供的和 WhatIf Cmdlet 參數。 此 Confirm 參數可讓使用者控制是否要顯示確認要求。 此 WhatIf 參數可讓使用者判斷 Cmdlet 是否應顯示訊息或執行其動作。 請勿手動將 Confirm 和參數新增 WhatIf 至 Cmdlet。

下列範例顯示支援確認要求的 Cmdlet 屬性宣告。

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

呼叫確認要求方法

在 Cmdlet 程式碼中,在執行變更系統的作業之前,先呼叫 ShouldProcess 方法。 設計 Cmdlet,如此一來,如果呼叫傳回的值 false ,則不會執行作業,而且此 Cmdlet 會處理下一項作業。

呼叫 ShouldContinue 方法

大部分的 Cmdlet 會使用 ShouldProcess 方法來要求確認。 不過,某些情況下可能需要額外的確認。 在這些情況下,請使用ShouldContinue方法的呼叫來補充ShouldProcess呼叫的相關要求。」的方法如下。 這可讓 Cmdlet 或提供者更精確地控制對確認提示之所有回應的 [ 是] 範圍。

如果 Cmdlet 呼叫 ShouldContinue 方法,則此 Cmdlet 也必須提供 Force 切換參數參數。 如果使用者指定 Force 當使用者叫用此 Cmdlet 時,此 Cmdlet 仍應呼叫 ShouldProcess,但應略過對 ShouldContinue的呼叫,但應略過。

從非互動式環境呼叫ShouldContinue時,將會擲回例外狀況,而不會提示使用者。 加入 Force 參數可確保在非互動式環境中叫用命令時,仍然可以執行此命令。

下列範例會示範如何呼叫 ShouldProcessShouldContinue,來說明如何呼叫這個方法,。

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

ShouldProcess呼叫的行為可能會因叫用指令程式的環境而不同而有所差異。 使用先前的指導方針,可協助確保 Cmdlet 與其他 Cmdlet 一致地運作,而不論主機環境為何。

如需呼叫 ShouldProcess 方法的範例,請參閱 如何要求確認

指定影響等級

當您建立指令程式時,請指定影響等級 (變更的嚴重性) 。 若要這樣做,請將 ConfirmImpact Cmdlet 屬性的參數值設定為 [高]、[中] 或 [低]。 ConfirmImpact只有當您同時指定 Cmdlet 的參數時,才可以指定的值 SupportsShouldProcess

大部分的 Cmdlet 都不需要明確指定 ConfirmImpact 。 相反地,請使用參數的預設設定,也就是 [中]。 如果您設 ConfirmImpact 為 [高],預設將會確認此操作。 針對高度干擾性的動作(例如重新格式化硬碟磁片區)保留這種設定。

呼叫非確認方法

如果 Cmdlet 或提供者必須傳送訊息但不是要求確認,則可以呼叫下列三種方法。 請避免使用 WriteObject 方法來傳送這些類型的訊息,因為 WriteObject 輸出會與 Cmdlet 或提供者的一般輸出混合,而使得腳本撰寫起來很難進行。

  • 若要警告使用者並繼續作業,Cmdlet 或提供者可以呼叫 WriteWarning 方法來呼叫。

  • 若要提供使用者可使用參數抓取的其他資訊 Verbose ,Cmdlet 或提供者可以呼叫 WriteVerbose 方法。

  • 為了提供其他開發人員或產品支援的調試層級詳細資料,Cmdlet 或提供者可以呼叫 WriteDebug 方法。 使用者可以使用參數來取得此資訊 Debug

Cmdlet 和提供者會先呼叫下列方法來要求確認,然後再嘗試執行在 Windows PowerShell 之外變更系統的作業:

它們是藉由呼叫 Shouldprocess 方法來完成,這會提示使用者根據使用者叫用命令的方式來確認操作。

另請參閱

撰寫 Windows PowerShell Cmdlet