我正在使用add-member cmdlet,发现以下三段代码并没有给我相同的结果。有谁解释原因?感谢。
################################################################
$hash = @{"a" = "aa"; "b" = "bb"}
$result = new-object psobject
$result | Add-Member $hash
$result
################################################################
$hash = @{"a" = "aa"; "b" = "bb"}
$result = new-object psobject | Add-Member $hash
$result
################################################################
$hash = @{"a" = "aa"; "b" = "bb"}
$result = (new-object psobject | Add-Member $hash)
$result
答案 0 :(得分:2)
第一个起作用是因为$ result psobject创建在Add-Member之前执行。第二个2不起作用,因为$ result为null。下面的代码确保了陈述评估的顺序。
################################################################
$hash = @{"a" = "aa"; "b" = "bb"}
($result = new-object psobject) | Add-Member $hash
$result
答案 1 :(得分:2)
$ hash可能绑定到错误的参数。正确的方法是决定成员类型(本例中为NoteProperty),名称和值:
$result | Add-Member -MemberType NoteProperty -Name MyHash -Value $hash
如果将结果分配给变量,请添加-PassThru开关:
$result = new-object psobject | Add-Member -MemberType NoteProperty -Name MyHash -Value $hash -PassThru
$result.MyHash
答案 2 :(得分:2)
您使用$ hash作为Add-Member的位置参数。如果查看Add-Member的帮助,在PowerShell v2中,第一个参数是MemberType。所以你的第一个例子相当于
$result | Add-Member -MemberType @{"a" = "aa"; "b" = "bb"}
PowerShell无法将您的哈希表解释为MemberType,因此它会出错。这适用于所有三个例子。
在PowerShell v3中,它将您的第一个示例解释为
$result | Add-Member -NotePropertyMembers @{"a" = "aa"; "b" = "bb"}
正如其他人已经指出的那样,如果要使用Add-member分配结果,则需要使用-PassThru参数。
答案 3 :(得分:1)
Add-Member
参数,否则 -PassThru
不会返回任何内容。