Запятая перед круглыми скобками в назначении переменной - PullRequest
2 голосов
/ 26 марта 2019

Я использую S.DS.P PowerShell модуль в моем скрипте PowerShell.В нем я должен создать следующий объект:

$ADUserEntry = @{"distinguishedName"=$null;"objectClass"=$null;"sAMAccountName"=$null;"unicodePwd"=$null;"userAccountControl"=0};

В документации модуля указано, что я должен сделать следующее присвоение полю unicodePwd поляпеременная, созданная с использованием этого объекта:

$obj.unicodePwd = ,([System.Text.Encoding]::Unicode.GetBytes("$randomPassword") -as [byte[]]);

Обратите внимание на запятую перед первыми скобками.Что эта запятая там делает?

1 Ответ

1 голос
/ 27 марта 2019

Как указывает Lee_Daily , вы видите унарную форму (к сожалению названной) "запятой operator ", т.е. PowerShell оператор построения массива .

Унарная форма создает одноэлементный массив , который оборачивает свой (единственный и единственный) операнд; тип массива [object[]], как обычно в PowerShell:

$arr = , 'foo'  # wrap string 'foo' in a single-element array
$arr.GetType().Name # the array's type -> 'Object[]'
$arr[0].GetType().Name # the type of the array's one and only element -> 'String'

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

# OK - wraps array 1, 2 in a single-element array.
$arr = , (1, 2) 

# !! DOES SOMETHING DIFFERENT:
# Creates a 2-element array whose 1st element is integer 1 wrapped in a
# single-element array
$arr = , 1, 2

Бинарная форма создает массив из операндов, как и ожидалось:

$arr = 1, 2, 3  # 3-element array whose elements are integers 1 and 2 and 3

В качестве отступления приведем указанную команду:

,([System.Text.Encoding]::Unicode.GetBytes("$randomPassword") -as [byte[]])

Ни ,, ни -as [byte[]] не нужны в этом сценарии, потому что [System.Text.Encoding]::Unicode.GetBytes() напрямую возвращает массив [byte[]].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...