我想知道为什么当我在 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