1

add-memberコマンドレットで遊んでいますが、次の3つのコードでは同じ結果が得られないことがわかりました。誰かが理由を説明しますか?ありがとう。

################################################################ 
$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

Add-Memberの位置パラメーターとして$hashを使用しています。Add-Memberのヘルプを見ると、PowerShell v2では、最初のパラメーターはMemberTypeです。したがって、最初の例は次のようになります

$result | Add-Member -MemberType @{"a" = "aa"; "b" = "bb"}

PowerShellはハッシュテーブルをMemberTypeとして解釈できないため、エラーが発生します。これは、3つの例すべてに当てはまります。

PowerShell v3では、最初の例を次のように解釈します

$result | Add-Member -NotePropertyMembers @{"a" = "aa"; "b" = "bb"}

他の人がすでに指摘しているように、Add-memberで結果を割り当てる場合は、-PassThruパラメーターを使用する必要があります。

于 2012-11-29T13:45:37.347 に答える
2

1つ目は、Add-Memberの前に$resultpsobjectの作成が実行されるため機能します。$ resultがnullであるため、2番目の2つは機能しません。以下のコードは、ステートメント評価の順序を保証します。

################################################################ 
$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 に答える
1

Add-Member-PassThru引数を使用しない限り、何も返しません。

于 2012-11-29T09:14:56.443 に答える