Spazi tra i parametri in un comando PowerShell


2

Voglio sapere perché quando ho lasciato spazi tra i parametri in un comando PowerShell ho errori:

Con spazio: (non funziona)

wmic desktopmonitor get screenwidth, screenheight
Expression GET non valide.

Senza spazio: (lavoro)

wmic desktopmonitor get screenwidth,screenheight
ScreenHeight  ScreenWidth

È normale? Perché vedo molti comandi su internet dati con gli spazi!


Aggiornamento 27/01/2016 Dettaglio della versione :

$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

In entrambi i casi (con e senza spazio) funziona con CMD, ma solo il secondo modo (senza spazio) funziona con PowerShell (vedi sotto schermate):

Cmd.exe

PowerShell


1
Quale versione di PowerShell stai eseguendo e su quale versione di Windows? Questi comandi sono BOTH validi nel prompt dei comandi (non in PowerShell nella mia configurazione), ma ENTRAMBI non sono validi nella mia configurazione in PowerShell nel mio ambiente. Ulteriori dettagli sulla configurazione dell'ambiente potrebbero essere utili. Se si ha la possibilità di aggiungere una schermata o un collegamento che mostra un esempio funzionante e non funzionante, potrebbe essere utile.
Pimp Juice IT

$PSVersionTable per trovare la versione che stai utilizzando.
Michael Frank

@ 1Fish_2Fish_RedFish_BlueFish: vorrei aver risposto alla tua domanda nel mio aggiornamento.
noraj

Risposte:


3

Virgola è un operatore di array in PowerShell. Quindi il tuo comando:

wmic desktopmonitor get screenwidth, screenheight

avere il seguente significato: invocare wmic con tre argomenti: stringa desktopmonitor, stringa get e array con due stringhe screenwidth e screenheight. Da wmic è un'applicazione nativa, PowerShell deve trasformare gli argomenti in riga di comando. PowerShell utilizza lo spazio come separatore quando trasforma l'array in riga di comando. Quindi, la riga di comando risultante avrebbe seguito:

wmic desktopmonitor get screenwidth screenheight

Puoi vederlo digitando il seguente comando:

cmd /c echo wmic desktopmonitor get screenwidth, screenheight

A partire da PowerShell v5 c'è un caso speciale qui. Se l'array viene fornito direttamente (non come sottoespressione) e non vi sono spazi tra le virgole e gli elementi dell'array, PowerShell utilizza la virgola come separatore quando trasforma gli array in riga di comando.

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

Questo comando:

wmic desktopmonitor get screenwidth,screenheight

qualificarsi per questo caso speciale e la conseguente riga di comando sarebbe seguente:

wmic desktopmonitor get screenwidth,screenheight
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.