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>
我遵循了创建散列 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>