はじめに
スクリプトやバッチファイルを、組織内のPCすべてに自動配布したい。しかも「ユーザーのログイン時に必ず実行されるようにしたい」。そんな時に最も確実なのが、Intuneを使って Windowsの「スタートアップ」フォルダへファイルを送り込む 方法です。
Gemini と共に構築した、Win32アプリ機能を活用した「ファイル配置の自動化」手順を詳しく解説します。
この記事の作成にあたっても、 Gemini を活用しました。
配布の戦略:直接コピーではなく「インストーラー」を走らせる
IntuneのWin32アプリ配布では、単一のファイルを送るのではなく、 「ファイルをコピーする役割のPowerShellスクリプト」 をインストーラーとして動作させるのがベストプラクティスです。
今回の例:ログイン時に自動で時刻同期を実行させる
時刻同期バッチファイルを、全端末のスタートアップフォルダへ配布する。
このとき、
で解説した「時刻変更権限の付与」と組み合わせることで、一般ユーザー環境でもエラーなく時刻同期が走るようになります。
準備する資材 (Sourceフォルダ)
- SyncTime.bat: 今回配布するバッチファイル。
で作成した ps1 ファイルを、配布を容易にするために
で、Base64化してバッチファイルにパッキングしたもの。
2. install.ps1: このバッチをスタートアップフォルダへコピーするスクリプト。
$batName = "SyncTime.bat"
# 全ユーザー共通のスタートアップフォルダ
$targetPath = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"
# 実行中のフォルダにあるバッチをコピー
Copy-Item -Path ".\$batName" -Destination $targetPath -Force
Intuneパッケージ (.intunewin) の作成
で紹介した自動化スクリプトなどを用い、上記2ファイルを IntuneWinAppUtil.exe で1つのパッケージ(例: SyncTimeSetup.intunewin)にまとめます。
Intune 管理センターでの設定
- [アプリ] > [すべてのアプリ] > [追加] を開き、アプリの種類で [Windows アプリ (Win32)] を選択します。
-
アプリのパッケージ ファイル: 先ほど作成した
.intunewinをアップロードします。 -
プログラム: ここが重要です。
-
インストール コマンド:
powershell.exe -ExecutionPolicy Bypass -File install.ps1 -
アンインストール コマンド:
cmd.exe /c del "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\SyncTime.bat" - インストールのコンテキスト: システム (System)
-
インストール コマンド:
-
検出規則: 「アプリが正しく入ったか」を判断する条件です。
- 規則の形式: 手動で構成する
- 規則の種類: ファイル
-
パス:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp -
ファイルまたはフォルダー:
SyncTime.bat - 検出方法: ファイルまたはフォルダーが存在する
- 割り当て: 配布したいデバイスグループを選択して作成します。
この方法のメリット
-
全ユーザーに適用:
C:\Users\...ではなくC:\ProgramData\...に配置することで、その端末を使う誰がログインしても実行されます。 -
確実な実行:
Intuneが定期的に「ファイルが存在するか」をチェックしてくれるため、ユーザーが誤って削除しても自動的に再配布(修復)されます。
おわりに
この記事の構成にあたっては、Gemini に、Intuneでの「システムコンテキスト」と「ユーザーコンテキスト」の挙動の違いや、削除されても復活させるための「検出規則」の最適解についてアドバイスをもらいました。AIを「インフラ設計の壁打ち相手」にすることで、ただファイルを送るだけではない、運用に耐えうる堅牢な配布フローを確立することができました。
免責事項
本記事の使用により生じた損害やトラブルについて、筆者は一切の責任を負いません。内容を十分に理解した上で、自己責任でのご利用をお願いいたします。