Как указывает 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[]]
.