はじめに
こんにちは。この度、運用支援チームに異動したすかんくです。
アドベントカレンダー2025、5日目の記事を書いていこうと思います。
Cloudnative IRS Advent Calendar 2025 – Adventar
Intuneでエンドポイント セキュリティのアカウント保護ポリシーをMicrosoft Graph PowerShell一括削除しようとしたけど結構手間取ったというお話になります。
2025年12月時点での内容です。今後アップデートにより挙動が変更となる可能性があります。
背景
とあるトラブル対応でIntuneのエンドポイント セキュリティにあるアカウント保護ポリシーから、ローカル ユーザー グループ メンバーシップ ポリシーを大量に作成しました。
対応終了後にこれを一括で削除する必要が出てきたのですが、いかんせん大量に作成したのでスクリプトで一括削除したいよねということになり、Microsoft Graph PowerShellから該当コマンドを探していました。
ところが当該コマンドが一向に見つからず、かなり調べた結果、エンドポイント セキュリティのポリシーを削除するコマンドはMicrosoft.Graph.Betaモジュールにしか存在しないことが分かりました。
本題:Microsoft Graph PowerShellでの削除手順
それでは実際にMicrosoft Graph PowerShellを使用してアカウント保護ポリシーを一括削除する手順を紹介します。
当該コマンドはRemove-MgBetaDeviceManagementConfigurationPolicyです。
引数に-DeviceManagementConfigurationPolicyId が求められるため、予め何らかの手段で取得しておく必要があります。
Get-MgBetaDeviceManagementConfigurationPolicyコマンドで今回削除したいポリシーを一括で取得できるのですが、他のポリシー群(設定カタログ等)も混じってしまうため、ある程度フィルタリングしてあげる必要があります。(一度CSVに吐き出し、手で仕分けしてあげても良いと思います。)
ということで、以下が今回作成したスクリプトの全体像となります。
# 事前準備(この辺は良しなに)
Install-Module Microsoft.Graph.Beta -Repository PSGallery -Force
#接続
Connect-MgGraph
# ポリシーを取得(設定カタログとローカル ユーザー グループ メンバーシップ ポリシーにフィルタ)
# 実際はこれだと別ポリシー群も混じる(例:Antivirusポリシー)が、実環境ではそれらのポリシーを利用していなかったためこれで良しとした
$policy = Get-MgBetaDeviceManagementConfigurationPolicy -All | Where-Object {$_.Platforms -eq "windows10" -and $_.Technologies -eq "mdm"}
# 消し込み
$policy | ForEach-Object {
Write-Host "削除中: $($_.Name) - ID: $($_.Id)"
Remove-MgBetaDeviceManagementConfigurationPolicy -DeviceManagementConfigurationPolicyId $_.Id -ErrorAction Stop
}
Write-Host "処理が完了しました。" -ForegroundColor Green
(余談)Intune管理センター上の挙動がイケてない問題
今回アカウント保護ポリシーを大量に作成して気付いたのが、管理画面の挙動がかなりイケてないという点です。せっかくですので、この情報も書き記しておきたいと思います。(フィードバック済み)
プロファイル検索は表示しているポリシーが対象なのにも関わらず、標準で20件までしか読み取らない
アカウント保護ポリシーの画面内にある検索機能は、現在表示されているポリシー内にしか適用されません。また、アカウント保護ポリシーは20件ずつ表示され、それ以上読み込むにはページをスクロールして [さらに表示] ボタンをクリックする必要があります。
結果として、例えポリシー名が分かっていたとしても、全ポリシーを読み込まなければならないため、実質的に大量にポリシーが存在する状況ではフィルタ機能を活用することが出来ません。(どんな設計?)

エクスポートしたCSVファイルにオブジェクトIDが含まれない
今回削除対象とするポリシーのID一覧(-DeviceManagementConfigurationPolicyId )を取得する方法を考える際、多くの方がまず思いつくのは管理センター上でポリシーを一括エクスポートすることだと思います。
自分も同じことを考え、アカウント保護ポリシーの画面内からエクスポートを実施した所、以下のカラムしか取得されませんでした。
- ポリシー名
- ポリシーの種類
- 割り当て済み
- プラットフォーム
- ターゲット
- 最終変更
この機能も「誰が使うん?」という感じですが、よく見てみると管理画面上の列と一致していることに気が付きました。
Intuneに限らず、MS管理センターでは利用者が設定した列表示に基づいてエクスポートする機能が備わっていることがあります。恐らくこのエクスポート機能もエコシステム的にそれらを再利用しているのだと思われます。
ただし、アカウント保護ポリシー内には列を追加する機能はないため、このように誰も使わないようなポリシーセットがエクスポートされることとなるのかなと思いました。

おわりに
今回はアカウント保護ポリシーを大量削除するテクニックをご紹介させていただきました。中々こんなことする機会はないと思うのですが、誰かの役に立てば幸いです。
Microsoft Graph PowerShellはよくできていると思うのですが、ちょっとコマンドの検索性に問題があるんでそこの改善に期待ですね。アカウント保護ポリシー管理画面は全体的に機能改善をお願いしたいところです。ではまた。

