Intuneでログオン時にEdgeを自動起動し指定URLを開く方法(大量端末向け・スタートアップ/Runキー/タスク例つき)

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の体験が大きく変わるため反発が出やすい

手順イメージ(設定カタログ)

  1. Intune 管理センターで Windows 10/11 向けの構成プロファイルを作成(設定カタログ)
  2. Microsoft Edge の「起動時」「Startup」などのキーワードで設定を検索
  3. 起動時の動作を「URLリストを開く」に設定
  4. 開きたいURL(例:社内ポータル、ITサポート、必須の告知ページ)を登録
  5. ユーザーグループまたはデバイスグループに割り当て、パイロット端末で確認してから展開

ここまでが「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実行やネットワーク未確立が原因で失敗しやすいので、ユーザーコンテキスト+遅延を基本設計にする

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次