主題 about_Script_Blocks 簡短描述 定義何謂指令碼區塊並說明如何在 Windows PowerShell 程式語言中使用指令碼區塊。 完整描述 在 Windows PowerShell 程式語言中,指令碼區塊是一組陳述式或運算式集合,可以 視為一個單位來使用。指令碼區塊可以接受引數並傳回值。 在語法上,指令碼區塊是大括號中的陳述式清單,如下列語法所示: {<陳述式清單>} 一個指令碼區塊會傳回其中所有命令的輸出,此輸出可能是單一物件,也可能是陣列。 指令碼區塊和函數一樣可以包含參數。請使用 Param 關鍵字來指定具名參數,如下 列語法所示: { param ([type]$parameter1 [,[type]$parameter2]) <陳述式清單> } 在指令碼區塊中,您不能像函數一樣在大括號外指定參數。 指令碼區塊和函數一樣可以包含 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