powershell add-member cmdlet问题

时间:2012-11-29 06:45:35

标签: powershell

我正在使用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

4 个答案:

答案 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不会返回任何内容。