自定义对象创建不像您想象的那样工作。编码
$item= @{}
$item.freePercent = $freePercent
$item.freeGB = $freeGB
$item.system = $system
$item.disk = $disk
创建一个哈希表,而不是自定义对象,因此您正在构建一个哈希表列表。
示范:
PS C:\> $results = @()
PS C:\> 1..3 | % {
>> $item = @{}
>> $item.A = $_ + 2
>> $item.B = $_ - 5
>> $results += $item
>> }
>>
PS C:\> $results
Name Value
---- -----
A 3
B -4
A 4
B -3
A 5
B -2
PS C:\> $results[0]
Name Value
---- -----
A 3
B -4
将您的对象创建更改为:
$item = New-Object -Type PSCustomObject -Property @{
'freePercent' = $freePercent
'freeGB' = $freeGB
'system' = $system
'disk' = $disk
}
$results += $item
所以你得到所需的对象列表:
PS C:\> $results = @()
PS C:\> 1..3 | % {
>> $item = New-Object -Type PSCustomObject -Property @{
>> 'A' = $_ + 2
>> 'B' = $_ - 5
>> v}
>> $results += $item
>> }
>>
PS C:\> $results
A B
- -
3 -4
4 -3
5 -2
PS C:\> $results[0]
A B
- -
3 -4
此外,在循环中附加到数组必然会表现不佳。最好只“回显”循环内的对象并将结果分配给列表变量:
$results = foreach (...) {
New-Object -Type PSCustomObject -Property @{
'freePercent' = $freePercent
'freeGB' = $freeGB
'system' = $system
'disk' = $disk
}
}
通过管道将列表$results
转换为 HTML 页面(如果您只想创建一个 HTML 表格而不是整个 HTML 页面,请ConvertTo-Html
使用该参数)。-Fragment
$results | ConvertTo-Html
一个更好的方法是像这样流水线化你的整个处理过程:
... | ForEach-Object {
New-Object -Type PSCustomObject -Property @{
'freePercent' = $freePercent
'freeGB' = $freeGB
'system' = $system
'disk' = $disk
}
} | ConvertTo-Html