Quero saber por que quando deixo espaços entre os parâmetros em um comando do PowerShell, recebo erros:
Comespaço: (não funciona)
wmic desktopmonitor get screenwidth, screenheight
Expression GET non valide.
Semespaço: (trabalho)
wmic desktopmonitor get screenwidth,screenheight
ScreenHeight ScreenWidth
Isso é normal? Porque vejo muitos comandos na internet dados com espaços!
Atualização 27/01/2016 Detalhes da versão:
$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
Ambas as formas (com e sem espaço) funcionam com CMD, mas apenas a segunda forma (sem espaço) funciona com PowerShell (veja as capturas de tela abaixo):
Responder1
Vírgula é um operador de array no PowerShell. Então seu comando:
wmic desktopmonitor get screenwidth, screenheight
têm o seguinte significado: invocar wmic
com três argumentos: string desktopmonitor
, string get
e array com duas strings screenwidth
e screenheight
. Por wmic
ser um aplicativo nativo, o PowerShell precisa transformar argumentos em linha de comando. O PowerShell usa espaço como separador ao transformar o array em linha de comando. Portanto, a linha de comando resultante seria a seguinte:
wmic desktopmonitor get screenwidth screenheight
Você pode ver isso digitando o seguinte comando:
cmd /c echo wmic desktopmonitor get screenwidth, screenheight
A partir do PowerShell v5, há um caso especial aqui. Se a matriz for fornecida diretamente (não como subexpressão) e não houver espaços entre vírgulas e elementos da matriz, o PowerShell usará vírgula como separador ao transformar matrizes em linha de comando.
PS> cmd /c echo 1,2,3 (4,5,6) 7,8 ,9
1,2,3 4 5 6 7 8 9
Este comando:
wmic desktopmonitor get screenwidth,screenheight
qualificar-se para este caso especial e a linha de comando resultante seria a seguinte:
wmic desktopmonitor get screenwidth,screenheight