powershell - 从数组中返回具有最高值的对象

标签 powershell

我想从属性具有最高值的数组中返回一个对象。目前我正在做以下事情

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

这有效但效率低下。我不需要对整个数组进行排序,我只需要具有最大值的对象。理想情况下,我会使用类似的东西
Get-VM | Measure-Object -Property ProvisionedSpaceGB -Maximum

但这仅返回对象属性的值,而不是整个对象。有没有办法让测量对象返回基础对象?

最佳答案

不直接。 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 时的文件大小长度)的情况下重用它,则需要稍作调整。它将取代 $output后者在两个或多个对象具有相同值的情况下迭代 ProvisionedSpaceGB .你可以转$output很容易地放入一个集合中来解决这个问题。

我自己更喜欢前一种解决方案,但我想提供一种不同的方式来思考这个问题。

关于powershell - 从数组中返回具有最高值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18966533/

相关文章:

powershell - 有没有办法用一个单词替换所有可被3整除的数字1到100?

c# - 通过解码 "*.itemdata-ms"二进制数据文件自定义Windows 8.1 StartScreen (Windows 8.1, StartScreen, C#)

powershell - 将参数字符串转换为 Here String

windows - 根据包含 2 个下划线的文件名创建一个文件夹,然后将该文件放入该文件夹中

powershell - conda 在 powershell 上激活

arrays - Powershell 匹配属性,然后有选择地组合对象以创建第三个对象

powershell - 如何在 PowerShell 中将诸如 5.7303333333e+02 之类的字符串转换为十进制?

powershell - 如何在 Powershell 中设置 TLS 1.1?

powershell - PowerShell 的快速 ping 功能

azure - 通过 Azure powershell 命令远程运行 SysPrep