Powershell - 帮助将散列 table 转换为 HTML

Powershell - help converting hash table to HTML

我遵循了创建散列 table 并将其转换为 HTML

的示例

这是我基于此 OP 的回答的示例:

$Summary = @{
Computers=$ADServerCount.count
DMZ=$TotalDMZ.count
No_Ping=$TotalNoPing.count
Reg_Failed=$TotalRegFailed.count
RebootPending=$TotalPendingReboot.count
RebootNotRequired=$TotalNoPatchRequired.count 
}

[PSCustomObject]$Summary | Convertto-HTML -fragment

...如果我只是 运行 $Summary,这就是结果 - 正是我所期望的:

Name                           Value                                             
----                           -----                                             
RebootNotRequired              69                                                
DMZ                            10                                                
Computers                      341                                               
Reg_Failed                                                                       
RebootPending                  137                                               
No_Ping                        80 

但是,如果我尝试转换为 HTML,通过 运行ning [PSCustomObject]$Summary | Convertto-HTML -片段,我得到这个没有上面的值:

<table>
<colgroup>
<col/>
<col/>
<col/>
<col/>
<col/>
<col/>
<col/>
</colgroup>
<tr><th>IsReadOnly</th><th>IsFixedSize</th><th>IsSynchronized</th><th>Keys</th>
<th>Values</th><th>SyncRoot</th><th>Count</th></tr>
<tr><td>False</td><td>False</td><td>False</td><td>System.Collections.Hashtable+
KeyCollection</td><td>System.Collections.Hashtable+ValueCollection</td><td>Syst
em.Object</td><td>1</td></tr>
</table>

请帮忙。谢谢

这里有更多的代码——如您所见,还有两个变量可以转换为 HTML table、$GroupPendingRebootbyOwner 和 $OlderThan30Days,但是 $Summary returns 官话。我已经运行整理了通过电子邮件发送的其余代码。

$Summary = @{
Computers=$ADServerCount.count
DMZ=$TotalDMZ.count
No_Ping=$TotalNoPing.count
Reg_Failed=$TotalRegFailed.count
RebootPending=$TotalPendingReboot.count
RebootNotRequired=$TotalNoPatchRequired.count 
} 

$ExecSummary = [PSCustomObject]$Summary | Convertto-HTML -fragment

$GroupPendingRebootbyOwner = $AllTeamsFilter | Select Computer, RebootPending, Owner | Where {$_.Rebootpending -match 'True'} | 
Select Computer, Owner | Group Owner | Sort Count -desc | Select Name, Count | Convertto-HTML -fragment

$OlderThan30Days = $AllTeamsFilter | Select Computer, RebootPending, Owner, DaysAgo | 
Where {$_.RebootPending -match 'True' -and $_.DaysAgo -notmatch 'No_Ping' -and $_.DaysAgo -notmatch 'DMZ' -and $_.DaysAgo -notmatch 'Reg_Failed' -and $_.DaysAgo -gt '31'} | 
Select Computer, Owner, DaysAgo | Sort DaysAgo -desc | Convertto-HTML -fragment

$Mailto = "emailaddress"
$EmailFrom = "emailaddress"
$SMTPServer = "smtpserver"
$HTMLmessage = @"
<font color=""black"" face=""Arial"" size=""3"">
<h1 style='font-family:arial;'><b>Windows Updates and Pending Reboot Report</b></h1>
<style type=""text/css"">body{font: .8em ""Lucida Grande"", Tahoma, Arial, Helvetica, sans-serif;}
ol{margin:0 auto;}
table{width:auto;}
thead{}
thead th{font-size:120%;text-align:left;}
th{border-bottom:2px solid rgb(79,129,189);border-top:2px solid rgb(79,129,189);padding-bottom:10px;padding-top:10px;}
tr{padding:10px 10px 10px 10px;border:none;}
#middle{background-color:#900;}
</style>
<body BGCOLOR=""white"">
<p style='font: ""Lucida Grande"", Tahoma, Arial, Helvetica, sans-serif;'><b>Executive Summary</b><br>
$ExecSummary
<p style='font: ""Lucida Grande"", Tahoma, Arial, Helvetica, sans-serif;'><b>Pending Reboots by owner ("blank" name = unassigned owner)</b><br>
$GroupPendingRebootbyOwner
<p style='font: ""Lucida Grande"", Tahoma, Arial, Helvetica, sans-serif;'><b>Last rebooted more than 30 days ago</b><br>
$OlderThan30Days
</body>
"@

在 PowerShell 2.0 中,[PSCustomObject]$Hashtable 语法将不起作用。

改用New-Object cmdlet with the -Property parameter

New-Object psobject -Property $Summary |ConvertTo-Html -Fragment

我认为对于以 HTML 形式查看哈希表来说,这应该得到更多的答案。如果你想把它出现的哈希表放在 HTML 中用于电子邮件或其他任何东西,你需要枚举每个条目的键和值。我相信此建议仅适用于 powershell V3 及更高版本,但我可能是错的。因此:

PS > @{a=2;b=3;}

Name                           Value
----                           -----
a                              2
b                              3

也可以看成:

PS > (@{a=2;b=3;}).GetEnumerator()

Name                           Value
----                           -----
a                              2
b                              3

然后可以通过(你可能不想要片段,但我在 HTML 中经常从 powershell 中使用它)进行转换:

PS > (@{a=2;b=3;}).GetEnumerator()| select Key,Value | ConvertTo-Html -Fragment
<table>
<colgroup><col/><col/></colgroup>
<tr><th>Key</th><th>Value</th></tr>
<tr><td>a</td><td>2</td></tr>
<tr><td>b</td><td>3</td></tr>
</table>