2017-06-19 107 views
1

我目前在当前项目中遇到了一些问题。我有两个阵列 - 第一阵列包含用于磁盘大小的参考值:将给定尺寸与所需尺寸进行比较并显示不匹配

$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声明,但我无法根据需要处理数据 - 我需要根据所需值检查给定值,如果它较小,请告诉我。我如何再次根据需要比较这些值?基本上是一个“foreIndicator为< =的比较对象,其中SideIndicator =>和DeviceID等于DeviceID的foreach对象。我如何将它转换为正确的代码?

+0

请不要编辑答案变成一个问题。如果您自己找到解决方案:将其作为您自己的答案发布。如果你想改进你的代码:在[代码评论](https://codereview.stackexchange.com/)上发布一个问题。 –

+0

感谢眨眼 - 威科。 –

回答

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!" 
    } 

} 
+0

谢谢,我自己找到了类似的解决方案,但会尝试使用此版本运行。看起来比我的双foreach好多了XD我会在明天发布我的结果! –

+1

解决方案工作正常,而且比我想出的更好。标记为答案!非常感谢你 :-) –