Это можно сделать, сохранив выходные данные цикла foreach в массиве.
$servers = @('SERVER1','SERVER2','SERVER3','SERVER4','SERVER5','SERVER6')
$wmiQuery = @"
SELECT
SystemName,Name,DriveType,FileSystem,FreeSpace,Capacity,Label
FROM
Win32_Volume
"@
$myarray = Foreach ($server in $servers)
{
Get-WmiObject -ComputerName $server -Query $wmiQuery |
Select-Object @{Name = "Computer"; Expression={$server}},Name,Label,
@{Name = "SizeInGB"; Expression={"{0:N2}"-f ($_.Capacity/1GB)}},
@{Name = "UsedSizeInGB"; Expression={"{0:N2}"-f (($_.Capacity - $_.FreeSpace)/1GB)}},
@{Name = "FreeSizeInGB"; Expression={"{0:N2}"-f ($_.FreeSpace/1GB)}},
@{Name = "FreePerc"; Expression={"{0:N2}"-f (($_.FreeSpace/1GB)/($_.Capacity/1GB))}}|Where-Object FreePerc -LE 0.16
}
$myarray | Format-Table
Я удалил Format-Table
из цикла, потому что вы должны использовать команды Format-*
только тогда, когда вы показываете свой окончательный вывод, а не когда вы собираетесь использовать этот вывод для другой обработки. Переменная $myarray
будет массивом, где каждый элемент является объектом со свойствами из вашего запроса Get-WmiObject
.