【发布时间】:2020-07-21 08:41:50
【问题描述】:
首先,如果有人想知道我们为什么要以这种方式调用 PowerShell,我在构建一个更复杂的命令时遇到了这种行为,但可以使用如下所示的更简单的示例来展示这种行为。在实践中,我们以管理员身份在 32 位 PowerShell 下运行命令,并在字符串中呈现附加变量(因此我不简单地使用单引号作为外部部分),但这似乎并没有考虑到下面的行为。
当我通过 Start-Process 调用 PowerShell 时,如果我在 PowerShell 可执行文件的 -Command 参数周围使用单引号,我会得到一些奇怪的行为。例如:
Start-Process -FilePath Powershell.exe -ArgumentList "-Command 'ping google.com'"
只是将ping google.com 渲染为输出并退出。但是,如果我使用嵌套的双引号而不是单引号,如下所示:
Start-Process -FilePath Powershell.exe -ArgumentList "-Command `"ping google.com`""
ping 运行并产生预期的输出:
使用 32 字节数据 ping google.com [173.194.78.113]:
来自 173.194.78.113 的回复:bytes=32 time=34ms TTL=45
来自 173.194.78.113 的回复:bytes=32 time=33ms TTL=45
来自 173.194.78.113 的回复:bytes=32 time=35ms TTL=45
来自 173.194.78.113 的回复:bytes=32 time=32ms TTL=45
173.194.78.113 的 Ping 统计数据:
数据包:发送 = 4,接收 = 4,丢失 = 0(0% 丢失),
大约以毫秒为单位的往返时间:
最小值 = 32 毫秒,最大值 = 35 毫秒,平均值 = 33 毫秒
如果我对-Command 参数使用单引号而不是双引号,为什么命令字符串只是按原样呈现而不是执行?
【问题讨论】:
标签: powershell arguments command-line-interface quoting