Пробелы между параметрами в команде Powershell

Пробелы между параметрами в команде Powershell

Я хочу знать, почему, когда я вставляю пробелы между параметрами в команде PowerShell, у меня возникают ошибки:

Спробел: (не работает)

wmic desktopmonitor get screenwidth, screenheight
Expression GET non valide.

Безпространство: (работа)

wmic desktopmonitor get screenwidth,screenheight
ScreenHeight  ScreenWidth

Это нормально? Потому что я вижу много команд в интернете, которые задаются с пробелами!


Обновление 27/01/2016 Подробности версии:

$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 (см. снимки экрана ниже):

Cmd.exe

PowerShell

решение1

Запятая — оператор массива в PowerShell. Поэтому ваша команда:

wmic desktopmonitor get screenwidth, screenheight

имеют следующее значение: вызов wmicс тремя аргументами: string desktopmonitor, string getи array с двумя string screenwidthи screenheight. Поскольку wmicPowerShell является собственным приложением, он должен преобразовать аргументы в командную строку. 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

Связанный контент