2

Я хочу знать, почему, когда я пропускаю пробелы между параметрами в команде 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 ответ1

3

Запятая является оператором массива в PowerShell. Итак, ваша команда:

wmic desktopmonitor get screenwidth, screenheight

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .