[英]PowerShell get applied windows updates HTML report
I have a PowerShell script that get's applied windows updates from 2003 servers and outputs the result to a .HTML report. 我有一个PowerShell脚本,该脚本从2003服务器获取应用的Windows更新,并将结果输出到.HTML报告。 What I like help on is how can I get each hotfix to list on a separate line instead of word-wrapped as in the below example? 我需要帮助的是如何使每个修补程序在单独的行中列出,而不是像下面的示例中那样用单词包装?
Below is the script 下面是脚本
$servers = Get-Content 'c:\temp\servers.txt'
$total = $null
$html = @'
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>
<title> Server Updates Report</title>
<STYLE TYPE="text/css">
<!--
td {
font-family: Tahoma;
font-size: 13px;
border-top: 1px solid #999999;
border-right: 1px solid #999999;
border-bottom: 1px solid #999999;
border-left: 1px solid #999999;
padding-top: 0px;
padding-right: 0px;
padding-bottom: 0px;
padding-left: 0px;
}
body {
margin-left: 5px;
margin-top: 5px;
margin-right: 0px;
margin-bottom: 10px;
table {
border: thin solid #000000;
}
-->
</style>
</head>
<body>
<table width='100%'>
<tr bgcolor='#CCCCCC'>
<td colspan='7' height='25' align='center'><strong><font color="#003399" size="4" face="tahoma">Server Patch Report </font></strong></td>
</tr>
</table>
<table width='100%'><tbody>
<tr bgcolor=#CCCCCC>
<td width='20%' height='15' align='center'> <strong> <font color="#003399" size="2" face="tahoma" >Server Name</font></strong></td>
<td width='80%' height='15' align='center'> <strong> <font color="#003399" size="2" face="tahoma" >Patching Information</font></strong></td>
</tr>"
</table>
<table width='100%'><tbody>
'@
foreach($server in $servers){
$date = Get-Date '24/10/2013'
$Updates = gwmi win32_ntlogevent -filter "logfile='system' and sourcename='ntservicepack'" -ComputerName $server | Where {$_.ConvertToDateTime($_.TimeWritten) -gt $date}
$newobj = new-object psobject
$newobj | add-member -membertype noteproperty -name "Server" -value $server
$newobj | add-member -membertype noteproperty -name "Updates" -value $Updates.Message
$htmlserver = $newobj.Server
$htmlupdates = $newobj.Updates
$current = " <tr bgcolor=#CCCCCC>
<td width='20%' align='center'>$htmlserver</td>
<td width='80%' align='left'>$htmlupdates</td>
</tr>
"
$total += $current
}
$HTMLEnd = @"
</div>
</body>
</html>
"@
$MainHtml= $html + $total + $HTMLEnd
$MainHtml | Out-File "c:\temp\Report.html" -Append
I added a foreach-loop that goes through every update-event and removed the newobj
code which seemed redundant. 我添加了一个遍历每个更新事件的foreach循环,并删除了似乎多余的newobj
代码。 Does this work? 这样行吗?
$servers = Get-Content 'c:\temp\servers.txt'
$total = $null
$html = @'
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>
<title> Server Updates Report</title>
<STYLE TYPE="text/css">
<!--
td {
font-family: Tahoma;
font-size: 13px;
border-top: 1px solid #999999;
border-right: 1px solid #999999;
border-bottom: 1px solid #999999;
border-left: 1px solid #999999;
padding-top: 0px;
padding-right: 0px;
padding-bottom: 0px;
padding-left: 0px;
}
body {
margin-left: 5px;
margin-top: 5px;
margin-right: 0px;
margin-bottom: 10px;
table {
border: thin solid #000000;
}
-->
</style>
</head>
<body>
<table width='100%'>
<tr bgcolor='#CCCCCC'>
<td colspan='7' height='25' align='center'><strong><font color="#003399" size="4" face="tahoma">Server Patch Report </font></strong></td>
</tr>
</table>
<table width='100%'><tbody>
<tr bgcolor=#CCCCCC>
<td width='20%' height='15' align='center'> <strong> <font color="#003399" size="2" face="tahoma" >Server Name</font></strong></td>
<td width='80%' height='15' align='center'> <strong> <font color="#003399" size="2" face="tahoma" >Patching Information</font></strong></td>
</tr>"
</table>
<table width='100%'><tbody>
'@
foreach($server in $servers){
$date = Get-Date '24/10/2013'
gwmi win32_ntlogevent -filter "logfile='system' and sourcename='ntservicepack'" -ComputerName $server | Where {$_.ConvertToDateTime($_.TimeWritten) -gt $date} | ForEach-Object {
$current = " <tr bgcolor=#CCCCCC>
<td width='20%' align='center'>$server</td>
<td width='80%' align='left'>$($_.Message)</td>
</tr>
"
$total += $current
}
}
$HTMLEnd = @"
</div>
</body>
</html>
"@
$MainHtml= $html + $total + $HTMLEnd
$MainHtml | Out-File "c:\temp\Report.html" -Append
Take a look at using the ConvertTo-Html
cmdlet using the -Fragment
and -As LIST
parameters. 看看如何使用-Fragment
和-Fragment
-As LIST
参数的ConvertTo-Html
cmdlet。
If the messages are in an array, it will convert it to t HTML you want 如果消息在数组中,它将把它转换成您想要的HTML
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.