
かつて山市良と呼ばれたおじさんのブログ
セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ メモ. OSConfig対応状況確認スクリプトの改良版(CSV出力)
2025年02月07日配信
2025年04月25日更新
執筆者:山内 和朗
Windows Server 2025の新機能「OSConfig」は、PowerShellのMicrosoft.OSConfigモジュールが提供するセキュリティベースラインの展開と維持を簡素化する機能です。前回のメモでは、BOM for Windowsでの監視を想定したPowerShellスクリプトを紹介しました。今回はその改良版、ログ出力のCSV(カンマ区切りテキスト)対応版です。
前回のメモで紹介したPowerShellスクリプト「audit-windowsbaseline.ps1」「audit-defenderantivirus.ps1」「audit-securedcore.ps1」「audit-azurelocal.ps1」は、Microsoft.OSConfigモジュールのGet-OSConfigDesiredConfigurationコマンドレットを使用して、現在のシステムの構成がMicrosoft推奨のセキュリティベースラインに準拠しているかどうかの比率(0~100%)で返し、同時に指定したパスにコンプライアンス状況の一覧をテキストログの形式で出力するものでした。そして、コンプライアンス状況の一覧の作成には、以下のドキュメントの「コンプライアンスを確認する」で説明されているコマンドラインをほとんどそのまま利用しました。そのコマンドライン、-AutoSize -Wrapを含むFormat-Table(FT)はコンソール出力用のものであり、その出力結果をファイルにリダイレクトする形でテキストログ化しました。
Windows Server 2025 セキュリティ ベースラインの管理 > コンプライアンスを確認する|Windows Server(Microsoft Learn)
このテキストログですが、Out-Fileに指定した-widthパラメーターによりできるだけ1行1レコードになるようにしました。しかし、最終列のReasonの文字列が長い場合、1レコードが複数行に分かれてしまいます(画面1)。見やすさ重視のログのようにも見えますが、実は、単にコーディングの手間を省いて、ドキュメントのコマンドラインをそのまま流用した結果に過ぎません。
画面1 前回のスクリプトが出力するテキストログは、1行1レコードではない
Get-OSConfigDesiredConfigurationコマンドレットが返すオブジェクトは、「Name(名前)」「Description(説明)」「DataType(データ型)」「Value(値)」「Compliance(コンプライアンス)」の5つのプロパティから成り、「Compliance(コンプライアンス)」は「Status(状況)」「Reason(理由)」「Severity(重要度)」から成る連想配列になっています。JSONに変換すると(ConvertTo-Json)、その構造が分かりやすいかもしれません(画面2)。
画面2 Get-OSConfigDesiredConfigurationコマンドレットが返すオブジェクトのデータ構造
ログ出力部分のコードを以下のように書き換えることで、比較的簡単にCSV形式で出力できました(画面3)。ログをCSV形式で出力することで、Excelで扱えるようになりますし、他のアプリや監視ツールとの連携もしやすくなるはずです。なお、今回は前回のメモとは異なり、出力幅が制限されるFormat-Table(FT)を使用してません。そのため、CSV形式のログファイルには、Get-OSConfigDesiredConfigurationコマンドレットで取得可能なすべての値を出力するようにしました。
$auditScenario = "SecurityBaseline/WS2025/WorkgroupMember" $results = (Get-OSConfigDesiredConfiguration -Scenario $auditScenario) $results |Select Name,Description,DataType,Value, @{ Name = "Status"; Expression={$_.Compliance.Status} }, @{ Name = "Severity"; Expression={$_.Compliance.Severity} }, @{ Name = "Reason"; Expression={$_.Compliance.Reason} }|Export-CSV -Path results.csv -NoTypeInformation |
画面3 Get-OSConfigDesiredConfigurationコマンドレットの実行結果をCSV形式でファイル出力する(Excelのテーブル形式はCSVを開いた後に設定したもの)
以下のスクリプトは、上記の変更を加えた前回メモのスクリプトのCSV対応版です。
[audit-windowsbaseline2.ps1]
[audit-defenderantivirus2.ps1]
[audit-securedcore2.ps1]
[audit-securedcorestate2.ps1](上のスクリプトではなく、こちらを推奨)
[audit-azurelocal2.ps1]
各セキュリティベースラインの準拠状況(Compliant、NotCompliant)の理由(レジストリ設定など)については、vol.80で説明したように、次の場所にある最新データ(CSV形式)で確認してください。
microsoft/osconfig|GitHub
関連:
vol.80 CIS対応のセキュリティ態勢を簡単に導入、維持できる新機能「OSConfig」|Windows Server 2025大特集(17)
メモ. OSConfigのセキュリティベースライン対応状況の確認をスクリプト化する
Windows Server 2025大特集(1)||...|(17)|メモ