我正在运行以下scrpt,以从清单中的所有可用服务器列表中返回磁盘容量的结果集。我想附加输出并将它们组合到一个数据集中,以使其易于显示和查询。我知道如何将值附加到具有一列的数组中,但是由于这需要多个列,因此我不确定如何实现这一点。是否可以将输出的结果集附加到数组?
$myarray = @("")
$servers =
@(
'SERVER1'
,'SERVER2'
,'SERVER3'
,'SERVER4'
,'SERVER5'
,'SERVER6'
)
$wmiQuery = @"
SELECT
SystemName,Name,DriveType,FileSystem,FreeSpace,Capacity,Label
FROM
Win32_Volume
"@
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|Format-Table
}
答案 0 :(得分:2)
您可以通过将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
查询属性的对象。
答案 1 :(得分:0)
我认为最好的方法是遵循Microsoft this blog post中显示的内容
基本上,您可以创建嵌套的哈希表。所有服务器的一个哈希表,然后嵌套在其中的另一个哈希表以获取值。这是给您的一个小例子:)
$resultsHash = @{
SERVER1 = @{
SizeInGB=""
UsedSizeInGB=""
FreeSizeInGB=""
FreePerc=""
}
SERVER2 = @{
SizeInGB=""
UsedSizeInGB=""
FreeSizeInGB=""
FreePerc=""
}
}