【问题标题】:Compare given size with required size and show mismatch将给定尺寸与所需尺寸进行比较并显示不匹配
【发布时间】:2017-06-19 09:53:45
【问题描述】:

我目前的项目有点麻烦。我有两个数组 - 第一个数组包含磁盘大小的参考值:

$RequiredDisks0 = New-Object System.Object
$RequiredDisks0 | Add-Member -Type NoteProperty -Name "DeviceID" -Value "C:"
$RequiredDisks0 | Add-Member -Type NoteProperty -Name "SizeGB" -Value "80"

第二个数组包含底层系统的磁盘信息:

$SystemDisks = Get-WmiObject Win32_LogicalDisk |
               Where {$_.DriveType -eq 3} |
               select DeviceID,
                 @{Name="Size(GB)";Expression={[decimal]("{0:N0}" -f ($_.Size/1gb))}}

我想做的是对照参考阵列检查给定的阵列,看看是否有任何给定的磁盘小于所需的磁盘。我发现我可以通过使用来比较数组

Compare-Object -ReferenceObject $RequiredDisks -DifferenceObject $SystemDisks -Property SizeGB,DeviceID

我确实收到如下差异:

SizeGB DeviceID SideIndicator
------ -------- -------------
    99 C:       =>           
    15 H:       =>           
   100 I:       =>           
    80 C:       <=           
    25 H:       <=           
   200 I:       <=

我遇到问题的地方是处理输出。我想要实现的结果是输出说明“磁盘 n 小于要求!”。我知道带有侧面指示符“”侧面指示符的所有内容都是给定值。我尝试了foreach 语句,但我无法根据需要处理数据 - 我需要根据所需值检查给定值,如果它更小,请告诉我。如何根据需要再次比较这些值?基本上是“SideIndicator 为 且 DeviceID 等于 DeviceID 的对象比较”。如何将其转换为正确的代码?

【问题讨论】:

  • 请不要将答案编辑成问题。如果您自己找到了解决方案:将其发布为您自己的答案。如果您希望改进您​​的代码:在Code Review 上发布问题。
  • 感谢您的眨眼 - wilco。

标签: arrays powershell


【解决方案1】:

在我看来,Compare-Object 正在对这两个属性进行双重比较。 The documentation 或其他 StackOverflow 灵魂可能会帮助执行该命令。

我的方法是将您的伪代码转换为代码:

foreach ($disk in $SystemDisks){

   $ref = $RequiredDisks | Where-object {$_.DeviceID -eq $disk.DeviceID}

   if([int]($disk.SizeGB) -lt [int]($ref.SizeGB){
       Write-Output "Disk $($disk.DeviceID) is smaller than required!"
   }

}

【讨论】:

  • 谢谢,我自己找到了类似的解决方案,但会尝试使用此版本运行。看起来比我的双 foreach 好多了 XD 我明天会发布我的结果!
  • 解决方案运行良好,而且绝对比我想出的要好。标记为答案!非常感谢:-)
猜你喜欢
  • 2022-12-20
  • 2012-02-19
  • 2021-07-23
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 2014-12-14
相关资源
最近更新 更多