使われていないAutopilotデバイスを見分ける

皆さんこんにちは。国井です。
ここ数日Windows Autopilotの話題が某界隈ででています。
ここではデバイスを初期化しても、初期化後のOOBE画面でAutopilotのセットアップ画面が出てしまう現象がなんで起きるのか?
そしてそれをどうやって回避すればよいか?を考えてみたいと思います。

■ ■ ■

Windows Autopilotは簡単かつ端折って言うと、Windowsの初期化後のセットアップ画面(OOBE画面)でIntuneへのデバイス登録ができるようにする機能です。これを利用するときには事前にAutopilotにデバイスの情報を登録しておくと、OOBE画面で自分のデバイスがAutopilotに登録されていることを識別するようになり、Autopilotによるセットアップが始まり、結果的にIntuneにデバイスを登録する、というものです。

image

このようにMicrosoft Intuneでは
・Autopilotに登録されたデバイス
・実際にIntuneに登録されたデバイス
2つの情報があります。
Autopilotへのデバイス登録はCSV形式で提供されるハードウェアハッシュと呼ばれる情報を登録して使います。一方、Intuneへのデバイス登録はOMA-DMと呼ばれる規格に基づくデバイス管理機能があり、その規格に沿った形でデバイス登録が行われます。

image

Autopilotの機能を使わないでIntuneを利用するのであれば、今回のような複雑な構成にはならないのですが、Autopilotを使ってWindowsデバイスのセットアップを行おうとすると
事前にAutopilotへのデバイス登録と、Autopilotによるセットアップ後に自動的に行われるIntuneへのデバイス登録が発生するので、結果的に2か所へのデバイス登録が行われたことになります。

2つのデバイス登録ですが、これらはIntune管理センター画面上ではバラバラに表示されます。そのため、Intuneからデバイスを削除すれば完全にクリーンアップしたように見えるのですが、すでにおわかりのようにAutopilot側に登録されたデバイス情報は残り続けてしまうのです。

image

そのため、初期化後にWindowsを使い始めようとするとAutopilotに登録されたデバイス情報をもとに再びIntuneへのデバイス登録を試みてしまうのです。
ざっくり言うとこれがAutopilotのワナなわけです。

じゃあどうやって回避する?

ひとことで言えば、Autopilotに登録された余計なデバイス情報を削除するしかありません。
ところが、どれが余計なデバイスなのかはGUI画面から確認するのは至難の業なのです。
そこで今日はPowerShellを使った方法を試してみたいと思います。

まず、Autopilotに登録されたデバイスとIntuneに登録されたデバイスはSerialNumber属性で紐づいているので同じSerialNumber属性を持つデバイスがAutopilot側にいるのかをチェックすれば、Autopilot側だけに登録されたデバイスがいるかを確認できます。
(っていうスクリプトを作ろうとしたら私の環境ではなぜかキチンと動作してくれなかったので今回はAutopilotとIntuneの両方にデバイスが登録されているけど使われていないデバイスを見つけるスクリプトにしました。ごめんなさい)

PowerShellモジュールの準備

Intuneのコマンドレットを利用できるようにまずはモジュールをインストールしておきましょう。

それからAutopilot情報については別のモジュールで提供されているので、こちらをインストールしておきましょう。

Install-Module WindowsAutoPilotIntune

それぞれのインストールができたら以下のコマンドレットで接続します。

Connect-MSGraph
Connect-MgGraph

接続できたら以下のコマンドレットを実行しましょう
(スクリプトが雑すぎて泣けてくる..)

#デバイス情報の取得
$aps=(Get-AutopilotDevice).SerialNumber
$devices=Get-IntuneManagedDevice

#AutopilotデバイスとIntune登録デバイスを比較して一致するデバイスを表示
foreach ($ap in $aps){
  foreach ($device in $devices){
   if ($ap -eq $device.SerialNumber){
$device | ft serialNumber, deviceName, lastSyncDataTime
  }
  }
}

実行結果はこんな感じ。

image

登録された、それぞれのデバイスがlastSyncDateTime属性から使われていないデバイスを把握できるかと思います。

Autopilotデバイスは使わなくなったら削除する
これはIntune運用の定時作業に組み込んでトラブルが起きないようにしていきましょう!