14

プロパティの値が最も高い配列からオブジェクトを返したいです。現在、私は次のことを行っています

Get-VM | Sort-Object -Property ProvisionedSpaceGB | Select-Object -Last 1

これは機能しますが、非効率的です。配列全体をソートする必要はありません。最大の値を持つオブジェクトが必要なだけです。理想的には、次のようなものを使用します

Get-VM | Measure-Object -Property ProvisionedSpaceGB -Maximum

ただし、これはオブジェクト全体ではなく、オブジェクト プロパティの値のみを返します。メジャーオブジェクトがベースオブジェクトを返すようにする方法はありますか?

4

2 に答える 2

16

直接ではありません。 Measure-Object入力オブジェクトではなく、そのような値を取得する簡単な方法を意図しています。Measure-Object から最大値を取得し、配列と比較することもできますが、いくつかの手順が必要です。

$array = Get-VM
$max = ($array | measure-object -Property ProvisionedSpaceGB -maximum).maximum
$array | ? { $_.ProvisionedSpaceGB -eq $max}

また、Measure-Object を完全に放棄して、セットを反復処理し、最大値と出力を置き換えることもできます。

$max = 0
$array | Foreach-Object 
{ 
    if($max -le $_.ProvisionedSpaceGB)
    { 
        $output = $_ 
        $max = $_.ProvisionedSpaceGB
    } 
}
$output

これは、常に単一の値を返すようにするため、少し汚いです。同じ最大値を持つ複数の値が存在する可能性がある場合に再利用する場合は、わずかな調整が必要になります (たとえば、Get-ChildItem を使用する場合のファイルサイズの長さ)。$output2 つ以上のオブジェクトの の値が同じ場合は、後者の繰り返しに置き換えられProvisionedSpaceGBます。$outputそれを修正するのに十分簡単に​​コレクションに変えることができます。

私自身は前者の解決策を好みますが、この問題について別の考え方を提供したかったのです。

于 2013-09-23T19:08:40.440 に答える
10

これを使用できます:

$array = Get-VM | Sort-Object  -Property ProvisionedSpaceGB -Descending
$array[0]
于 2016-10-19T16:08:55.770 に答える