PowerShell 是一個強大的工具,可以幫助您簡化和自動化繁瑣重複的任務。管理員通常使用 PowerShell 從系統或數據庫中提取信息,以便將所需的數據集呈現為報告。但是,文本或 CSV 文件中的報告通常缺乏 HTML 的風格和豪華的樣式。在本教程中,您將學習如何使用 PowerShell 創建一個 HTML 報告,
PowerShell 可以幫助您建立 HTML 報告,擺脫這些其他單調的格式。僅使用 PowerShell,您可以使用 HTML 為報告增添生氣,使您可以對從系統中提取的原始數據進行有意義的展示。您甚至可以應用層疊樣式表(CSS)來輕松自定義報告的佈局。
在本文中,您將學習如何使用ConvertTo-HTML
結合Out-file
命令來生成 HTML 報告。您還將學習有關 CSS 的基本腳本編寫以及它在格式化 HTML 報告設計方面的用法。
先決條件
本文將進行一步步引導。如果您打算跟隨,請確保事先設置以下先決條件。
- 所有示例都將使用 Windows 10 Build 1709 顯示,但不需要此版本
- Windows PowerShell 5.1 或更新版本或 PowerShell Core 7
- 瀏覽器,如 Internet Explorer 或 Google Chrome
使用ConvertTo-Html
創建一個基本的計算機信息報告
為了演示如何使用ConvertTo-Html
cmdlet及其參數,您將創建一個腳本,獲取計算機的基本信息(如操作系統、處理器、BIOS和可用磁盤空間),並將信息生成為HTML報告。
首先,您需要使用一個命令來收集計算機的操作系統版本信息。打開PowerShell控制台,然後複製並粘貼下面的命令,然後按Enter運行命令。
當您運行上面的命令時,Get-CimInstance
cmdlet將收集Win32_OperatingSystem
類的屬性,該類包含有關計算機操作系統的信息,該命令將返回許多結果,因此需要使用過濾器僅獲取相關信息。結果應該類似於下面顯示的屏幕截圖。

現在,您已經獲得了返回操作系統信息的命令,讓我們將結果轉換為HTML代碼。要將上述命令的結果(對象)轉換為HTML代碼,可以將Get-CimInstance
cmdlet的輸出連接到ConvertTo-Html
。在PowerShell控制台中運行下面的命令。
您可以在下面的屏幕截图中看到,PowerShell会根据Get-CimInstance
cmdlet的输出自动生成HTML标签。结果以表格格式显示,其中表头显示属性名称,例如Version、Caption、BuildNumber和Manufacturer。每一行表示一个对象,并显示每个属性的对象值。

将报告导出为HTML文件
现在您已经获得了结果并将其转换为HTML代码,让我们使用Out-file
cmdlet将报告导出为HTML文件,并在Web浏览器中查看报告。将ConvertTo-Html
cmdlet的输出导入管道,并使用-FilePath
参数指定要保存报告的路径,并使用Basic-Computer-Information-Report.html作为文件名。
打开您的PowerShell ISE或任何文本编辑器,复制下面的代码并将脚本保存为Generate-HTML-Report.Ps1文件。
在PowerShell控制台中运行Generate-HTML-Report.Ps1脚本
运行脚本后,在Web浏览器中打开Basic-Computer-Information-Report.html文件。Web浏览器会解释HTML报告的代码,并在浏览器屏幕上显示数据。报告应包含关于机器操作系统的信息,类似于下面的屏幕截图。

使用Fragment
参数合并报告
在這一點上,您現在已經擁有一個能夠獲取機器操作系統信息並將結果導出到HTML報告的腳本。您的目標是在腳本中添加更多命令,以獲取計算機的其餘信息,例如處理器、BIOS、磁盤和服務。
每個命令將以HTML代碼格式返回不同的計算機信息。為了正確地將信息合併到一個單獨的HTML報告中,請使用ConvertTo-Html
cmdlet生成的HTML代碼的Fragment
參數,僅獲取HTML代碼的表格部分。
如下圖所示,當輸出被管道傳遞到ConvertTo-Html
cmdlet時,PowerShell會生成所有基本的HTML元素。

