2013-09-23 32 views
7

Nesnenin en yüksek değere sahip olduğu bir diziden bir nesne döndürmek istiyorum. Şu anda şuEn yüksek değere sahip nesneden dönüş nesnesi

Bu çalışır, ancak verimsiz. Sıralı diziye ihtiyacım yok, sadece en büyük değeri olan nesneye ihtiyacım var. İdeal

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

gibi bir şey kullanmak istiyorum ama bu sadece nesne özelliği değil, bütün nesnenin değerini döndürür. Ölçü nesnesinin temel nesneyi döndürmesinin bir yolu var mı?

cevap

9

Doğrudan değil. Measure-Object, giriş nesnelerini değil, bu değerleri almanın kolay bir yolu olarak düşünülmüştür. Sen Ölçü-Nesne verim alabilmek ve daha sonra dizinin karşı karşılaştırmak, ancak birkaç adımdan oluşur olabilir:

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

Ayrıca Ölçme-Object tamamen bırakmak ve maksimum yerine kümesi içinde yineleme olabilir ve çıktığında çıktı.

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

Bu, her zaman tek bir değer döndürmek için biraz daha kirlidir. Aynı maksimum değere sahip birden fazla değer (örneğin Get-ChildItem kullanırken uzunlukları dosyalayın) olduğu bir durumda yeniden kullanacak olursanız küçük bir ayar yapılması gerekir. Bu iki veya daha fazla nesnenin ProvisionedSpaceGB için aynı değere sahip olduğu bir durumda $output yerini ikinci yineleme ile değiştirecektir. Bunu düzeltmek için $output'u kolayca koleksiyona dönüştürebilirsiniz.

Eski çözümü kendim tercih ederim ama sorun hakkında düşünmenin farklı bir yolunu sunmak istedim.

+0

Eğer '$ dizi yazdı yeniden Eğer | ? {$ _ ProvisionedSpaceGB -eq $ maks.} ' olarak '@ ($ dizi |? {. $ _ ProvisionedSpaceGB -eq $ maksimum}) [0] senin için tek bir değer döndürebilir , ancak Hyper Anthony, her zaman istediğin kişi olmadığına dikkat çekti. –

3

Bunu kullanabilirsiniz:

$array = Get-VM | Sort-Object -Property ProvisionedSpaceGB -Descending 
$array[0] 
İlgili konular