🌊

WindowsでIEモードを設定するバッチを作ってみた

2022/05/23に公開4

小ネタです。

背景

社内外の業務システムのうちIEでしか動かないものが多数存在するため、多数のPCにIEモードを設定する必要が出てきた。
そのため、ユーザー側で設定できるようにバッチを作ってみました。
IEモードについては以下参照。
https://docs.microsoft.com/ja-jp/deployedge/edge-ie-mode

要件

  • NAS上に必要なファイルを置いて、エンドユーザーがファイルを実行すれば実行したPCにIEモードが設定されるようにする。
  • ユーザー側に複雑な操作をさせたくないので、「管理者として実行」はしなくてよいようにする。(バッチ側でどうにかして管理者権限に昇格させる)
  • IEモードの対象になるURLリストは各PCのローカルに保存。(諸事情により、NAS等に配置するのではなくCドライブの直下にフォルダを作ってそこを参照。)
  • どのユーザーが設定したかわかるようにログを出力する。
  • (個人的に)何となく処理本体はPowershellで記述したい。

ファイル構成

以下の3種のファイルを同じディレクトリに配置して、run.batを実行させる。

  • run.bat → ユーザーが実行するファイル。管理者権限に昇格してps1ファイルをキックするだけ
  • SetIEMode.ps1 → 処理本体
  • urlList.xml → IEモードで開くURLのリスト

コード

run.bat
@echo off
cd /d %~dp0
for /f "tokens=3 delims=\ " %%i in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%i
if NOT "%LEVEL%"=="High" (
powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -Command "Start-Process %~f0 -Verb runas"
exit
)
echo setting...
powershell -NoProfile -ExecutionPolicy Unrestricted %~dp0SetIEMode.ps1
echo completed!
REM pause > nul
exit

※レジストリを弄るため、自己責任でお願いします。

SetIEMode.ps1
###################
##
## Set IE Mode Batch
##
###################

try
{
    # A file path of target URL list.
    $urlListPath = "c:\IEModeSetting\urlList.xml"
    # A file path of log file.
    $logPath = $PSScriptRoot + "\log.txt"

    # start logger
    Start-Transcript $logPath -append

    # Create URL list Folder
    if (-not(Test-Path (Split-Path -Parent $urlListPath))) {
        New-Item (Split-Path -Parent $urlListPath) -ItemType Directory
    }
    Copy-Item $PSScriptRoot\systemurl.xml $urlListPath -Force

    # Appdend setting to registry
    reg add HKLM\SOFTWARE\Policies\Microsoft\Edge /v EnterpriseModeSiteListManagerAllowed /t REG_DWORD /d 1 /f
    reg add HKLM\SOFTWARE\Policies\Microsoft\Edge /v InternetExplorerIntegrationLevel /t REG_DWORD /d 1 /f
    reg add HKLM\SOFTWARE\Policies\Microsoft\Edge /v InternetExplorerIntegrationSiteList /t REG_SZ /d $urlListPath /f
    # Hidden banner when redirecting
    reg add HKLM\SOFTWARE\Policies\Microsoft\Edge /v HideInternetExplorerRedirectUXForIncompatibleSitesEnabled /t REG_DWORD /d 1 /f

    # Show message for completing setting
    Add-Type -Assembly System.Windows.Forms
    [System.Windows.Forms.MessageBox]::Show('IE Mode setting has been set.')
}
catch
{
    # error
    Write-Output ('Error ' + $_.Exception.Message)
    $wsobj = new-object -comobject wscript.shell
    $result = $wsobj.popup('Error ' + $_.Exception.Message)
}
# end logger
Stop-Transcript
urlList.xml
<site-list version="205">
    <!-- File creation header -->
    <created-by>
        <tool>EnterpriseSitelistManager</tool>
        <version>10240</version>
        <date-created>20150728.135021</date-created>
    </created-by>
    <!-- Begin Site List --> 
    <site url="www.yahoo.co.jp">
        <compat-mode>Default</compat-mode>
        <open-in>IE11</open-in>
    </site>
</site-list>

※サンプルURLとしてYahooを指定してます。

おまけ

一度IEモードを設定後、上記urlList.xmlを更新した後はEdge側で手動更新する必要があるみたいです。
edge://compat/enterpriseにアクセスして、「強制的に更新」をクリックする。

Discussion

LUNARLUNAR

はじめまして。
記載いただいているバッチを用いて
2つ以上のURLをIEモードにする場合、urlList.xmlの
下記のように入力すればよいのでしょうか。

<site-list version="205">

<created-by>
<tool>EnterpriseSitelistManager</tool>
<version>10240</version>
<date-created>20150728.135021</date-created>
</created-by>

<site url="www.google.com/?hl=ja">
<compat-mode>Default</compat-mode>
<open-in>IE11</open-in>
</site>
<site url="<site url="www.yahoo.co.jp">">
<compat-mode>Default</compat-mode>
<open-in>IE11</open-in>
</site>
</site-list>

em8215em8215

はじめまして。
2つ以上のURLを登録する場合は<site-list>タグの中に<site url="..."></site>を複数入力すればOKです。
従い、記載していただいているものでOKです。
 ※記載ミスだと思いますが、<site url="<site url="www.yahoo.co.jp">">は<site url="www.yahoo.co.jp">が正しいです。

もう既にIEモードを設定している端末のurlList.xmlを更新する場合、更新した後Edge上で手動で更新してください。(手順はおまけで記載しています。)

LUNARLUNAR

ご回答いただき、ありがとうございます。
※ご指摘もありがとうございます。

こちらのバッチですが、はしらせてから結果が反映するまでに
すぐに反映せず、数分もしくは数時間のタイムラグが発生することは
ありますでしょうか。

もう一つ質問なのですが、おまけで添付いただいている
edge://compat/enterpriseにアクセスし、ドメインに表示されている
URLを削除してリセットする方法は別でありますでしょうか。

em8215em8215

稀にすぐに適用されず、PC再起動後に有効になったケースがありました。
もしかしたら見た目はEdgeが起動していないように見えても、バックグラウンドで起動していて、それらも全て終了して再起動しないと駄目なのかもしれません。(詳細は未確認)

指定しているドメインを削除するのは、c:\IEModeSetting\urlList.xml の中身を直接触り(削除したいドメインの<site url=""...></site>を削除)、edge://compat/enterpriseにアクセスして、「強制的に更新」をクリックすることでドメインを削除できると思います。