▶️

Intuneで色んな方法で配布したPowerShellスクリプトを再実行する

2024/03/29に公開

はじめに

Intuneでは主に3つのやり方でPowerShellスクリプトを配布できます。

  • PSスクリプト
  • IntuneWin
  • 修復(旧プロアクティブな修復)

いずれかの方法で配布したPowerShellスクリプトをもう一度実行する方法をまとめてみました。

PSスクリプト

一番標準の機能ですがあまり好かれてはいない模様。。
以下のレジストリに情報があります。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IntuneManagementExtension\Policies

次のような階層構造になっています。

IntuneにアップロードしたPSスクリプトのIDはIntune管理センター > スクリプトのURLから取得できます。

これでレジストリからどのPSスクリプトの情報か判断できます。

レジストリの値を以下の値に書き換えることでPSスクリプトを再実行できます。

  • DownloadCount:0
  • Result:空文字
  • ResultDetails:空文字

PowerShellで変更する場合はこんな感じで。

$userObjectID = "<ユーザーオブジェクトGUID>"
$scriptID = "<PSスクリプトのID>"
$registryPath = "HKLM:\SOFTWARE\Microsoft\IntuneManagementExtension\Policies\$($userObjectID)\$($scriptID)"
 
# DownloadCountの変更
Set-ItemProperty -Path $registryPath -Name "DownloadCount" -Value 0
# Resultの変更
Set-ItemProperty -Path $registryPath -Name "Result" -Value ""
# ResultDetailsの変更
Set-ItemProperty -Path $registryPath -Name "ResultDetails" -Value ""

IntuneWin

IntuneWinはIntuneでPSスクリプトを配布するデファクトスタンダードになっています。
以下のレジストリに情報があります。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IntuneManagementExtension\Win32Apps

階層構造はPSスクリプトと同じで、Entra IDユーザーオブジェクトID > アプリIDとなっています。
アプリIDはスクリプトIDと同様にIntune管理センターでURLから取得できます。


アプリIDの末尾はアプリのバージョンと思いきやIntuneWinを更新すると自動で付与される値

普通に再実行しようとするととても面倒です。
詳細はこの方のブログに記載されています。

アプリIDとGRSと呼ばれる実行したスケジュールキーを削除する必要があります。
IntuneManagementExtension.logのアプリIDからハッシュ化されたGRSを特定する必要があるので一苦労です。

ちなみにIntuneWinを更新し複数のバージョン(アプリIDの末尾2以上)がある場合、最新のアプリIDのバージョンと対応するGRSのみを削除すれば検出規則次第でスクリプトが再実行されます。

簡単に再実行できる方法があればコメントいただきたいです!

修復

基本的には1時間ごとに実行や数日おきに実行する機能ですが1回だけ実行する機能もあります。

検出規則だけでも設定できるのでIntuneの標準機能で取得できない情報を最短1時間ごとに監視できるのが便利

今回は1回だけ実行した修復をもう一度実行する手順をまとめます。

以下のレジストリに情報があります。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IntuneManagementExtension\SideCarPolicies\Scripts

ExecutionとReportsに実行履歴とレポートがあります。
修復IDはスクリプトIDと同様にIntune管理センターでURLから取得できます。

特定したらキーを丸ごと削除すると一回のみの修復スクリプトが再実行されます。

末尾のIDは自動で設定・更新されるバージョンです。IntuneWinより楽。

修復のスケジュールの設定で日時を設定しますがその日時を過ぎていても問題なく再実行されます。

新しいPSスクリプトを全デバイスに配布したい

既存のスクリプト・アプリ情報から新しいスクリプト・IntuneWinファイルをアップロードすることで配布できます。
※IntuneWinは検出規則に気をつけてください
※修復は1回のみ実行するスケジュールでもexit 1になれば新しいスクリプトが配布されます

トラブルシューティング

各レジストリにも最低限の情報はありますが、それぞれ以下のログファイルに情報が残っているのでcmtraceツールで解析しましょう。
ログファイル内でスクリプトID・アプリIDで検索できます。

機能 ログのパス
PSスクリプト C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\IntuneManagementExtension.log ・ C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\AgentExecutor.log
IntuneWin C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\IntuneManagementExtension.log
修復 C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\AgentExecutor.log

詳しいcmtraceツールの使い方は国井さんのブログをご覧ください。

少しだけPSスクリプトのトラブルシューティング

レジストリのスクリプトID > ResultDetailsから実行情報を取得できます。
ExcecutionMsgにWrite-Hostの値やcatch文のreturnの値を出力できます。

少しだけ修復のトラブルシューティング

レジストリのReports > 修復ID > Resultから実行情報を取得できます。

  • "PreRemediationDetectScriptOutput":検出スクリプトのWrite-Hostまたはcatch文のreturnの値
  • "RemediationScriptOutputDetails":修復スクリプトのWrite-Hostまたはcatch文のreturnの値

cmtraceツールはこんな感じで出力されます。

赤色だけツールが表示してくれています

おわりに

WindowsE3/E5、M365 E3/E5/A3/A5を持っている組織はぜひ修復機能も使ってみてください!

Discussion