前のエントリ
でServer Core App Compatibility Feature on Demand(FoD)を使いServer CoreにInternet Explorer(IE)がインストールできることを述べましたが、本エントリではこの点について思ったことを書いていきます。
そもそもServer CoreにIEは必要なのか?
そもそもServer CoreにIEは必要なのか?
私が本エントリを書こうと思った理由はこの一点に尽きます。
もともとServer Coreはサーバーとして必須でない機能を削ってOS全体の軽量化とセキュリティの強化を図ったものです。
IEの用途は基本的にWEBブラウスで、サーバー上であればソフトウェアのインストーラーなどのリソースのダウンロードに使うくらいしかないでしょう。
従来からリソースのダウンロードにはPowerShellが使えましたし、たかがダウンロードのためだけにセキュリティ的にナイーブな機能であるIEを追加するというのは、個人的には全く割に合わないものだと思っています。
公式にIEを追加すべき動機について一切アナウンスされておらず、いまのところはこの疑問に対する答えを得ることはできません...
一応想像するかぎりでは、
- IEコンポーネントを内部的に使うアプリケーションとの互換性確保のため?
- かつてのmodern.ieの様な、テスト用途のIE入りWindows Server Containerを目論んでいる?
などを思いつきましたが、あくまでも私の妄想であり何とも言えません。
Server CoreでのWEBアクセスについて
私の妄想はさておき、Server CoreでのWEBアクセスについての基本的なところとIEを導入することによる挙動の変化について触れておきます。
IEがなくてもWEBアクセスの方法は以下に示す様に十分ありますし、IEが必要なケースがでればFoDで導入するとよいでしょう。
Windows PowerShellの利用
従来のServer CoreではIEが無いため、WEBアクセスは基本的にPowerShellで、Invoke-WebRequest
やInvoke-RestMethod
を使う必要がありました。
これらの機能は内部的にIEコンポーネントを利用しているのですが、IEコンポーネントを利用しないWEBアクセスを行うために-UseBasicParsing
というパラメーターがあり、Server Coreではこのパラメーターを指定してやる必要があります。
また、単純にファイルをダウンロードするだけであればこのパラメーターをつけなくてもServer Coreで動作させることは可能です。
# Server Coreでは-UseBasicParsingをつけないとエラーになる Invoke-WebRequest -Uri 'https://www.yahoo.co.jp/'
# -UseBasicParsingをつけてエラーを回避 Invoke-WebRequest -Uri 'https://www.yahoo.co.jp/' -UseBasicParsing
# ファイルのダウンロードだけなら-UseBasicParsingはなくても良い Invoke-WebRequest -Uri 'https://download.sysinternals.com/files/SysinternalsSuite.zip' -OutFile '.\SysinternalsSuite.zip'
そして、FoDでIEを追加すると最初の-UseBasicParsing
をつけない場合でも動作する様になります。
これによりフルのWindows Serverと同等の互換性を得ることはできますが、この程度の互換が必要かといわれると疑問ですし、その様なシナリオも皆無と思っています。
curl.exeの利用
Windows Server 2019にはWindowsにポートされたcurl.exe
が導入されており、Server Coreでも利用可能です。
このためPowerShellに頼らなくてもcurlにより強力なWEBアクセスができる様になっています。
curl.exe https://www.yahoo.co.jp
curl.exe https://download.sysinternals.com/files/SysinternalsSuite.zip -o .\SysinternalsSuite.zip
PowerShell Coreの利用
こちらはおまけです。
もしWindows PowerShellのWEBアクセスで機能が足りていない部分があるのであれば、PowerShell Coreを追加でインストールするのも一つの解となるかもしれません。
PowerShell CoreのWebCmdletsはIEへの依存が排除されており、また、新しいWEBの仕組みへの対応もいくつかなされています。
インストール自体は手作業で行う必要がありますが、拙作のインストーラーを使えばワンライナーでインストールできます。
REM Command prompt powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "[Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12;iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/stknohg/PSCoreUpdate/master/FirstTimeInstaller/Install-LatestPowerShell.ps1'))"