关于解析

简短说明

介绍 PowerShell 如何分析命令。

详细说明

在命令提示符处输入命令时,PowerShell 会将命令文本分解为一系列称为“令牌”的段,然后确定如何解释每个“令牌”。

例如,如果键入:

Write-Host

PowerShell 将以下命令分解为两个令牌,即“Write-Host”和“book”,并独立解释每个令牌。

处理命令时,PowerShell 分析程序在表达式模式或参数模式下运行:

  • 在表达式模式下,字符串值必须包含在引号中。 未用引号括起来的数字将被视为数值(而不是一系列字符)。

  • 在参数模式下,每个值都被视为可扩展字符串,除非它以下列特殊字符之一开头:美元符号 ($)、at 符号 (@)、单引号 (')、双引号 (“) 或左括号 (()。

如果前面有这些字符之一,则该值将被视为值表达式。

下表提供了在表达式模式和参数模式下处理的命令的几个示例,以及这些命令生成的结果。

示例: 模式 结果
2+2 表达式 4 (整数)
Write-Output 2+2 论点 “2+2”(字符串)
Write-Output (2+2) 表达式 4 (整数)
$a = 2+2 表达式 $a = 4(整数)
Write-Output $a 表达式 4 (整数)
Write-Output $a/小时 论点 “4/H” (字符串)

每个标记都可以解释为某种类型的对象类型,例如 Boolean 或 string。 PowerShell 尝试从表达式中确定对象类型。 对象类型取决于命令所需的参数类型,以及 PowerShell 是否知道如何将参数转换为正确的类型。 下表显示了分配给表达式返回的值的类型的几个示例。

示例: 模式 结果
Write-Output !1 参数 "!1"(字符串)
Write-Output (!1) 表达式 False(布尔值)
Write-Output (2) 表达式 2 (整数)

PowerShell 3.0 中引入的停止解析符号 (--%) 指示 PowerShell 避免将输入解释为 PowerShell 命令或表达式。

在 PowerShell 中调用可执行程序时,请将停止解析符号放在程序参数之前。 此方法比使用转义字符来防止误解要容易得多。

遇到停止分析符号时,PowerShell 会将行中的剩余字符视为文本。 它执行的唯一解释是将值替换为使用标准 Windows 表示法的环境变量,例如 %USERPROFILE%。

停止解析符号仅在下一个换行符或管道字符之前有效。 不能使用延续字符 (') 来扩展其效果,也不能使用命令分隔符 (;) 来终止其效果。

例如,以下命令调用 Icacls 程序。

icacls X:\VMS /grant Dom\HVAdmin:(CI)(OI)F

若要在 PowerShell 2.0 中运行此命令,必须使用转义字符来防止 PowerShell 错误解释括号。

icacls X:\VMS /grant Dom\HVAdmin:`(CI`)`(OI`)F

从 PowerShell 3.0 开始,您可以使用 stop-parsing 符号。

icacls X:\VMS --% /grant Dom\HVAdmin:(CI)(OI)F

PowerShell 将以下命令字符串发送到 Icacls 程序:

X:\VMS /grant Dom\HVAdmin:(CI)(OI)F

另请参阅

关于_命令_语法