主題
    about_Functions_Advanced_Methods

簡短描述
    描述指定 CmdletBinding 屬性 (Attribute) 的函數如何使用編譯的 Cmdlet 可用的
    方法及屬性 (Property)。

完整描述
    指定 CmdletBinding 屬性的函數可以透過 $pscmdlet 變數存取數種方法和屬性。這
    些方法包含下列方法:


        - 輸入處理方法,編譯的 Cmdlet 會用這些方法來執行作業。

        - ShouldProcess 和 ShouldContinue 方法,用來先取得使用者意見反應,然後
          再執行動作。

        - ThrowTerminatingError 方法,用來產生錯誤記錄。

        - 數個 Write 方法,用來傳回不同類型的輸出。

        - 數個 Write 方法,用來傳回不同類型的輸出。


    進階函數可以使用 PSCmdlet 類別的所有方法和屬性。如需這些方法和屬性的詳細資訊,
    請參閱 MSDN (Microsoft Developer Network) 文件庫中的<
    System.Management.Automation.PSCmdlet>: 
    https://go.microsoft.com/fwlink/?LinkId=142139 (英文)。


  輸入處理方法

      本章節中所描述的方法稱為輸入處理方法。對於函數而言,這三種方法是由函數的 
      Begin、Process 和 End 區塊所表示。每個函數都必須包含這其中一或多種區塊。
      Windows PowerShell 執行階段在執行函數時,會使用這些區塊內的程式碼  (這些區
      塊也可提供不使用 CmdletBinding 屬性的函數使用)。

      
    Begin
      這個區塊是用來為函數提供選擇性的一次性前置處理作業。Windows PowerShell 執
      行階段會針對管線中函數的每個執行個體,使用此區塊中的程式碼一次。


    Process
      這個區塊是用來為函數提供記錄的逐一處理作業。依函數的輸入而定,這個區塊可能會
      使用多次,或完全未使用。例如,如果函數是管線中的第一個命令,則 Process 區塊
      就會使用一次。如果函數不是管線中的第一個命令,則會針對函數從管線所接收的每項
      輸入使用 Process 區塊一次。如果沒有管線輸入,就不會使用 Process 區塊。

      如果函數參數設定為接受管線輸入,就必須定義這個區塊。如果未定義這個區塊,而且
      參數會從管線接受輸入,函數就會遺失透過管線傳送給函數的值。

      此外,當函數支援確認要求時 (當 Parameter 屬性的 SupportsShouldProcess 參
      數設為 $True),就必須從 Process 區塊內呼叫 ShouldProcess 方法。

    End
      這個區塊是用來為函數提供選擇性的一次性後續處理作業。

      下列範例示範函數的大綱,此函數包含一次性前置處理的 Begin 區塊、多重記錄處理的 
      Process 區塊,以及一次性後續處理的 End 區塊。

          Function Test-ScriptCmdlet
          {
            [CmdletBinding(SupportsShouldProcess=$True)] 
            Param ($Parameter1)
            Begin{}
            Process{}
            End{}
          }


  確認方法

    ShouldProcess
      在函數執行動作變更系統之前,會呼叫這個方法要求使用者確認。函數可以根據方法所
      傳回的布林值繼續作業。只能從函數的 Process{} 區塊內呼叫這個方法。此外,
      CmdletBinding 屬性必須宣告函數支援 ShouldProcess (如前述範例所示)。

      如需這個方法的詳細資訊,請參閱 MSDN 文件庫中的<
      System.Management.Automation.Cmdlet.ShouldProcess>
      (https://go.microsoft.com/fwlink/?LinkId=142142)(英文)。

      如需如何要求確認的詳細資訊,請參閱 MSDN 文件庫中的<要求確認>
      (https://go.microsoft.com/fwlink/?LinkID=136658)(英文)。


    ShouldContinue
      呼叫這個方法可要求第二個確認訊息。當 ShouldProcess 方法傳回 $true 時,應
      該呼叫這個方法。如需這個方法的詳細資訊,請參閱  
      MSDN 文件庫中的<
      System.Management.Automation.Cmdlet.ShouldContinue>
      (https://go.microsoft.com/fwlink/?LinkId=142143)(英文)。


  錯誤方法

    函數可以在發生錯誤時呼叫兩種不同的方法。函數在發生非終止錯誤時,應該呼叫 
    WriteError 方法,說明請見<寫入方法>一節。函數在發生終止錯誤且無法繼續時,應
    該呼叫 ThrowTerminatingError 方法。您也可以針對終止錯誤使用 Throw 陳述式,
    而針對非終止錯誤使用 Write-Error Cmdlet。

    如需詳細資訊,請參閱 MSDN 文件庫中的
    <System.Management.Automation.Cmdlet.ThrowTerminatingError>
    (https://go.microsoft.com/fwlink/?LinkId=142144)(英文)。


  寫入方法

      函數可以呼叫下列方法來傳回不同類型的輸出。請注意,並非所有的輸出都會傳送給管
      線中的下一個命令。您也可以使用各種的 Write Cmdlet,例如 Write-Error。


    WriteCommandDetail
      如需 WriteCommandDetails 方法的詳細資訊,請參閱 MSDN 文件庫中的<
      System.Management.Automation.Cmdlet.WriteCommandDetail>
      (https://go.microsoft.com/fwlink/?LinkId=142155)(英文)。


    WriteDebug
      若要提供可用來為函數疑難排解的資訊,請讓函數呼叫 WriteDebug 方法。這麼做會
      為使用者顯示偵錯訊息。如需詳細資訊,請參閱 MSDN 文件庫中的<
      System.Management.Automation.Cmdlet.WriteDebug>
      (https://go.microsoft.com/fwlink/?LinkId=142156)(英文)。


    WriteError
      函數在發生非終止錯誤而且是設計為繼續處理記錄時,應該呼叫這個方法。如需詳細資
      訊,請參閱 MSDN 文件庫中的
      <System.Management.Automation.Cmdlet.WriteError>(https://go.microsoft.com/
      fwlink/?LinkId=142157)(英文)。

      注意:函數在發生終止錯誤時,應該呼叫 ThrowTerminatingError 方法。


    WriteObject
      這個方法可以讓函數將物件傳送給管線中的下一個命令。在大多數的情況中,這就是函
      數在傳回資料時所使用的方法。如需詳細資訊,請參閱  
      MSDN 文件庫中的<System.Management.Automation.PSCmdlet.WriteObject>
      (https://go.microsoft.com/fwlink/?LinkId=142158)(英文)。


    WriteProgress
      對於需要花很長時間才能完成動作的函數,使用這個方法可以呼叫 WriteProgress 方
      法以顯示進度資訊。例如,您可以顯示完成的百分比。如需詳細資訊,請參閱  
      MSDN 文件庫中的
      <System.Management.Automation.PSCmdlet.WriteProgress>
      (https://go.microsoft.com/fwlink/?LinkId=142160)(英文)。


    WriteVerbose
      若要提供與函數所執行作業相關的詳細資訊,請讓函數呼叫 WriteVerbose 方法以對
      使用者顯示詳細訊息。預設不會顯示詳細訊息。如需詳細資訊,請參閱 MSDN 文件庫
      中的<System.Management.Automation.PSCmdlet.WriteVerbose>
      (https://go.microsoft.com/fwlink/?LinkId=142162) (英文)。

    WriteWarning
      若要提供可能導致未預期結果之條件的相關資訊,請讓函數呼叫 WriteWarning 方法
      以對使用者顯示警告訊息。預設不會顯示警告訊息。
      如需詳細資訊,請參閱 MSDN 文件庫中的
      <System.Management.Automation.PSCmdlet.WriteWarning>
      (https://go.microsoft.com/fwlink/?LinkId=142164) (英文)。

      注意:您也可以藉由設定 WarningPreference 變數或使用 Verbose 和 Debug 命
      令列選項,顯示警告訊息。


  其他的方法和屬性

      如需可透過 $PSCmdlet 變數所存取之其他方法和屬性的詳細資訊,請參閱 MSDN 文件
      庫中的<System.Management.Automation.PSCmdlet>
      (https://go.microsoft.com/fwlink/?LinkId=142139) (英文)。

      例如,ParameterSetName 屬性可用來查看使用中的參數集。參數集則可用來建立函
      數,以根據執行函數時所指定的參數執行不同的工作。


請參閱
    about_Functions_Advanced
    about_Functions_CmdletBindingAttributes
    about_Functions_Advanced_Parameters  




目錄