遍历一组 powershell 自定义对象并输出到 html
Iterate through an array of powershell custom objects and output to html
我有一个数组:
$results =@()
然后我通过 wmi 使用自定义逻辑循环并创建我添加到数组中的自定义对象,如下所示:
$item= @{}
$item.freePercent = $freePercent
$item.freeGB = $freeGB
$item.system = $system
$item.disk = $disk
$results += $item
我知道想要结果数组中的一些东西,比如转换为 html .
我可以使用 foreach 和自定义 html 来完成,但我想使用 convertto-html...
P.S。我可以打印出这样的数据,但只有这样:.
foreach($result in $results) {
$result.freeGB
}
您不是在创建自定义对象,而是在创建哈希 [=15=]。
假设您至少有 V3:
[PSCustomObject]@{
freePercent = $freePercent
freeGB = $freeGB
system = $system
disk = $disk
}
自定义对象的创建并不像您想象的那样有效。代码
$item= @{}
$item.freePercent = $freePercent
$item.freeGB = $freeGB
$item.system = $system
$item.disk = $disk
创建一个散列table,而不是自定义对象,因此您正在构建一个散列table列表。
示范:
PS C:\> <b>$results = @()</b>
PS C:\> <b>1..3 | %{</b>
>> <b>$item = @{}</b>
>> <b>$item.A = $_ + 2</b>
>> <b>$item.B = $_ - 5</b>
>> <b>$results += $item</b>
>> <b>}</b>
>>
PS C:\> <b>$结果</b>
名称值
---- -----
一个 3
乙-4
一个 4
乙-3
一个 5
乙-2
PS C:\> <b>$结果[0]</b>
名称值
---- -----
一个 3
B -4
将您的对象创建更改为:
$item = New-Object -Type PSCustomObject -Property @{
'freePercent' = $freePercent
'freeGB' = $freeGB
'system' = $system
'disk' = $disk
}
$results += $item
所以你得到了想要的对象列表:
PS C:\> <b>$results = @()</b>
PS C:\> <b>1..3 | %{</b>
>> <b>$item = New-Object -Type PSCustomObject -属性 @{</b>
>> <b>'A' = $_ + 2</b>
>> <b>'B' = $_ - 5</b>
>> v}
>> <b>$results += $item</b>
>> <b>}</b>
>>
PS C:\> <b>$结果</b>
甲乙
- -
3 -4
4 -3
5 -2
PS C:\> <b>$结果[0]</b>
甲乙
- -
3 -4
此外,在循环中追加到数组必然会表现不佳。最好只 "echo" 循环内的对象并将结果分配给列表变量:
$results = foreach (...) {
New-Object -Type PSCustomObject -Property @{
'freePercent' = $freePercent
'freeGB' = $freeGB
'system' = $system
'disk' = $disk
}
}
通过管道将 $results
导入 ConvertTo-Html
以将列表转换为 HTML 页面(如果您只想创建 HTML,请使用参数 -Fragment
table 而不是整个 HTML 页)。
$results | ConvertTo-Html
更好的方法是像这样流水线处理整个过程:
... | ForEach-Object {
New-Object -Type PSCustomObject -Property @{
'freePercent' = $freePercent
'freeGB' = $freeGB
'system' = $system
'disk' = $disk
}
} | ConvertTo-Html
我有一个数组:
$results =@()
然后我通过 wmi 使用自定义逻辑循环并创建我添加到数组中的自定义对象,如下所示:
$item= @{}
$item.freePercent = $freePercent
$item.freeGB = $freeGB
$item.system = $system
$item.disk = $disk
$results += $item
我知道想要结果数组中的一些东西,比如转换为 html .
我可以使用 foreach 和自定义 html 来完成,但我想使用 convertto-html...
P.S。我可以打印出这样的数据,但只有这样:.
foreach($result in $results) {
$result.freeGB
}
您不是在创建自定义对象,而是在创建哈希 [=15=]。
假设您至少有 V3:
[PSCustomObject]@{
freePercent = $freePercent
freeGB = $freeGB
system = $system
disk = $disk
}
自定义对象的创建并不像您想象的那样有效。代码
$item= @{}
$item.freePercent = $freePercent
$item.freeGB = $freeGB
$item.system = $system
$item.disk = $disk
创建一个散列table,而不是自定义对象,因此您正在构建一个散列table列表。
示范:
PS C:\> <b>$results = @()</b>
PS C:\> <b>1..3 | %{</b>
>> <b>$item = @{}</b>
>> <b>$item.A = $_ + 2</b>
>> <b>$item.B = $_ - 5</b>
>> <b>$results += $item</b>
>> <b>}</b>
>>
PS C:\> <b>$结果</b>
名称值
---- -----
一个 3
乙-4
一个 4
乙-3
一个 5
乙-2
PS C:\> <b>$结果[0]</b>
名称值
---- -----
一个 3
B -4
将您的对象创建更改为:
$item = New-Object -Type PSCustomObject -Property @{
'freePercent' = $freePercent
'freeGB' = $freeGB
'system' = $system
'disk' = $disk
}
$results += $item
所以你得到了想要的对象列表:
PS C:\> <b>$results = @()</b>
PS C:\> <b>1..3 | %{</b>
>> <b>$item = New-Object -Type PSCustomObject -属性 @{</b>
>> <b>'A' = $_ + 2</b>
>> <b>'B' = $_ - 5</b>
>> v}
>> <b>$results += $item</b>
>> <b>}</b>
>>
PS C:\> <b>$结果</b>
甲乙
- -
3 -4
4 -3
5 -2
PS C:\> <b>$结果[0]</b>
甲乙
- -
3 -4
此外,在循环中追加到数组必然会表现不佳。最好只 "echo" 循环内的对象并将结果分配给列表变量:
$results = foreach (...) {
New-Object -Type PSCustomObject -Property @{
'freePercent' = $freePercent
'freeGB' = $freeGB
'system' = $system
'disk' = $disk
}
}
通过管道将 $results
导入 ConvertTo-Html
以将列表转换为 HTML 页面(如果您只想创建 HTML,请使用参数 -Fragment
table 而不是整个 HTML 页)。
$results | ConvertTo-Html
更好的方法是像这样流水线处理整个过程:
... | ForEach-Object {
New-Object -Type PSCustomObject -Property @{
'freePercent' = $freePercent
'freeGB' = $freeGB
'system' = $system
'disk' = $disk
}
} | ConvertTo-Html