Я на самом деле не знаю powershell, но я решил, что я возиться с вашим сценарием.Мне кажется, что «$ i» неверно - вместо этого используйте $ i.DeviceID (без кавычек).Весь сценарий, который мне подходит:
$disks = gwmi Win32_LogicalDisk | Where {$_.DriveType -eq "3"} | Select DeviceID
foreach ($i in $disks){
$i.DeviceID
gwmi Win32_LogicalDisk | Where {$_.DeviceID -eq $i.DeviceID} | Select Size
}
Другой вариант - пропустить итерацию:
gwmi Win32_LogicalDisk | Where {$_.DriveType -eq "3"} | Select DeviceID, Size
Алгоритмически я бы порекомендовал это на основе выполнения - подход, который вы используетевзятие теперь итерирует по всем устройствам два раза внутри циклов (в основном O (n ^ 2)).«Другой вариант» выше повторяет их только один раз.