Powershell 多值比较

Powershell Multiple values comparison

我使用

在我的 VM 上获取可用的原始磁盘
$availDisks = Get-PhysicalDisk -CanPool $true

$availDisks 包含 3 个 RAW 磁盘 我想有效地比较磁盘的大小,如果它们大小相同,则对它们进行条带化。

$availDisks.Size 给出了 3 个磁盘的输出,但我需要比较它们中的每一个。

我用的方法是

$size = $availDisks[0].size
foreach($disk in $availDisks){
   if($disk.size -eq $size){
      Write-Host "The disk is equal to the desired size"
      continue with the disk striping
   }else{
      Write-Error "One of the disks is not matching the size"
      Do something else
   }
}

有没有更有效的方法?

您可以使用 Group-Object 定位对象的 Size 属性:

Get-PhysicalDisk -CanPool $true | Group-Object Size |
    Where-Object Count -GT 1 | ForEach-Object Group

Size 属性的值对对象进行分组,过滤Count大于1的组(即相同Size的磁盘) ), 然后输出每个过滤后的对象。如果您没有从中得到任何输出,则表示磁盘的大小不同。

在磁盘大小上使用 Select-Object -Unique 来检查是否只有一个唯一值。如果有任何其他值,则说明您没有磁盘或 non-equal 大小的磁盘。

if( @( $availDisks.Size | Select-Object -Unique ).Count -ne 1) {
  Write-Error "One of the disks is not matching the size"
  # Do something else
} else {
  Write-Host "The disks are equal to the desired sizing"
  # Continue with the disk striping
}