about_Parsing
应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0
主题
about_Parsing
简短说明
介绍 Windows PowerShell 如何分析命令。
详细说明
当在命令提示符下输入命令时,Windows PowerShell 会将该命令文本拆分为一系列称为“令牌”的段,然后确定如何解释每个“令牌”。
例如,如果键入:
Write-Host book
Windows PowerShell 会将以下命令拆分为两个令牌(“Write-Host”和“book”),然后分别解释每个令牌。
处理命令时,Windows PowerShell 分析器将在表达式模式下或在参数模式下运行:
- 在表达式模式下,字符串值必须括在引号内。未括在引号内的数字将视作数值(而不是一系列字符)。
- 在参数模式下,每个值将视为扩充的字符串,除非它以以下特殊字符之一开头:美元符号 ($)、at 符号 (@)、单引号 (')、双引号 (") 或左括号 (()。
如果以这些字符之一开头,则该值将视为值表达式。
下表提供了几个在表达式模式和参数模式下处理的命令以及这些命令所产生的结果的示例。
Example Mode Result
------------------ ---------- ----------------
2+2 Expression 4 (integer)
Write-Output 2+2 Argument "2+2" (string)
Write-Output (2+2) Expression 4 (integer)
$a = 2+2 Expression $a = 4 (integer)
Write-Output $a Expression 4 (integer)
Write-Output $a/H Argument "4/H" (string)
每个令牌可以解释为某种对象类型,例如布尔值或字符串。Windows PowerShell 会尝试确定来自表达式的对象类型。对象类型取决于命令预期的参数类型,以及 Windows PowerShell 是否知道如何将参数转换为正确的类型。下表显示几个分配给表达式所返回的值的类型示例。
Example Mode Result
------------------ ---------- ---------------
Write-Output !1 argument "!1" (string)
Write-Output (!1) expression False (Boolean)
Write-Output (2) expression 2 (integer)
停止分析:--%
Windows PowerShell 3.0 中引入的停止分析符号 (--%) 将指示 Windows PowerShell 避免将输入解释为 Windows PowerShell 命令或表达式。
在 Windows PowerShell 中调用可执行程序时,请将停止分析符号放置在程序参数之前。此技术比使用转义字符防止错误解释容易得多。
当它遇到停止分析符号时,Windows PowerShell 将行中的其余字符视为文本。它执行的唯一解释旨在替换使用标准 Windows 表示法(例如 %USERPROFILE%)的环境变量的值。
停止分析符号在显示下一个换行符或管道字符前一直有效。不能使用连续字符 (`) 扩展其效果,也不能使用命令分隔符 (;) 终止其效果。
例如,以下命令将调用 Icacls 程序。
icacls X:\VMS /grant Dom\HVAdmin:(CI)(OI)F
若要在 Windows PowerShell 2.0 中运行此命令,必须使用转义字符以防止 Windows PowerShell 错误解释括号。
icacls X:\VMS /grant Dom\HVAdmin:`(CI`)`(OI`)F
从 Windows PowerShell 3.0 开始,可以使用停止分析符号。
icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F
Windows PowerShell 将以下命令字符串发送到 Icacls 程序:
X:\VMS /grant Dom\HVAdmin:(CI)(OI)F
另请参阅
about_Command_Syntax