從 Cmdlet 要求確認
當 Cmdlet 即將對 Windows PowerShell 環境以外的系統進行變更時,應要求確認。 例如,如果 Cmdlet 即將新增使用者帳戶或停止處理常式,則在繼續進行之前,該 Cmdlet 應要求使用者確認。 相反地,如果 Cmdlet 即將變更 Windows PowerShell 變數,則 Cmdlet 不需要確認。
為了發出確認要求,指令程式必須指出它支援確認要求,且必須呼叫 ShouldProcess 和 ShouldContinue (選擇性的) 方法,以顯示確認要求訊息的資訊,以顯示確認要求訊息。
支援確認要求
若要支援確認要求,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
參數可確保在非互動式環境中叫用命令時,仍然可以執行此命令。
下列範例會示範如何呼叫 ShouldProcess 和 ShouldContinue,來說明如何呼叫這個方法,。
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 方法來完成,這會提示使用者根據使用者叫用命令的方式來確認操作。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應