ConvertTo-Html
cmdlet當您使用Fragment
參數時,PowerShell僅生成HTML表格元素。元素<HTML>
、<HEAD>
、<TITLE>
、<BODY>
和其他元素將被省略。結果如下所示。

現在您已經了解了上面示例中Fragment
參數的工作原理,讓我們在腳本中應用它。
腳本中的命令執行以下操作:
- 前五行命令從計算機獲取不同的信息,例如操作系統、處理器、BIOS、磁盤和服務。
- 使用
-Property
參數過濾結果,只顯示相關值 - 將值存儲在相應的變量中。每個信息都使用
-Fragment
格式化為表格 - 使用
-Body
参数将HTML表格合并为单个HTML报告 - 使用
-Title
参数将报告标题设置为“计算机信息报告” - 使用
Out-file
参数将报告导出为HTML文件
有关脚本的附加信息可在下面的代码片段的注释中找到。使用以下代码更新脚本。
在PowerShell控制台中运行脚本。您可以看到报告的输出如下所示。

使用PreContent
和PostContent
参数添加标签
此时,脚本现在可以获取计算机的所有基本信息并将结果导出为HTML。然而,正如您在上面的截图中所看到的那样,当您删除注释时,有人或报告的接收者可能很难理解内容,因为信息没有正确标记或分类。
通过使用PreContent
和PostContent
参数,您可以在每个表中添加标签,这样任何人都可以轻松辨别报告的内容。
PreContent
参数指定要添加到开头的文本<TABLE>
标签之前,PostContent
参数指定要添加到关闭的文本</TABLE>
标签之后。在这些参数中添加的值不会自动转换为HTML代码,因此您需要明确使用HTML标签,以便它们能正确呈现为HTML元素。
使用以下命令更新脚本,然后在PowerShell控制台中运行脚本。
以下是脚本中的更改:
- 添加了一个新命令来获取计算机的名称。变量
$ComputerName
的值具有<h1>
标记,以在浏览器中呈现时更改文本格式为标题。 - 使用
PreContent
参数在每个表中添加了不同的标签,并将值放在<h2>
标签中 - 使用
PostContent
参数在报告末尾添加了创建日期标签,并将值放在<p>
标签中
通过一些额外的工作,你可以看到报告的外观变得更好,报告应按照下面的方式进行更新。

使用As
参数来更改表格布局
也许,生成的HTML表格有多个列,您想要更改格式以正确显示值作为列表,您可以使用As
参数。默认情况下,当您将输出导向ConvertTo-html
时,PowerShell生成一个类似于Windows PowerShell表格格式的HTML表格。
如下面的截图所示,表头显示属性名称,如Version、Caption、Build Number和Manufacturer,每个表格行代表一个对象,并显示每个属性的对象值。

要将表格布局更改为列表,请使用参数-As
,然后跟随List。PowerShell为每个对象生成一个类似于Windows PowerShell列表格式的两列HTML表格。第一列显示属性名称,如Version、Caption、Build Number和Manufacturer,第二列显示属性值。

通过上面的示例,您现在知道如何更改表格的布局,让我们在脚本中应用As
参数,将操作系统、处理器、BIOS和磁盘信息表格的布局更改为列表格式。
使用下面的代码更新脚本。脚本中的命令行中包含了-As
参数,用于操作系统、处理器、BIOS和磁盘。
应用-As
参数后,报告应如下所示更新。操作系统、处理器、BIOS和磁盘信息的表格布局现在变更为列表。

