Intuneに登録されていないMicrosoft Entra登録デバイスを見つける

皆さんこんにちは。国井です。
Microsoft 365にデバイスを登録する場合、Microsoft Entra IDへの登録とMicrosoft Intuneへの登録機能があり、Intuneを使おうと思ったら事実上、両方に登録しなければなりません。
登録連携機能を使えば一発で登録できるけど、たまに失敗したり..
登録だけを見てもいろいろなトラブルに巻き込まれるわけです。
そんな時にトラブルシューティング目的でMicrosoft Entra IDには登録されているけど、Microsoft Intuneには登録されないデバイスを把握したい、というケースがあります。
ここまで話をすると「そんなのMicrosoft Entra管理センターの[すべてのデバイス]をチェックすればいいじゃん」という人もいるでしょう。ところが、Microsoft Entra管理センターはIntuneにデバイス登録を行い、その後デバイスを削除したりすると、削除の方法によってはご覧のようにMicrosoft Entra管理センターの[すべてのデバイス]からは引き続きIntuneにデバイスが登録されていると表示されてしまうケースがあるのです。

image

じゃあいったい、どの情報が真実なの?
そんな時にはMicrosoft Entra IDに登録されたデバイス一覧とMicrosoft Intuneに登録されたデバイス一覧を突き合わせてMicrosoft Entra IDだけに登録されているデバイス一覧を抽出するのが間違いない方法です。
ご参考までにスクリプトを作っておきましたので、良かったらどうぞ。

■Microsoft Graph用PowerShellモジュールのインストール

Install-Module Microsoft.Graph

■Microsoft Entraへのサインイン

Connect-MgGraph -Scope Device.Read.All,DeviceManagementManagedDevices.Read.All

■スクリプト
アルゴリズムが泥臭すぎて恥ずかしいので、実務で使われる方は華麗に直しちゃってください。

$Datas = @()
$devices=Get-MgDevice
$intdevices=Get-MgDeviceManagementManagedDevice

foreach ($device in $devices){
 $suc=0
 foreach ($intdevice in $intdevices){
  If($intdevice.DeviceName -eq $device.displayname){
  $suc=1
  }
 }
 If($suc -eq 0){
  $Data = New-Object PSObject | Select-Object displayname, operatingsystem,trusttype,ApproximateLastSignInDateTime
  $faildevice=$devices |Where-Object{$_.displayname -eq $device.displayname}
  $Data.displayname=$faildevice.displayname
  $Data.operatingsystem=$faildevice.operatingsystem
  $Data.trusttype=$faildevice.trusttype
  $Data.ApproximateLastSignInDateTime=$faildevice.ApproximateLastSignInDateTime
  $Datas += $Data
 }
}
$Datas | ft -AutoSize

こちらを実行すると結果はこんな感じになります。
trusttype属性がMicrosoft Entra IDのデバイス登録種別になるので、AzureAdと表示されているものはMicrosoft Entra参加に当たるのでIntuneへのデバイス登録しようとしたけど失敗したのかな?とか、Workplaceと表示されているものはMicrosoft Entra登録に当たるのでBYODデバイスだし、Intune登録しなくても良いかな?とかチェックするのに必要な情報が参照できると思います。

image

お試しあれ。

【参考URL】カスタムオブジェクトの作成とCSV出力
https://www.vwnet.jp/windows/PowerShell/CreateCustomObject.htm