這是我的輸入的樣子:
$AllDrives = '[
{
"DriveLetter": "F",
"FileSystemLabel": "Drive_F",
"AllocationUnitSize": 4096
},
{
"DriveLetter": "E",
"FileSystemLabel": "Drive_E",
"AllocationUnitSize": 4096
},
{
"DriveLetter": "H",
"FileSystemLabel": "",
"AllocationUnitSize": 65536
},
{
"DriveLetter": "I",
"FileSystemLabel": "",
"AllocationUnitSize": 65536
},
{
"DriveLetter": "G",
"FileSystemLabel": "",
"AllocationUnitSize": 65536
}
]' | ConvertFrom-Json
我想將另一個陣列與 $AllDrives 進行比較,并從 DriveLetter 與它們不匹配的另一個陣列中回傳這些元素。
$StandardDrives = @("E","F","G","H","I","J","K")
如何在不運行兩個回圈的情況下以(PowerShell 方式)完成此操作?
預期輸出是 @("J","K")
uj5u.com熱心網友回復:
使用Where-Object和利用屬性列舉:
$StandardDrives |Where-Object {$_ -notin $AllDrives.DriveLetter}
當 PowerShell 發現$AllDrives陣列物件沒有DriveLetter屬性時,它會自動列舉DriveLetter各個陣列項上的值,$AllDrives.DriveLetter因此運算式擴展為等效于的陣列@('F','E','H','I','G')
uj5u.com熱心網友回復:
這是獲取未使用的驅動器號的另一種方法。[咧嘴笑]
它能做什么 ...
- 定義可能的驅動器號串列
- 使用
.Where()集合方法過濾事物 - 檢查可能的字母是否在使用中的字母集合中
- 將其輸出到成功流
,該成功流可以通過將其分配給一個來捕獲到 $Var 中。
代碼 ...
@('e', 'f', 'g', 'h', 'i', 'j', 'k').Where({
$_ -notin $AllDrives.DriveLetter
})
輸出 ...
j
k
uj5u.com熱心網友回復:
使用Compare-Object:
(Compare-Object -ReferenceObject $AllDrives.DriveLetter -DifferenceObject $StandardDrives).InputObject
將回傳:
J
K
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/384886.html
標籤:电源外壳
