すべてのIntune登録デバイスで同期を強制実行

皆さんこんにちは。国井です。
先日、トレーニングの中でお客さんから
すべてのデバイスで同期を強制実行する方法ありますか?
というご質問をいただいたので、そちらにお答えしていこうと思います。

■  ■  ■

Intuneで構成プロファイルなどでセキュリティに関わる設定を行った場合
それが今すぐに、すべてのデバイスに適用させたいと考える場合があると思います。
しかし、Intuneでは基本的に8時間に一度の間隔でクラウドと通信を行い
同期を実行するため、クラウド側で設定した内容がすぐに反映されません。
個別のデバイスであれば、

クライアント側で同期する
MEM管理センターから同期する

などの方法がありますが、
すべてのデバイスとなると既存の方法で実現するやり方がないんです。
そんなときには以前にも紹介したIntune PowerShellを使います。
Intune PowerShellはMicrosoft.Graph.Intuneの名前で提供されているモジュールで、
最初に次のコマンドレットを実行してモジュールをインストールしておきます。

Install-Module -Name Microsoft.Graph.Intune

モジュールのインストールが完了したら、次のコマンドレットを実行してクラウドへ接続します。

Connect-MSGraph

認証画面が表示されるので、管理者のIDとパスワードでサインインすれば、
コマンドレットを実行して各種Intuneの操作が行えるようになります。

デバイスの情報はGet-IntuneManagedDeviceコマンドレットで取得できるのですが、
すべてのデバイスに対する操作ではなく、一部のデバイスだけ表示させたい場合には
-Filterオプションを使います。例えば、iOSデバイスだけを表示させたい場合はこんな感じ。

Get-IntuneManagedDevice -Filter “contains(operatingSystem,’iOS’)”

(引数にはcontainsと指定しているのに完全一致しか受け付けないので注意!)
こんな感じで取ってきたデバイス情報のうち、デバイスIDと呼ばれる情報が
PowerShellから同期を行うときに必要になります。そして、同期そのものは
Invoke-IntuneManagedDeviceSyncDeviceコマンドレットを使います。

ということで、以上を踏まえてスクリプトを作るとこんな感じになります。
(“contains(operatingSystem,’iOS’)”の部分は必要に応じて書き換えてください)

$devices = Get-IntuneManagedDevice -Filter ` “contains(operatingSystem,’iOS’)”

Foreach ($device in $devices)
{
Invoke-IntuneManagedDeviceSyncDevice -managedDeviceId ` $device.managedDeviceId
}

実行結果を見たければ、
Get-IntuneManagedDevice -Filter “contains(operatingSystem,’iOS’)” |ft ` deviceName,lastSyncDateTime
コマンドレットを実行して確認できます。

image

同期時刻はUTC表示ですので、+9時間で確認してください。