2017-06-19 106 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

解決方案工作正常,而且比我想出的更好。標記爲答案!非常感謝你 :-) –