关于分析

简短说明

介绍 PowerShell 如何分析命令。

详细说明

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

例如,如果键入:

Write-Host 书

PowerShell 将以下命令分解为两个标记(“Write-Host”和“book”),并单独解释每个令牌。

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

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

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

如果前面有其中一个字符,则该值被视为值表达式。

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

示例 模型 结果
2+2 Expression 4 (整数)
Write-Output 2+2 参数 “2+2” (字符串)
Write-Output (2+2) Expression 4 (整数)
$a = 2+2 Expression $a = 4 (整数)
Write-Output $a Expression 4 (整数)
Write-Output $a/H 参数 “4/H” (字符串)

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

示例 模型 结果
Write-Output !1 参数 “!1” (字符串)
Write-Output (!1) 表达式 假 (布尔)
Write-Output (2) 表达式 2 (整数)

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

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

当遇到停止分析符号时,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

另请参阅

about_Command_Syntax