Windows PowerShell:PowerShell 在 HTML 報表

您實際上可以使用 Microsoft Windows PowerShell 指令程式來產生 HTML 報告,您可以與您的同事共用。

Don Jones

在許多的神力,Windows PowerShell 都有內建能力來產生 HTML 輸出從其各種指令程式。 直接管道 ConvertTo-HTML,指令程式輸出和管道該輸出到 Out-File 拿到的檔案。 例如:

Get-WmiObject –Class Win32_Service | 
Select-Object –property Name,State |
Where-Object –Filter { $_.StartMode –eq 'Auto' –and $_.State –ne 'Running' } | 
ConvertTo-HTML | 
Out-File BadNews.html

這樣會顯示您的服務應該要執行,但不是清單。 這是您可能會寫入到內部網路檔案伺服器,並且讓檢查每天早上您服務台。 順便一提,當輸入所有的第一次四行程式碼應該以縱線字元 (|) 結束。 最後一行以輸入鍵符號作為結束。

如果您以互動方式輸入,命令介面,您會發現若要變更的提示">>"您完成輸入第一行的管道及換行字元之後。 這就是 [確定]。 這表示 Windows PowerShell 就有待您輸入的下一行。 輸入之後的第四個也是最後一行,請按兩次 Enter 以告訴殼層在使用完且您想要執行命令。

不過,與 ConvertTo HTML cmdlet 大致相同,一個問題是輸出的它的設計只是輸出的一次處理一種類型。 如果您嘗試摘要大量的物件類型 — 服務、 處理程序或事件日誌項目,它將不會正確地格式化輸出。

如果您想要建立某種類型的彙總的報表,訣竅是使用此指令程式的不同參數。 比方說,讓我們假設您想要產生一份報告,包括先前所述 < 服務應該要執行,但不 >。您也想頁列出 100 個的最新安全性事件記錄檔項目、 伺服器正在執行的所有處理程序和伺服器本身的一些基本資訊。

您必須知道兩件事:第一個,ConvertTo HTML (這您會發現它的說明檔中) 和第二個,此指令程式並不會寫入 HTML 檔案的事實的 –Fragment 參數。

為在第一個範例中,此指令程式將 HTML 放入管線 — 它會採用不同的步驟,才能進入檔案。 看起來很麻煩,在第一個範例中,但能使我們我們要執行這項操作的能力:

$one = Get-WmiObject -class Win32_Service |
 Select-Object -property Name,State |
 Where-Object -filter { $_.Mode -eq 'Auto' -and $_.State -ne 'Running' } |
ConvertTo-HTML -Fragment 

$two = Get-EventLog -LogName Security -newest 100 |
ConvertTo-HTML -Fragment 

$three = Get-Process |
ConvertTo-HTML -Fragment 

$four = Get-WmiObject -class Win32_OperatingSystem |
 Select-Object -property Caption,BuildNumber,ServicePackMajorVersion,
 @{n='LastBootTime';e={$_.ConvertToDateTime($_.LastBootUpTime)}} |
ConvertTo-HTML -Fragment 

ConvertTo-HTML -Body "$one $two $three $four" -Title "Server Status" |
 Out-File c:\status.html

鍵入時,在中,請結束每行前加上管道字元,但只要以傳回一個換行符號的最後一行。 如此就會執行四個不同的命令,其中每一個已擷取資訊並將其轉換成 HTML 片段中的特定部分。

HTML 片段是 HTML 的一長串的並不會包含讓完成網頁的標頭標記。 在最後一個步驟中,我只是使 HTML 卡紙到完成網頁的本文,且輸出至檔案。

請嘗試執行的請參閱您的想法。 它是很單純。 它是 Windows PowerShell 是唯一的 Microsoft 產品,將輸出 HTML,"清除"卻不會加入任何樣式或格式設定是一個玩笑吧。 缺點是 「 初始狀態 」 HTML 是很枯燥。 這是故意。 您應該要讓它更有吸引力使用個別 CSS 檔案。

將內 HTML,您將主要格式套用至 HTML <td> 標記。 其中包含的資料表資料列。 <th> 標籤包含資料表的欄標題。 <body> 標籤可以為整個頁面提供的預設格式。 建立一個名為 C:\Style.css 的文字檔案,然後輸入下列:

body {
font-family:Calibri;
 font-size:10pt;
}
th { 
background-color:black;
color:white;
}
td {
 background-color:#666;
color:black;
}
Now, I’ll simply modify my lastConvertTo-HTML command as follows:
ConvertTo-HTML -Body "$one $two $three $four" -Title "Server Status" -CssUri c:\style.css |
 Out-File c:\status.html

應該採取兩行文字來輸入,而第一行同樣地,結束於縱線字元。 請嘗試執行的。 您可以找到更多得很好格式化輸出。 不幸的是,CSS 不提供用來將樣式套用至替代資料表資料列、 至少不在 Windows PowerShell 產生 HTML 的方式輸出。

您可以使用 ConvertTo HTML 的 –PreContent 和 –PostContent 參數來新增區段標題和任何其他文字。 這有助於讓報表更具可讀性。 它會顯示傳遞至 –PreContent 表格前任何字串。 傳送至 –PostContent 的文字會顯示在表格之後。 您可以找到這些藉由執行幫助 ConvertTo-HTML 範例
命令介面中的 –example。

這是一個很好的範例,告訴您可以使用 Windows PowerShell 產生很有幫助報表就能與您的同事共享。 它不會花很多額外的工作,以建立了尋找 HTML 輸出。 藉由將網頁儲存到內部網路檔案伺服器,您使它們同事、 經理和其他人可以存取者可能會需要它們。

Don Jones

Don Jones 是 Microsoft MVP 獎收件者及作者午餐"了解 Windows PowerShell 中月份的食譜"機信息 (Manning 的發行集安全,2010年),活頁簿設計來幫助系統管理員會變得有效率地使用 Windows PowerShell。瓊斯也提供公用及現場 Windows PowerShell 訓練。在他的網站透過網站與他聯絡ConcentratedTech.com

相關的內容