将结果输出推送到数组
Push output of results to an array
我是 运行 下面的脚本,return 来自我们资产中所有可用服务器列表的磁盘容量结果集。我想附加输出并将它们合并到一个数据集中,以便于显示和查询。我知道如何将值附加到具有一列的数组,但是因为这需要多个,所以我不确定如何实现这一点。是否可以将此输出的结果集附加到数组?
$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
}
我认为最好的方法是按照 Microsoft this blog post 中显示的内容进行操作
基本上,您可以创建一个嵌套哈希表。所有服务器的一个哈希表,然后另一个嵌套在其中的值。这是给你的一个小例子:)
$resultsHash = @{
SERVER1 = @{
SizeInGB=""
UsedSizeInGB=""
FreeSizeInGB=""
FreePerc=""
}
SERVER2 = @{
SizeInGB=""
UsedSizeInGB=""
FreeSizeInGB=""
FreePerc=""
}
}
您可以通过将 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
查询的属性。
我是 运行 下面的脚本,return 来自我们资产中所有可用服务器列表的磁盘容量结果集。我想附加输出并将它们合并到一个数据集中,以便于显示和查询。我知道如何将值附加到具有一列的数组,但是因为这需要多个,所以我不确定如何实现这一点。是否可以将此输出的结果集附加到数组?
$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
}
我认为最好的方法是按照 Microsoft this blog post 中显示的内容进行操作
基本上,您可以创建一个嵌套哈希表。所有服务器的一个哈希表,然后另一个嵌套在其中的值。这是给你的一个小例子:)
$resultsHash = @{
SERVER1 = @{
SizeInGB=""
UsedSizeInGB=""
FreeSizeInGB=""
FreePerc=""
}
SERVER2 = @{
SizeInGB=""
UsedSizeInGB=""
FreeSizeInGB=""
FreePerc=""
}
}
您可以通过将 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
查询的属性。