使用CSS增强报告
讓我們將報告提升到下一個層次,並開始使用CSS添加設計。CSS用於控制HTML報告在網頁瀏覽器中的外觀。CSS控制字體、文本、顏色、背景、邊距和佈局。在本節結束時,您應該能夠看到報告如何從普通格式轉化為使用CSS的豐富格式。
在HTML中有三種應用CSS的方式,即內聯、內部和外部。對於本文,您將使用內部方法,使用HTML報告中的Header
參數。
Header
參數指定了<HEAD>
標籤的內容。<HEAD>
標籤是HTML結構的一部分,您在其中放置CSS代碼。如下面的截圖所示,當HTML代碼由ConvertTo-Html
cmdlet生成時,已包含<head>
標籤。

現在讓我們使用CSS來格式化HTML報告。首先,將下面的代碼複製並粘貼到腳本的開頭。在$header
變量中分配的CSS代碼將改變報告中放置在<h1>
標籤中的文本的格式。
接下來,使用Header
參數並分配$header
變量。使用下面的代碼更新腳本。
運行腳本後,報告應如下所示更新。請注意,唯一受影響的HTML元素是應用於“計算機名稱”標籤的<h1>
。以上步驟是如何使用CSS控制或操作HTML報告的設計的一個很好的例子。

為了添加更多的設計到其他放置在報告中的
標籤中的表格和標籤,請繼續使用下面的CSS代碼更新$header變量。
#CreationDate {

更新並運行腳本後,報告應按照下面所示的格式進行格式化-多虧了CSS,現在它在視覺上更有吸引力,看起來更專業。
在CSS中使用HTML的id和class屬性
HTML元素是整個HTML報告的構建塊,CSS使用這些元素作為選擇器,以知道樣式應該應用在哪裡。從前面的示例中,CSS代碼應用於報告中的HTML元素
,
和
。但是,如果您需要在不同的元素上應用不同的樣式怎麼辦?這就是id和class屬性發揮作用的地方。在設計HTML報告時,您可以使用id或class來定義單個元素。
請注意,HTML元素只能有一個屬於該單個元素的唯一id,而class名稱可以被多個元素使用。對於網絡開發人員來說,這些屬性不僅用於設計頁面,而且主要用於腳本編寫,以處理頁面對每個事件或請求的響應。
讓我們在HTML報告中應用id和class屬性。如下面的代碼片段中所示,創建日期標籤放置在
標籤中。

當報告生成並在瀏覽器中查看時,創建日期標籤的格式如下所示。
以id属性格式化创建日期标签-首先,将id名称“CreationDate”分配给
标签。 id名称应放置在开始标记中。 更新后的代码如下所示。
其次,创建一个新的CSS代码来格式化创建日期标签。 在CSS中声明ID时,请使用#符号后跟ID名称。 将下面的CSS代码添加到$header变量中,然后保存并在PowerShell控制台中运行脚本。

在分配id并创建一个针对
标签的id属性的新CSS代码之后,报告应更新如下所示。

让我们在“服务信息”表中应用class属性。 使用CSS将文本颜色更改为绿色**当状态的值为“Running”时,并在值为“Stopped”时使用红色。
如前所述,class属性可以分配给多个HTML元素。 在HTML报告中,保存“Running”和“Stopped”文本的元素是
在$header
变量下方添加以下CSS代码。所有带有RunningStatus类名的
#008000
的颜色,即绿色,所有带有StopStatus类名的
#ff0000
的颜色,即红色。
保存并运行脚本。报告中的服务信息表应按以下方式更新。

下面是使用CSS格式化的HTML报告的最终布局。
#以下命令將生成報告到一個HTML文件
結論
在本文中,您學到了如何將對象(結果)轉換為HTML代碼並生成HTML報告。
I hope this article gives you enough ideas on how you can create and improve your HTML report. Cheers!
將報告生成為HTML格式使您能夠應用CSS,從而更容易增強和操作報告。有許多免費的在線資源可供使用,可提升您的HTML編碼和CSS設計技能。
- 進一步閱讀
- ConvertTo-Html
- 收集有關電腦的資訊