1

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

4 回答 4

2

第一个有效,因为 $result psobject 创建是在 Add-Member 之前执行的。第二个 2 不起作用,因为 $result 为空。下面的代码确保语句评估的顺序。

################################################################ 
$hash = @{"a" = "aa"; "b" = "bb"}
($result = new-object psobject) | Add-Member $hash
$result
于 2012-11-29T08:54:55.490 回答
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
于 2012-11-29T08:58:42.723 回答
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 参数。

于 2012-11-29T13:45:37.347 回答
1

Add-Member-PassThru除非您使用参数,否则不会返回任何内容。

于 2012-11-29T09:14:56.443 回答