变量分配中括号前的逗号

时间:2019-03-26 20:32:59

标签: powershell

我在我的PowerShell脚本中使用S.DS.P PowerShell module。在其中,我必须创建以下对象:

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

documentation of the module中,我必须对使用该对象创建的变量的unicodePwd字段进行以下分配:

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

请注意在第一个括号之前如何使用逗号。那个逗号在那做什么?

1 个答案:

答案 0 :(得分:1)

正如Lee_Daily所指出的那样,您看到的是 {strong> "comma 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[]]数组。