簡短描述
說明 PowerShell 如何剖析命令。
詳細描述
當您在命令提示字元中輸入命令時,PowerShell 會將命令文字分成一系列稱為「權杖」的區段,然後決定如何解讀每個「權杖」。
例如,如果您輸入:
撰寫主機書籍
PowerShell 會將下列命令分成兩個權杖:「寫入主機」和「書籍」,並獨立解釋每個權杖。
在處理命令時,PowerShell 剖析器會以運算式模式或引數模式運作:
在運算式模式中,字元字串值必須包含在引號中。 不是以引號括住的數位會視為數值(而不是一系列的字元)。
在引數模式中,系統會將每個值視為可擴充的字串,除非它是以下列其中一個特殊字元開頭:貨幣符號( $ )、@ 符號、單引號( ' )、雙引號( " )或左括弧( ( )。
如果前面加上其中一個字元,則會將值視為值運算式。
下表提供數個以運算式模式和引數模式處理的命令範例,以及這些命令所產生的結果。
| 範例 | [模式] | 結果 |
|---|---|---|
| 2 + 2 | 運算是 | 4(整數) |
| 寫入-輸出 2 + 2 | 引數 | "2 + 2" (字串) |
| 寫入-輸出(2 + 2) | 運算是 | 4(整數) |
| $a = 2 + 2 | 運算是 | $a = 4 (整數) |
| $a 的寫入輸出 | 運算是 | 4(整數) |
| 寫入-輸出 $a/H | 引數 | "4/H" (字串) |
每個標記都可以解讀為某種類型的物件類型,例如布林值或字串。 PowerShell 會嘗試從運算式判斷物件類型。 物件類型取決於命令所預期的參數類型,以及 PowerShell 是否知道如何將引數轉換成正確的類型。 下表顯示指派給運算式所傳回之值的幾個類型範例。
| 範例 | [模式] | 結果 |
|---|---|---|
| 寫入-輸出!1 | 引數 | "! 1" (字串) |
| 寫入-輸出(!1) | expression | False (布林值) |
| 寫入-輸出(2) | expression | 2(整數) |
PowerShell 3.0 中引進的停止剖析符號(--%)會指示 PowerShell 避免將輸入解讀為 PowerShell 命令或運算式。
在 PowerShell 中呼叫可執行程式時,請將停止剖析符號放在程式引數之前。 這項技術比使用 escape 字元來避免被解釋更容易。
當它遇到停止剖析符號時,PowerShell 會將該行中的其餘字元視為常值。 它所執行的唯一轉譯是取代使用標準 Windows 標記法(例如% USERPROFILE%)之環境變數的值。
停止剖析符號只有在下一個分行符號或管線字元之後才有效。 您不能使用接續字元(')來擴充其效果,或使用命令分隔符號(;)以終止其效果。
例如,下列命令會呼叫 Icacls 程式。
icacls X:\VMS /grant Dom\HVAdmin:(CI)(OI)F
若要在 PowerShell 2.0 中執行此命令,您必須使用 escape 字元來防止 PowerShell 錯誤解譯括弧。
icacls X:\VMS /grant Dom\HVAdmin:`(CI`)`(OI`)F
從 PowerShell 3.0 開始,您可以使用停止剖析符號。
icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F
PowerShell 會將下列命令字串傳送至 Icacls 程式:
X:\VMS/grant Dom\HVAdmin:(CI)(OI) F