5

以下のような出力を返す配列オブジェクト $a があります。

$a がこれを返すとします

$a[0].Name を実行することで、各「名前」エントリにアクセスできます。$a[0].Available 対応する利用可能なスペースにアクセスできます。

いくつかの名前を含む $b という別の配列があります。たとえば、$b が "sandeep_aggr1" と "aggr4" という 2 つの名前を返すとします。これは単なる配列 (Name や Avaiable などのプロパティはありません) であり、オブジェクトではないため、Compare-Object を使用できません。

「名前」が「sandeep_aggr1」および「aggr4」に等しいものを除いて、元のオブジェクト $a の他のエントリを削除したいと考えています。

これが私がやっていることです。

foreach($bb in $b)
    {
          foreach($aa in $a)
          {
                if($aa.Name -ne $bb)
                {
                   $aa.Remove($aa.Name)
                }

          }


    }

    echo $a

しかし、削除された要素が表示されません。ここで何か不足していますか? どんな助けでも大歓迎

4

2 に答える 2

9

質問を正しく読んでいれば、これはうまくいくはずです:

$a = $a | where {$b -contains $_.Name}
于 2013-04-03T18:15:13.163 に答える
1

私は同じ問題を抱えていましたが、 $a が要素が1つしかない配列になるとうまくいきません。Powershell は $a が配列であるという事実を失います。直後に JSON 変換を使用したため、これは非常に問題でした。

キャストを追加しました:

$a = [array]($a | where {$b -contains $_.Name})
于 2015-07-23T14:30:15.663 に答える