about_Script_Blocks

適用於: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

主題

about_Script_Blocks

簡短描述

定義何謂指令碼區塊,並說明如何在 Windows PowerShell® 程式設計語言中使用指令碼區塊。

詳細描述

在 Windows PowerShell 程式設計語言中,指令碼區塊是可當做單一單位使用之陳述式或運算式的集合。指令碼區塊可以接受引數和傳回值。

語法上,指令碼區塊是以大括弧括住的陳述式清單,如下列語法所示:

        {<statement list>}

指令碼區塊會以單一物件或陣列形式,傳回指令碼區塊中所有命令的輸出。

如同函式,指令碼區塊可以包含參數。使用 Param 關鍵字可指派具名參數,如下列語法所示:

        {
            param ([type]$parameter1 [,[type]$parameter2])
            <statement list>
        }

但不同於函式,您無法在指令碼區塊中指定未以大括弧括住的參數。

如同函式,指令碼區塊可以包含 DynamicParam、Begin、Process 和 End 關鍵字。如需詳細資訊,請參閱 about_Functions 和 about_Functions_Advanced。

使用指令碼區塊

指令碼區塊是 Microsoft .NET Framework 類型的執行個體 (System.Management.Automation.ScriptBlock)。命令可以包含指令碼區塊的參數值。例如,Invoke-Command Cmdlet 包含接受一個指令碼區塊值的 ScriptBlock 參數,如下列範例所示:

          C:\PS> invoke-command -scriptblock  { get-process }
          Handles  NPM(K)    PM(K)     WS(K) VM(M)   CPU(s)     Id ProcessName
          -------  ------    -----     ----- -----   ------     -- -----------            
              999      28    39100     45020   262    15.88   1844 communicator
              721      28    32696     36536   222    20.84   4028 explorer   
          . . .           

當做值來使用的指令碼區塊可能比較複雜,如下列範例所示:

          C:\PS> invoke-command -scriptblock { param ($uu = "Parameter"); 
              "$uu assigned." }  
          Parameter assigned.

上述範例中的指令碼區塊使用 Param 關鍵字來建立具有預設值的參數。下列範例使用 Invoke-Command Cmdlet 的 Args 參數,將不同的值指派給參數:

          C:\PS> invoke-command -scriptblock {param ($uu = "Parameter"); 
              "$uu assigned."} -args "Other value"
          Other value assigned.

您可以將指令碼區塊指派給變數,如下列範例所示:

          C:\PS> $a = {param ($uu = "Parameter"); "$uu assigned."}

您可以搭配使用變數與 Cmdlet (例如 Invoke-Command),如下列範例所示:

          C:\PS> invoke-command -scriptblock $a -args "Other value"
          Other value assigned.

您可以使用呼叫運算子 (&),來執行指派給變數的指令碼區塊,如下列範例所示:

          C:\PS> &$a 
          Parameter assigned.

您也可以提供參數給指令碼區塊,如下列範例所示:

          C:\PS> &$a "Other value"
          Other value assigned.

如果您想要將指令碼區塊所建立的值指派給變數,請使用呼叫運算子直接執行指令碼區塊,如下列範例所示:

          C:\PS> $a = &{param ($uu = "Parameter"); "$uu assigned."}
          C:\PS> $a
          Parameter assigned.

如需呼叫運算子的詳細資訊,請參閱 about_Operators。

另請參閱

about_Functions

about_Functions_Advanced

about_Operators