はじめに
先にサイレントアクティベーションのためのレジストリ設定を実施頂くようお願いいたします。
【サイレントアクティベーション】AD → Windows Chrome / Edge
レジストリの設定にはいろいろな方法がありますが、すでになんらかのブラウザ拡張機能を強制(自動)インストールする設定をご利用の場合は、基本的にそれと同じ方法で実施してください。
デバイス管理ツールのエージェント(例:SKYSEA Client View )をインストールすると、レジストリに追加される場合がありますが、管理テンプレートを使うとそのレジストリを上書きしてしまうことがあります。
事前に以下のレジストリ設定がどのようになっているかご確認ください。
HKLM:\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist
HKCU:\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist
HKLM:\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallForcelist
HKCU:\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallForcelist
代表的な設定方法を以下に記載します:
・設定されてる拡張機能がわかっている場合:レジストリ項目を設定する
・すでに管理テンプレートでの設定がある場合:管理テンプレートを利用する
・設定されている拡張機能がわからない場合:スクリプトを使ってレジストリをセットする
レジストリ項目を設定する
- 「グループポリシーオブジェクト」で”右クリック”「新規」を選択します。
- 「名前」を付け、「OK」をクリックします。
- 「保存したグループポリシー」を”右クリック”して、「編集」を選択してください。
- 「グループポリシー管理エディター」ウィンドウが開きます。
「コンピューターの構成」>「基本設定」>Windowsの設定>「レジストリ」で”右クリック”し、「新規作成」>「レジストリ項目」を選択してください。
- 「新しいレジストリのプロパティ」画面で以下のように設定してください。設定し終わったら「OK」をクリックしてください。
アクション:更新
ハイブ:HKEY_LOCAL_MACHINE
キーのパス:SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallForcelist
値の名前:任意の半角数字 (他の拡張機能と被らない数字)
値の種類:REG_SZ
値のデータ:hjifncajikcdkhlofdjjlhcjoennmdfc;https://edge.microsoft.com/extensionwebstorebase/v1/crx
- グループポリシーをドメイン・OUにリンクさせます。(対象はコンピューターオブジェクトです)
適用するドメイン・OUを右クリックし、 「既存のGPOのリンク」を選択してください。
- 作成したグループポリシーを選択して、「OK」をクリックします。
管理テンプレートを利用する
※先にサイレントアクティベーションの処理を実施頂くようお願いいたします。
Active Directoryの「グループポリシーの管理」を通じて拡張機能を展開します。
-
グループポリシーの管理コンソールを開きます。
「GPMC.msc」と入力し、[OK]を選択します。
-
新しいグループポリシーオブジェクト(GPO)を作成します。左側のナビゲーションから[グループポリシーオブジェクト(Group Policy Object)]を右クリックし、メニューから[新規(New)]を選択します。ポリシー名は、「josysExtInstall」などわかりやすい名前にします。
-
新しい空のポリシーを右クリックして、[編集]を選択します。
-
[ポリシー(Policies)]>[セントラルストアから取得した管理用テンプレートポリシー定義(ADMXファイル)(Administrative Templates Policy Definitions (ADMX files) retrieved from the central store)]>[Microsoft Edge][拡張(Extensions)]に移動します。
次に、
[サイレントインストールされる拡張機能の制御(Control which extensions are
installed silently)]
の設定を開きます。
-
[サイレントインストールされる拡張機能/アプリのIDと更新URL(Extension/App IDs and update URLs to be silently installed)]で[表示…(Show…)]を選択します。
次に、セミコロンで連結された拡張IDと、拡張機能を更新するためのURLを入力します。
hjifncajikcdkhlofdjjlhcjoennmdfc;https://edge.microsoft.com/extensionwebstorebase/v1/crx[OK] を選択し、Enabledを選択した後[適用(Apply)]を選択します。
- 対象デバイスを選択し、GPOを適用します。
スクリプトを使ってレジストリをセットする
- 以下のスクリプトに名前を付けて、ps1 ファイルとして保存してください(メモ帳などで保存する場合は、UTF-8(BOM付き)推奨)
※このスクリプトはChrome、Edge 両方のブラウザに対して設定を行います。
※必要に応じて編集してください。
このスクリプトはエラーだった場合のみ、スクリプト内のパスにログファイルを残します。
<#
.SYNOPSIS
ブラウザ拡張機能強制インストール設定スクリプト
.DESCRIPTION
Google ChromeおよびMicrosoft Edgeの ExtensionInstallForcelist にエントリを追加します。
SKYSEA、ADスタートアップスクリプト等、SYSTEM権限での実行に対応しています。
.NOTES
設定エリアの $ExtensionList に登録したい拡張機能情報を記述してください。
#>
#Requires -Version 5.1
#Requires -RunAsAdministrator
# -----------------------------------------------------------
# [設定エリア] 導入したい拡張機能とログ設定
# -----------------------------------------------------------
# ログファイルのパス
$LogFilePath = "C:\Windows\Temp\BrowserExtensionInstall.log"
# 対象のブラウザと拡張機能設定のリスト
# 記述形式: "拡張機能ID;更新URL"
# ※利用に合わせてIDとURLを書き換えてください
$TargetExtensions = @(
@{
Name = "Google Chrome"
RegPath = "HKLM:\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist"
# 以下は例: JosysのID
Value = "moaklgcgokbgplldonjkoochhlefkbjf;https://clients2.google.com/service/update2/crx"
},
@{
Name = "Microsoft Edge"
RegPath = "HKLM:\SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallForcelist"
# 以下は例: JosysのID
Value = "hjifncajikcdkhlofdjjlhcjoennmdfc;https://edge.microsoft.com/extensionwebstorebase/v1/crx"
}
)
# -----------------------------------------------------------
# 初期処理
# -----------------------------------------------------------
$script:HasError = $false
try {
Start-Transcript -Path $LogFilePath -Append -ErrorAction SilentlyContinue
} catch {
# ログ開始失敗時も動作は継続させる
}
Write-Host "--- 処理開始: $(Get-Date) ---"
Write-Host "実行ユーザー: $env:USERNAME"
# -----------------------------------------------------------
# 関数定義
# -----------------------------------------------------------
function Set-BrowserExtension {
param (
[string]$BrowserName,
[string]$RegistryPath,
[string]$ExtensionData
)
Write-Host "`n[$BrowserName] の設定を確認中..."
try {
# 1. パスの確認と作成
if (-not (Test-Path $RegistryPath)) {
Write-Host " [INFO] レジストリキーが存在しないため作成します: $RegistryPath"
New-Item -Path $RegistryPath -Force -ErrorAction Stop | Out-Null
}
# 2. 既存値の取得
$existingProps = Get-ItemProperty -Path $RegistryPath -ErrorAction SilentlyContinue
$numericNames = @()
$isDuplicate = $false
if ($existingProps) {
# 重複チェック (値の内容で比較)
foreach ($prop in $existingProps.PSObject.Properties) {
if ($prop.Value -eq $ExtensionData) {
$isDuplicate = $true
Write-Host " [SKIP] 既に登録済みです (Entry: $($prop.Name))"
break
}
}
# 既存の連番を取得 (数値の名前のみ抽出)
$numericNames = $existingProps.PSObject.Properties.Name | Where-Object { $_ -match "^\d+$" } | ForEach-Object { [int]$_ } | Sort-Object
}
# 3. 新規登録
if (-not $isDuplicate) {
# 最大値 + 1 を計算
$nextNum = 1
if ($numericNames.Count -gt 0) {
$nextNum = $numericNames[-1] + 1
}
$newValueName = $nextNum.ToString()
Write-Host " [ADD] 新規登録を実行します: 名前='$newValueName'"
New-ItemProperty -Path $RegistryPath -Name $newValueName -Value $ExtensionData -PropertyType String -Force -ErrorAction Stop | Out-Null
Write-Host " [SUCCESS] 登録完了"
}
} catch {
Write-Error " [ERROR] $BrowserName の処理中にエラーが発生しました: $($_.Exception.Message)"
$script:HasError = $true
}
}
# -----------------------------------------------------------
# メイン処理
# -----------------------------------------------------------
foreach ($target in $TargetExtensions) {
Set-BrowserExtension -BrowserName $target.Name -RegistryPath $target.RegPath -ExtensionData $target.Value
}
Write-Host "`n--- 処理終了: $(Get-Date) ---"
Stop-Transcript
# -----------------------------------------------------------
# 終了処理 (ログ削除判定 と ExitCode)
# -----------------------------------------------------------
if ($script:HasError) {
# エラーがあった場合: ログを残し、終了コード 1 (失敗) を返す
Write-Warning "処理中にエラーが発生しました。ログを確認してください: $LogFilePath"
exit 1
} else {
# エラーがなかった場合: ログを削除し、終了コード 0 (成功) を返す
Remove-Item -Path $LogFilePath -Force -ErrorAction SilentlyContinue
exit 0
}
- 保存した ps1ファイルを、スタートアップスクリプト等で実行されるようグループポリシーを設定してください。