Intune で管理している Windows 10/11 端末で、ユーザーがサインイン(ログオン)した瞬間にブラウザーを自動起動し、社内ポータルなど指定URLを必ず表示させたい。ポイントは「ブラウザーが起動したときに何を開くか」と「ログオン時にブラウザー自体を起動する」の2つを分けて設計し、Intune と OS の仕組みを組み合わせて運用することです。
なぜ「Intuneだけ」でやろうとすると詰まりやすいのか
Intune(特に Edge のポリシー)は、「Edgeが起動したら何をするか」の制御は得意です。一方、「Windowsログオン時にアプリを勝手に起動する」は、OSのスタートアップやログオン処理(スタートアップフォルダー、Runキー、タスクスケジューラなど)の領域です。
| やりたいこと | 本質的に関係する領域 | Intuneの得意/不得意 | 代表的な実現方法 |
|---|---|---|---|
| Edge起動時に特定URLを開く | Microsoft Edge の起動時設定(ポリシー) | 得意(設定カタログ/ADMXで制御しやすい) | 「起動時に開くページ」をURLリストで指定 |
| ログオン時にブラウザーを自動起動する | Windows のログオン起動メカニズム | 不得意(標準ポリシーだけでは“起動”を作りにくい) | スタートアップ/Runキー/タスク登録をスクリプトで配布 |
結論としては、次のどちらか(または両方)を組み合わせます。
- Edge側で「起動時に開くURL」を定義する(ただし起動トリガーは別)
- ログオン時に「URLを開く」仕掛けをWindows側に作る(Edgeポリシーがなくても成立)
混同しやすい用語:ホーム、起動時、新しいタブは別設定
「スタートページを指定したのに思った動きにならない」原因の多くは、設定の対象がズレていることです。Edge周りでよく出る3つを整理します。
| 設定対象 | ユーザーが体感するタイミング | 用途 | よくある勘違い |
|---|---|---|---|
| 起動時に開くページ | Edge起動時 | 社内ポータル/お知らせを必ず表示 | これを設定するとログオン時に自動起動すると誤解 |
| ホームボタンURL | ホームボタンを押したとき | 「戻る場所」を統一したい | 起動時に開くURLと同じだと思い込む |
| 新しいタブ(NTP) | 新しいタブを開いたとき | 社内検索やポータルに誘導 | 起動時に必ず表示されると誤解 |
Edgeの起動時に指定URLを開く設定をIntuneで配布する
「ユーザーがEdgeを開いたら必ずポータルを出したい」「PCログオン時に自動起動は不要(または別で実装する)」という場合に有効です。大量端末でも管理しやすく、OS側の細かい挙動差に左右されにくいのがメリットです。
設計のコツ:強制するか、誘導するか
Edgeのポリシーは強制力が高い反面、ユーザーの普段の運用(復元セッション、個人のスタートページ)と衝突しやすい面があります。要件に合わせて「強制」か「誘導」かを決めると失敗が減ります。
- 強制(全員必ず同じURL):セキュリティ告知、勤怠、ゼロトラストポータルなど“必ず見せたい”ケース
- 誘導(URLは開くが、ユーザーの好みは尊重):情報提供、リンク集、ヘルプデスクなど“出せるなら出したい”ケース
設定カタログでよく使うEdgeポリシー例
Intune 管理センターの設定カタログ(または管理用テンプレート/ADMX)で、Edgeの起動動作を制御します。UIの名称は環境で多少変わりますが、概念は次の通りです。
| 目的 | 設定の例 | 期待する動き | 注意点 |
|---|---|---|---|
| 起動時にURLを開く | 起動時の動作:URLリストを開く 起動時に開くサイト:URLを列挙 | Edgeを起動した瞬間に指定URLを開く | ログオン時に勝手に起動する機能ではない |
| ホームボタンの導線を作る | ホームボタンを表示:有効 ホームボタンURL:ポータルURL | ユーザーが迷ったらワンクリックで戻れる | 起動時に自動表示されるわけではない |
| 新しいタブをポータルに誘導 | 新しいタブページのURL:ポータルURL | 新規タブ=社内検索/ポータルに統一 | Edgeの体験が大きく変わるため反発が出やすい |
手順イメージ(設定カタログ)
- Intune 管理センターで Windows 10/11 向けの構成プロファイルを作成(設定カタログ)
- Microsoft Edge の「起動時」「Startup」などのキーワードで設定を検索
- 起動時の動作を「URLリストを開く」に設定
- 開きたいURL(例:社内ポータル、ITサポート、必須の告知ページ)を登録
- ユーザーグループまたはデバイスグループに割り当て、パイロット端末で確認してから展開
ここまでが「Edgeが起動したらURLを開く」の実装です。次は本題の「ログオン時にブラウザーを自動起動する」方法です。
ログオン時にブラウザーを自動起動して指定URLを開く(大量端末向け)
ログオン時に確実に開きたいなら、Windows側に“ログオン起動の仕掛け”を作ります。Intuneはその仕掛けを配布・維持する役割です。代表的には次の3ルートです。
| 方式 | 安定性 | 管理のしやすさ | 向いているケース | 注意点 |
|---|---|---|---|---|
| スタートアップフォルダー | 高い | 高い(見える/単純) | 1ユーザー1PC、共有PCでもOK | ユーザー単位(HKCU相当)。全ユーザー共通は要管理者 |
| Runキー(HKCU) | 高い | 中(レジストリ操作が必要) | とにかく軽く実装したい | コマンドの引用符ミスで動かないことがある |
| タスクスケジューラ(ログオン時) | 非常に高い | 中〜高(条件/遅延/再試行が組める) | ネットワーク待ち、遅延起動、細かい制御が必要 | ユーザー/デバイスの運用形態で作り方を分ける必要 |
大量端末での現実解は、Intuneでスクリプトを1回配布し、そのスクリプトがスタートアップ/Runキー/タスクを作る形です。こうすると「Intuneのスクリプトは1回しか動かない/ログオンごとではない」という制約を回避できます。
方式別の実装例(PowerShellで仕掛けを作る)
スタートアップフォルダーに .url を配置する(既定ブラウザーで開く)
最もシンプルで壊れにくい方法です。.url ファイルはダブルクリックと同じ扱いなので、既定ブラウザーで指定URLが開きます。
動作イメージ:ログオン → スタートアップが実行 → URLショートカットが起動 → 既定ブラウザーでURL表示
# 例:ユーザーのスタートアップフォルダーにURLショートカットを作成
$startup = [Environment]::GetFolderPath('Startup')
$url = 'https://portal.contoso.example/'
$file = Join-Path $startup 'Open-Company-Portal.url'
$content = "[InternetShortcut]`r`nURL=$url`r`n"
Set-Content -Path $file -Value $content -Encoding ASCII
削除(ロールバック)も簡単です。
$startup = [Environment]::GetFolderPath('Startup')
$file = Join-Path $startup 'Open-Company-Portal.url'
Remove-Item -Path $file -ErrorAction SilentlyContinue
Edge固定で開きたい場合は .url ではなく .lnk(ショートカット)を作る方法もありますが、作成が少し複雑になります。要件が「Edge(または既定ブラウザー)でよい」なら .url が運用に強いです。
Runキー(HKCU)に起動コマンドを登録する
ログオン時に自動実行されるレジストリ(HKCU Run)にコマンドを登録します。大量端末でも展開しやすい一方、引用符(ダブルクォート)の事故が起きやすいので、URLやパラメータが増えるほど注意が必要です。
既定ブラウザーでURLを開く(安定しやすい)
$runKey = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run'
$name = 'OpenCompanyPortal'
$cmd = 'cmd.exe /c start "" "https://portal.contoso.example/"'
New-ItemProperty -Path $runKey -Name $name -Value $cmd -PropertyType String -Force | Out-Null
Edgeを指定して開く(Edge固定)
$runKey = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run'
$name = 'OpenCompanyPortal'
$cmd = 'msedge.exe --new-window "https://portal.contoso.example/"'
New-ItemProperty -Path $runKey -Name $name -Value $cmd -PropertyType String -Force | Out-Null
削除(ロールバック)
$runKey = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run'
$name = 'OpenCompanyPortal'
Remove-ItemProperty -Path $runKey -Name $name -ErrorAction SilentlyContinue
Runキーは「ユーザーごと(HKCU)」が基本です。共有端末で複数ユーザーがログオンする場合も、各ユーザーのHKCUに入る形になるため自然に対応できます(ただし、登録するスクリプト自体をユーザーコンテキストで実行する必要があります)。
タスクスケジューラで「ユーザーログオン時」を作る(遅延・条件付きが強い)
「ログオン直後はネットワークがまだ繋がらない」「VPNやプロキシ設定が反映されてから開きたい」「ログオン後30秒遅らせたい」といったケースでは、タスクスケジューラが強力です。大量端末の“あるある”に対処しやすく、結果的に問い合わせが減ります。
PowerShellでユーザー用のログオンタスクを登録(既定ブラウザーでURLを開く)
$taskName = 'OpenCompanyPortalAtLogon'
$url = 'https://portal.contoso.example/'
# ログオン直後の負荷/ネットワーク未確立を避けるため少し待つ
$psExe = "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell.exe"
$arg = "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -Command ""Start-Sleep -Seconds 15; Start-Process '$url'"""
$action = New-ScheduledTaskAction -Execute $psExe -Argument $arg
$trigger = New-ScheduledTaskTrigger -AtLogOn
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType InteractiveToken -RunLevel LeastPrivilege
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Principal $principal -Force
Edgeで“アプリ風”に開く(タブ/アドレスバーを最小化したい場合)
$taskName = 'OpenCompanyPortalAtLogon'
$url = 'https://portal.contoso.example/'
$edgeArgs = "--app=$url"
$action = New-ScheduledTaskAction -Execute 'msedge.exe' -Argument $edgeArgs
$trigger = New-ScheduledTaskTrigger -AtLogOn
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType InteractiveToken -RunLevel LeastPrivilege
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Principal $principal -Force
削除(ロールバック)
$taskName = 'OpenCompanyPortalAtLogon'
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false -ErrorAction SilentlyContinue
タスク方式は「遅延」「条件」「再試行」などを組めるのが最大の利点です。反面、共有PCや複数ユーザー運用では、タスクを誰のコンテキストで作るかが重要になります。基本はユーザーコンテキストで登録し、そのユーザーのログオン時に走る形にすると、UIが確実に表示されます。
IntuneでPowerShellを配布するときの重要ポイント(ハマりどころ)
ログオン時の自動起動を狙って単純に Start-Process を配るだけだと、配布方式や実行コンテキストの違いで「動いているのに画面に出ない」「一度だけ開いて終わる」が起きがちです。大量端末で事故を減らすための要点をまとめます。
| チェック項目 | 推奨 | 理由 |
|---|---|---|
| スクリプト実行コンテキスト | ログオン中ユーザーで実行(ユーザーコンテキスト) | SYSTEMで起動するとユーザーのデスクトップにブラウザーが出ない/見えないことがある |
| 「毎回ログオン時に必ず開く」要件の実装 | スクリプトでスタートアップ/Runキー/タスクを作る | Intuneのスクリプト自体は“ログオンのたび”には動かないケースが多い |
| ネットワーク未確立対策 | 遅延(Start-Sleepやタスク遅延) | ログオン直後に開くとSSO/プロキシ/VPNが間に合わず白画面になりやすい |
| 割り当て対象 | 要件に応じてユーザー/デバイスを選ぶ | 「どの端末でもそのユーザーに適用」か「端末単位で固定」かで最適解が変わる |
加えて、反映が遅い/動かないときは、次の観点で切り分けると復旧が早いです。
- 端末側でポリシー同期(Sync)を実行したか
- 割り当て先(ユーザーグループ/デバイスグループ)が正しいか
- スクリプトの実行結果(成功/失敗、標準出力/エラー)が Intune 側に残っているか
- 端末で作成されるはずの成果物(.url/Runキー/タスク)が実際に存在するか
大量端末で「問い合わせが増えない」設計にするコツ
起動が重い・うるさい問題を避ける
ログオンのたびに必ずブラウザーを開く要件は満たしつつ、ユーザー体験を悪化させないために、次の工夫が効きます。
- ログオン後に数秒〜数十秒の遅延を入れる(特にVPN/プロキシ/SSOが絡む環境)
- Edgeの「–app」モードでポータルをアプリ風に表示し、余計なタブを増やさない
- 開くURLは最小限にする(複数タブ強制は反発が出やすい)
- 社内告知なら、ポータル側で表示制御(最新のお知らせだけ出す)を行い、端末側の設定を過剰にしない
「毎回」ではなく「毎日1回」にして反発を減らす(任意)
要件が許すなら「ログオンのたび」より「その日最初のログオンで1回」のほうが運用がラクで、ユーザーの反発も下がります。タスクのアクション側で簡単なフラグファイルを持つ実装例です。
$url = 'https://portal.contoso.example/'
$stampDir = Join-Path $env:LOCALAPPDATA 'Contoso\Portal'
$stampFile = Join-Path $stampDir 'last_open.txt'
$today = (Get-Date).ToString('yyyy-MM-dd')
New-Item -Path $stampDir -ItemType Directory -Force | Out-Null
if (Test-Path $stampFile) {
$last = Get-Content $stampFile -ErrorAction SilentlyContinue
if ($last -eq $today) { exit 0 }
}
Set-Content -Path $stampFile -Value $today -Encoding UTF8
Start-Process $url
このスクリプトを、前述のタスクスケジューラのアクション(powershell.exe -Command)として呼び出す形にすると、実行回数を抑えつつ要件を満たせます。
トラブルシューティング:症状から逆引き
| 症状 | よくある原因 | 対処 |
|---|---|---|
| 配布したのにEdgeが開かない | スクリプトがSYSTEMで実行されている/ユーザーセッションに出ていない | ユーザーコンテキストで実行に変更し、スタートアップ/Runキー/タスクの成果物が作られているか確認 |
| 一度だけ開いて、次回ログオンでは開かない | Intuneスクリプトを「毎回実行」と誤認し、起動トリガーを作っていない | スクリプトでスタートアップ/Runキー/タスクを作り、ログオンイベントに結び付ける |
| 開くが、白画面/認証エラーになりがち | ログオン直後でネットワーク/VPN/SSOが未確立 | 遅延(10〜30秒)を入れる。必要なら「ネットワーク利用可能」条件をタスクに設定 |
| 共有PCで一部ユーザーだけ動かない | デバイス割り当て+ユーザーコンテキストの組み合わせで、実行タイミングが揃っていない | ユーザーグループ割り当てに寄せる/プロアクティブ修復で“存在確認→不足なら作成”にする |
| ユーザーが勝手にスタートページを変えたいと言う | Edgeポリシーで起動URLを強制している | Edgeポリシーは最小化し、ログオン時起動側でURLを開く(誘導)設計に切り替える |
おすすめの構成(大規模展開で安定させるテンプレ)
要件が「ログオン時に必ず指定URLを開く」で、運用事故を最小化したいなら、次の構成が堅いです。
- URLを開く仕掛け:スタートアップフォルダー(.url)またはログオンタスク(遅延あり)をスクリプトで作成
- Edgeポリシー:必要な場合だけ(例:新しいタブやホームボタンの統一など、ユーザー体験を崩しにくい範囲)
- 展開手順:パイロット → 部門ごと → 全社(いきなり全台は避ける)
- ロールバック:削除スクリプトを必ず用意し、いつでも停止できる状態にする
まとめ:設計の正解は「2段階」
- Edgeポリシーでできるのは主に「Edgeが起動したときに何を開くか」の制御
- 「ログオン時にブラウザーを自動起動する」は Windows 側(スタートアップ/Runキー/タスク)の仕組み
- 大量端末では、Intuneでスクリプトを配布して“ログオン起動の仕掛け”を作るのが最も安定
- SYSTEM実行やネットワーク未確立が原因で失敗しやすいので、ユーザーコンテキスト+遅延を基本設計にする

コメント