Powershell 命令中参数之间的空格

Powershell 命令中参数之间的空格

我想知道为什么当我在 powershell 命令中的参数之间留空格时会出现错误:

空格 :(无效)

wmic desktopmonitor get screenwidth, screenheight
Expression GET non valide.

没有空间:(工作)

wmic desktopmonitor get screenwidth,screenheight
ScreenHeight  ScreenWidth

这是正常的吗?因为我在网上看到很多命令都带有空格!


更新日期 2016/01/27 版本详情

$PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.0.10240.16384
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.42000
BuildVersion                   10.0.10240.16384
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion      2.3

两种方式(有和没有空格)都可以用于 CMD,但只有第二种方式(没有空格)可以用于 PowerShell(见下面的屏幕截图):

命令执行程序

电源外壳

答案1

逗号是 PowerShell 中的数组运算符。因此您的命令:

wmic desktopmonitor get screenwidth, screenheight

具有以下含义:wmic使用三个参数调用:字符串desktopmonitor、字符串get和带有两个字符串screenwidth和的数组screenheight。由于wmic是本机应用程序,PowerShell 必须将参数转换为命令行。PowerShell 在将数组转换为命令行时使用空格作为分隔符。因此,生成的命令行将如下所示:

wmic desktopmonitor get screenwidth screenheight

您可以通过输入以下命令来查看:

cmd /c echo wmic desktopmonitor get screenwidth, screenheight

从 PowerShell v5 开始,这里有一个特殊情况。如果直接提供数组(而不是作为子表达式),并且逗号和数组元素之间没有空格,则 PowerShell 在将数组转换为命令行时使用逗号作为分隔符。

PS> cmd /c echo 1,2,3 (4,5,6) 7,8 ,9
1,2,3 4 5 6 7 8 9

此命令:

wmic desktopmonitor get screenwidth,screenheight

符合这种特殊情况,结果命令行如下:

wmic desktopmonitor get screenwidth,screenheight

相关内容