Espaços entre parâmetros em um comando Powershell

2

Eu quero saber porque quando eu deixo espaços entre os parâmetros em um comando do powershell, eu tenho erros:

Com espaço: (não funciona)

wmic desktopmonitor get screenwidth, screenheight
Expression GET non valide.

Sem espaç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 Detalhe 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

Os dois modos (com e sem espaço) funcionam com o CMD, mas somente o segundo caminho (sem espaço) funciona com o PowerShell (veja as capturas de tela abaixo):

    
por noraj 26.01.2016 / 22:20

1 resposta

3

Comma é um operador de matriz no PowerShell. Então, seu comando:

wmic desktopmonitor get screenwidth, screenheight

tem o seguinte significado: invoke wmic com três argumentos: string desktopmonitor , string get e array com duas strings screenwidth e screenheight . Como wmic é um aplicativo nativo, o PowerShell precisa transformar argumentos em linha de comando. O PowerShell usa o espaço como separador ao transformar a matriz em linha de comando. Então, 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 de matriz, o PowerShell usará a 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

qualifique-se para este caso especial e a linha de comando resultante seria:

wmic desktopmonitor get screenwidth,screenheight
    
por 28.01.2016 / 18:01