PowerShellは、面倒で繰り返しの多いタスクを簡素化し自動化するのに役立つ強力なツールです。管理者は通常、データセットがレポートとして表示される必要がある場合に、システムやデータベースから情報を抽出するためにPowerShellを使用します。しかし、テキストやCSVファイルのレポートは通常、HTMLの豪華なスタイリングに欠けています。このチュートリアルでは、PowerShellを使用してHTMLレポートを作成する方法を学びます。
PowerShellを使用すると、他の平凡な形式から離れて、HTMLレポートを作成することができます。単にPowerShellだけを使って、システムから抽出した生データの意味のあるプレゼンテーションを作成することができます。さらに、カスケーディングスタイルシート(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
コマンドレットとそのパラメータを使用する方法を示すために、マシンの基本情報(オペレーティングシステム、プロセッサ、BIOS、および利用可能なディスク容量など)を取得し、その情報をHTMLレポートに生成するスクリプトを作成します。
まず、マシンからオペレーティングシステムバージョンの情報を収集するコマンドから始めます。PowerShellコンソールを開き、以下のコマンドをコピーして貼り付け、Enterキーを押してコマンドを実行します。
上記のコマンドを実行すると、Get-CimInstance
コマンドレットがWin32_OperatingSystem
クラスのプロパティを収集し、マシンのオペレーティングシステムに関する情報を含む結果が返されます。結果は以下のスクリーンショットに似ているはずです。

オペレーティングシステムの情報を返すコマンドを取得したので、次はその結果をHTMLコードに変換しましょう。上記のコマンドの結果(オブジェクト)をHTMLコードに変換するには、Get-CimInstance
コマンドレットの出力をConvertTo-Html
にパイプで渡すことができます。PowerShellコンソールで以下のコマンドを実行します。
以下のスクリーンショットで、PowerShellがGet-CimInstance
コマンドレットの出力から自動的にHTMLタグを生成しているのが見えます。結果はテーブル形式で表示され、テーブルのヘッダーにはバージョン、キャプション、ビルド番号、メーカーなどのプロパティ名が表示されます。各テーブル行はオブジェクトを表し、各プロパティのオブジェクトの値が表示されます。

レポートをHTMLファイルにエクスポート
結果を取得してHTMLコードに変換したので、Out-file
コマンドレットを使用してレポートをHTMLファイルにエクスポートし、ウェブブラウザでレポートを表示しましょう。ConvertTo-Html
コマンドレットの出力をパイプで渡し、-FilePath
パラメータを使用してレポートを保存するパスを指定し、ファイル名にはBasic-Computer-Information-Report.htmlを使用します。
PowerShell ISEまたは任意のテキストエディタを開き、以下のコードをコピーしてスクリプトをGenerate-HTML-Report.Ps1というファイル名で保存します。
PowerShellコンソールでGenerate-HTML-Report.Ps1スクリプトを実行します。
スクリプトを実行した後、ウェブブラウザでBasic-Computer-Information-Report.htmlファイルを開きます。ウェブブラウザはHTMLレポートのコードを解釈し、データをブラウザ画面に表示します。レポートには、以下のスクリーンショットに似たマシンのオペレーティングシステムに関する情報が含まれているはずです。

Fragment
パラメータを使用してレポートを結合する
この時点で、マシンのオペレーティングシステムの情報を取得し、結果をHTMLレポートにエクスポートするスクリプトができました。目標は、プロセッサ、BIOS、ディスク、およびサービスなど、コンピュータの残りの情報を取得するためにスクリプトにさらにコマンドを追加することです。
各コマンドは、HTMLコードとしてフォーマットされた異なるコンピュータ情報を返します。すべての情報を1つのHTMLレポートに適切に統合するために、ConvertTo-Html
コマンドレットで生成されるHTMLコードのテーブル部分のみを取得するために、Fragment
パラメータを使用してください。
以下のスクリーンショットで確認できるように、PowerShellはConvertTo-Html
コマンドレットに出力がパイプされると、すべての基本的なHTML要素を生成します。

ConvertTo-Html
cmdletFragment
パラメータを使用すると、PowerShellはHTMLのテーブル要素のみを生成します。要素<HTML>
、<HEAD>
、<TITLE>
、<BODY>
などは省略されます。結果は以下に示されています。

上記の例からFragment
パラメータの動作方法をすでに知っているので、それをスクリプトに適用しましょう。
以下のスクリプトのコマンドは、次の操作を実行します:
- 最初の5行のコマンドは、オペレーティングシステム、プロセッサ、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のリスト形式に似た2列のHTMLテーブルを各オブジェクトに対して生成します。最初の列にはVersion、Caption、Build Number、Manufacturerなどのプロパティ名が表示され、2番目の列にはプロパティの値が表示されます。

上記の例から、テーブルのレイアウトを変更する方法がわかりましたので、スクリプトにAs
パラメータを適用して、オペレーティングシステム、プロセッサ、BIOS、ディスク情報のテーブルのレイアウトをリスト形式に変更しましょう。
以下のコードでスクリプトを更新してください。スクリプトには、オペレーティングシステム、プロセッサ、BIOS、ディスクのコマンドラインに-As
パラメータが含まれています。
コードに-As
パラメータを適用した後、レポートは以下のように更新されます。オペレーティングシステム、プロセッサ、BIOS、およびディスク情報のテーブルレイアウトはリストに変更されました。

CSSを使用してレポートを強化
レポートを次のレベルに引き上げ、CSSを使用してデザインを追加しましょう。CSSは、HTMLレポートがウェブブラウザでどのように表示されるかを制御するために使用されます。CSSはフォント、テキスト、色、背景、余白、レイアウトを制御します。このセクションの終わりには、CSSを使用してレポートがプレーンからリッチな形式に変換される様子を見ることができるはずです。
CSSをHTMLに適用する方法には、インライン、内部、外部の3つの方法があります。この記事では、HTMLレポートでHeader
パラメータを使用して内部方法を適用します。
Header
パラメータは、<HEAD>
タグの内容を指定します。 <HEAD>
タグは、CSSのコードを配置するHTMLの構造の一部です。以下のスクリーンショットで示すように、<head>
タグは、ConvertTo-Html
cmdletによって生成されるHTMLコードにすでに含まれています。

では、CSSを使用してHTMLレポートの書式を指定しましょう。最初に、以下のコードをコピーしてスクリプトの先頭に貼り付けます。 $header
変数に割り当てられたCSSコードは、レポート内の<h1>
タグ内に配置されたテキストの書式を変更します。
次に、Header
パラメータを使用して$header
変数を割り当てます。以下のコードを使用してスクリプトを更新します。
スクリプトを実行すると、レポートが以下のように更新されるはずです。影響を受けるHTML要素は<h1>
のみであり、これは「コンピュータ名」ラベルに適用されていることに注意してください。上記の手順は、CSSを使用してHTMLレポートのデザインを制御または操作する方法の素晴らしい例です。

他のテーブルやラベルにデザインを追加するためには、レポート内の<h2>
タグに配置されたものに対して、以下のCSSコードを使用して$header
変数を更新し続けてください。
#CreationDate {

スクリプトを更新して実行すると、レポートは以下のようにフォーマットされます。CSSのおかげで、視覚的に魅力的でプロフェッショナルな外観になります。
CSSでHTMLのIDとクラス属性を使用する
HTML要素は、HTMLレポート全体の構成要素であり、CSSはこれらの要素をセレクタとして使用して、スタイルを適用する場所を知ります。前の例では、CSSコードがレポートのHTML要素
h1
、h2
、およびtable
に適用されました。しかし、異なる要素に異なるスタイルを適用する必要がある場合はどうでしょうか?そこで、idとclass属性が登場します。HTMLレポートの設計では、単一の要素を定義するためにidまたはclassのいずれかを使用することができます。
HTML要素は、その単一の要素に属する一意のidを1つだけ持つことができますが、クラス名は複数の要素で使用することができます。ウェブ開発者にとって、これらの属性はページのデザインだけでなく、主にスクリプトで使用され、ページが各イベントやリクエストにどのように応答するかを制御するために使用されます。
HTMLレポートでidとclass属性を適用してみましょう。以下のコードスニペットでは、作成日のラベルが<p>
タグに配置されていることがわかります。

レポートが生成され、ブラウザで表示されると、作成日のラベルが以下のようにフォーマットされます。
作成日ラベルのフォーマットにid属性を使用するには、まず、<p>
タグに’id’属性名を’CreationDate‘として割り当てます。id名は開始タグの内側に配置する必要があります。更新されたコードは以下の通りです。
次に、作成日ラベルのフォーマットのための新しいCSSコードを作成します。CSSでIDを宣言する際には、’#’シンボルに続けてID名を使用します。以下のCSSコードを$header
変数に追加し、スクリプトをPowerShellコンソールで保存して実行します。

id属性を割り当てて<p>
タグのid属性を対象とする新しいCSSコードを作成した後、レポートは以下のように更新されるはずです。

サービス情報テーブルにclass属性を適用しましょう。CSSを使用して、状態の値がRunningの場合はテキストの色を緑に、Stoppedの場合は赤に変更します。
先ほど述べたように、class属性は複数のHTML要素に割り当てることができます。HTMLレポートでは、RunningとStoppedのテキストを保持する要素は<td>
タグです。PowerShellの-Replace
メソッドを使用して、Services informationテーブル内のすべての<td>
タグにクラス名RunningStatusとStopStatusを割り当てます。以下のコマンドを使用してスクリプトを更新します。
以下のCSSコードを$header
変数の下に追加してください。クラス名がRunningStatusのすべての<td>タグの16進数値は#008000
(緑色に相当)になります。また、クラス名がStopStatusのすべての<td>タグの16進数値は#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!