Windows PowerShell: Windows PowerShell で HTML 形式のレポートを作成する

Windows PowerShell のコマンドレットを使用して、同僚と共有できる HTML 形式のレポートを作成することが可能です。

Don Jones

Windows PowerShell には、多くの機能が備わっていますが、その 1 つとして、さまざまなコマンドレットで 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

この例では、実行すべきなのに実行されていないサービスの一覧が HTML 形式のレポートとして返されます。このような情報は、イントラネットのファイル サーバーに書き込んで、ヘルプ デスクのスタッフが毎朝確認するようにしたいと考えるかもしれません。ところで、このスクリプトを入力するときには、先頭の 4 行はパイプライン文字 (|) で終わる必要がありますが、最後の行は、改行で終わっています。

このコードをシェルで対話的に入力する場合、1 行目のコードのパイプ文字を入力して、Enter キーを押すと、プロンプトが >> に変わることに気付くと思います。これは何の問題もありません。これは Windows PowerShell が次のコード行が入力されるのを待機していることを表しているからです。4 行目のコードと 5 行目のコードを入力したら、Enter キーを 2 回押して、コードの入力が完了したことと、シェルでコマンドを実行する必要があることを通知します。

ただし、ConvertTo-HTML コマンドレットには 1 つ問題があります。それは、このコマンドレットが、一度に 1 種類の出力を処理するようにしか設計されていないことです。サービス、プロセス、イベント ログ エントリなど、複数の種類のオブジェクトを指定すると、出力の書式が適切に設定されません。

総合的なレポートを作成するには、コマンドレットに用意されているさまざまなパラメーターを使用する必要があります。たとえば、先ほどの "実行されているべきなのに実行されていないサービス" を含むレポートを作成する必要があるとしましょう。また、このレポートには、セキュリティ イベント ログの最新のエントリ 100 件、サーバーで実行されているすべてのプロセス、サーバーに関する基本情報の一覧も含める必要があるとします。

ここで把握しておくべきことが 2 つあります。1 つは ConvertTo-HTML コマンドレットの –Fragment パラメーター (詳細については、このコマンドレットのヘルプ ファイルで確認できます) で、もう 1 つは、このコマンドレットが HTML フラグメントをファイルに書き込むわけではないということです。

1 つ目の例と同様に、このコマンドレットでは HTML をパイプラインに配置します (HTML フラグメントをファイルを書き込むのには別の手順を使用します)。1 つ目の例では、面倒に思われましたが、この手順を使用することで、次の処理が可能になります。

$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

このコードを入力するときには、各行の最後にパイプ文字を入力するようにします。ただし、最後の行は例外で、改行で終わるようにします。ここでは 4 つの個別のコマンドを実行しています。各コマンドでは、ある特定の情報を取得して、取得した情報を HTML フラグメントに変換しています。

HTML フラグメントは、完全なページを構成する Head タグを含まない、HTML の長い文字列です。最後の手順では、この HTML フラグメントを完全な HTML ページの Body に詰め込んで、ファイルに出力しているだけです。

コマンドを実行して、体感してみてください。レポートは、かなりシンプルです。冗談ではありますが、Windows PowerShell は、スタイルや書式を追加せずにクリーンな HTML を出力する唯一のマイクロソフト製品だと言われています。欠点は、クリーンな HTML は、とても退屈だと言うことです。ですが、これは意図的な仕様です。この HTML は、別途 CSS ファイルを用意して、魅力的な外観にする前提で作成されています。

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;
}

今度は、最後の ConvertTo-HTML コマンドを次のように変更します。

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

入力が必要なのは 2 行です。ここでも 1 行目はパイプ文字で終える必要があります。このコードを実行してみてください。先ほどよりも見た目の整ったレポートが表示されます。残念ながら、CSS には、テーブルの行にスタイルを適用する方法が用意されていません (少なくとも、Windows PowerShell が生成する HTML 形式の出力に関しては、そのような方法は用意されていません)。

ConvertTo-HTML コマンドレットの –PreContent パラメーターと –PostContent パラメーターを使用して、セクションの見出しやその他のテキストを追加することができます。これらのパラメーターを使用すると、レポートがさらに見やすくなります。–PreContent パラメーターに渡した文字列は、テーブルの前に表示され、–PostContent パラメーターに渡したテキストは、テーブルの後に表示されます。これらのパラメーターの使用例は、「Help ConvertTo-HTML –example」というコマンドを実行して確認できます。

これは Windows PowerShell を使用して、同僚と共有できる有益なレポートを生成する好例です。それほど多くの作業を必要とすることなく、そこそこ良い外観の HTML 形式のレポートを作成できます。作成したレポートをイントラネットのファイル サーバーに保存すると、同僚や上長など、その情報を必要とするユーザーがアクセスできます。

Don Jones

Don Jones は、Microsoft MVP の受賞者で、『Learn Windows PowerShell in a Month of Lunches』(Manning Publications Co.、2010 年) の著者でもあります。この書籍は、管理者が Windows PowerShell を効率的に使用できるようにすることを目的としています。また、一般ユーザーを対象にオンサイトの Windows PowerShell トレーニングも開催しています。Don に対するお問い合わせについては、彼の Web サイト (ConcentratedTech.com、英語) を参照してください。

関連コンテンツ