はじめに
会社のパソコンで、特定のアプリが起動できなくて困ったことはないでしょうか?
セキュリティ対策のために導入したAppLockerですが、どのルールが適用されているか調べるのは意外と面倒です。
私も以前、本番環境で必要なツールが突然ブロックされ、原因となっているポリシーを特定するまでに何時間もかかったことがあります。
そのときは、画面を何度もクリックして確認していたため、とても時間がかかりました。
この記事では、PowerShellを使ってローカルのAppLockerポリシーをXML形式や表形式で素早く確認し、一覧出力する手順を解説します。
この記事を読めば、現在適用されているルールが一目でわかるようになり、トラブルシューティングの時間を大幅に減らすことができます。
なぜAppLockerのルール確認をPowerShellでおこなうべきなのか?
AppLockerのルールは、グループポリシーエディター(gpedit.msc)などから画面で確認できます。
しかし、現場の運用管理において、画面での確認には以下のような課題があります。
- ルール数が多いときに、スクロールして一つずつ探すのが大変なこと
- 適用されている設定をレポートとして出力し、共有しにくいこと
- 複数のパソコンの設定が同一か、手動で比較するのが難しいこと
PowerShellを使えば、コマンドを一行実行するだけで、適用されているすべてのルールを瞬時に取得できます。
さらに、テキストやCSVファイルに出力できるため、設定の棚卸しや監査対応も効率的におこなえます。
Get-AppLockerPolicyによるポリシー確認スクリプト
ローカルPCに適用されているAppLockerポリシーを取得するには、Get-AppLockerPolicy コマンドを使います。
まずは、現在有効なポリシーを取得して、わかりやすい表形式で出力する基本的なコードを紹介します。
# --------------------------------------------------
# AppLockerポリシー取得とルール一覧表示スクリプト
# --------------------------------------------------
# ローカルに適用されているポリシーを一時取得
$Policy = Get-AppLockerPolicy -Effective
# ルールの種類(実行可能ファイル、インストーラー、スクリプトなど)を定義
$RuleTypes = "ExecutableRules", "InstallerRules", "ScriptRules", "PackagedAppRules"
# 各ルールの詳細を抽出して表形式で出力
foreach ($Type in $RuleTypes) {
$Rules = $Policy.$Type
if ($Rules) {
Write-Host "--- ルールの種類: $Type ---" -ForegroundColor Green
$Rules | Select-Object Name, Action, UserOrGroupSid | Format-Table -AutoSize
}
}
このスクリプトを実行すると、ルール名が画面に表示されます。
許可や拒否のルールと、対象のユーザーが一覧で確認できます。
画面でスクロールして探すよりも、必要な情報がコンパクトにまとまって確認しやすくなります。
実運用で役立つポリシーのエクスポート手順
設定のバックアップやトラブルシューティングのために、取得したポリシーをファイルに保存する方法を解説します。
XML形式での保存とバックアップ
AppLockerのポリシーは、XML形式で保存しておくことで、別のパソコンにインポートして同じ設定を適用できます。
以下のコマンドを実行すると、現在のポリシーをXMLファイルとしてデスクトップに書き出します。
# 適用中のポリシーをXMLファイルにエクスポート
Get-AppLockerPolicy -Effective -Xml > "$HOME\Desktop\AppLockerPolicy.xml"
このXMLファイルをテキストエディターで開くことで、適用されている設定の詳細な構造をテキストデータとして確認できます。
CSV形式でのルール一覧出力
監査用や設定の棚卸し資料として、Excelで開けるCSVファイルにルールの詳細を出力するスクリプトです。
# --------------------------------------------------
# AppLockerルール一覧をCSV出力するスクリプト
# --------------------------------------------------
$Policy = Get-AppLockerPolicy -Effective
$RuleList = [System.Collections.Generic.List[PSCustomObject]]::new()
$RuleTypes = @{
"ExecutableRules" = "EXE"
"InstallerRules" = "MSI"
"ScriptRules" = "Script"
"PackagedAppRules" = "App"
}
foreach ($Key in $RuleTypes.Keys) {
$Rules = $Policy.$Key
if ($Rules) {
foreach ($Rule in $Rules) {
$Obj = [PSCustomObject]@{
RuleType = $RuleTypes[$Key]
Name = $Rule.Name
Action = $Rule.Action
User = $Rule.UserOrGroupSid
}
$RuleList.Add($Obj)
}
}
}
# CSVファイルとしてデスクトップに出力
$RuleList | Export-Csv -Path "$HOME\Desktop\AppLockerRules.csv" -NoTypeInformation -Encoding utf8
このスクリプトを使えば、すべてのルールが一枚の表にまとまり、検索やフィルタリングが簡単になります。
現場で役立つ確認時の注意点と対応策
AppLockerの確認作業をおこなううえで、つまずきやすいポイントと対策をまとめました。
| 状況・問題点 | 原因 | 対策 |
|---|---|---|
| コマンドがエラーになる | 管理者権限で起動していない | PowerShellを「管理者として実行」で開きます |
| ルールが何も出力されない | AppLockerが構成されていない | ポリシーが未定義の場合は空のデータが返ります |
| 特定のルールが効かない | Application Identityサービスが停止 | サービス(AppIDSvc)の起動状態を確認します |
表に記載したとおり、コマンド実行時のエラーや出力がない場合は、実行権限やサービスの起動状態を点検する必要があります。
特に「Application Identity」サービスが自動起動になっていないケースは、よくある設定漏れの一つです。
まとめ
PowerShellを使ったAppLockerポリシーの確認と一覧出力の手順を解説しました。
重要なポイントは以下の3点です。
- Get-AppLockerPolicyコマンドで、現在適用されている全ルールを即座に取得できること
- XML形式で保存することで、設定のバックアップや他端末への移行がスムーズにできること
- 取得したルールをCSVファイルに書き出し、Excelで棚卸しや監査用データとして活用できること
まずは管理者権限でPowerShellを立ち上げ、コマンドを実行して自席のパソコンの設定確認から始めてみましょう。
免責規定
この記事で提供される情報は、一般的なガイダンスを目的としており、すべての環境やシステムでの動作を保証するものではありません。
OSのバージョンやリリースによっては、記載されている事が実行できない、または異なる結果をもたらす可能性があります。
また、会社所有のパソコン、スマホ、タブレットなどでは、ポリシーや権限によって実行できない場合があります。
この記事の情報を使用することによって生じる問題や結果について、筆者およびサイト管理者は責任を負いません。
すべての操作は自己責任で行ってください。
もし、記事の中で間違いやご指摘があればコメントを頂けると大変ありがたいです。
最後までお読みいただきありがとうございました。
またお会いしましょう!

コメント