しばたテックブログ

気分で書いている技術ブログです。

Server Core App Compatibility Feature on DemandのInternet Explorerに対する雑感

前のエントリ

blog.shibata.tech

で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-WebRequestInvoke-RestMethodを使う必要がありました。

これらの機能は内部的にIEコンポーネントを利用しているのですが、IEコンポーネントを利用しないWEBアクセスを行うために-UseBasicParsingというパラメーターがあり、Server Coreではこのパラメーターを指定してやる必要があります。
また、単純にファイルをダウンロードするだけであればこのパラメーターをつけなくてもServer Coreで動作させることは可能です。

# Server Coreでは-UseBasicParsingをつけないとエラーになる
Invoke-WebRequest -Uri 'https://www.yahoo.co.jp/'

f:id:stknohg:20181004160245p:plain

# -UseBasicParsingをつけてエラーを回避
Invoke-WebRequest -Uri 'https://www.yahoo.co.jp/' -UseBasicParsing

f:id:stknohg:20181004160308p:plain

# ファイルのダウンロードだけなら-UseBasicParsingはなくても良い
Invoke-WebRequest -Uri 'https://download.sysinternals.com/files/SysinternalsSuite.zip' -OutFile '.\SysinternalsSuite.zip'

f:id:stknohg:20181004160326p:plain

そして、FoDでIEを追加すると最初の-UseBasicParsingをつけない場合でも動作する様になります。

f:id:stknohg:20181004160341p:plain

これによりフルのWindows Serverと同等の互換性を得ることはできますが、この程度の互換が必要かといわれると疑問ですし、その様なシナリオも皆無と思っています。

curl.exeの利用

Windows Server 2019にはWindowsにポートされたcurl.exeが導入されており、Server Coreでも利用可能です。

f:id:stknohg:20181004160358p:plain

このためPowerShellに頼らなくてもcurlにより強力なWEBアクセスができる様になっています。

curl.exe https://www.yahoo.co.jp

f:id:stknohg:20181004160408p:plain

curl.exe https://download.sysinternals.com/files/SysinternalsSuite.zip -o .\SysinternalsSuite.zip

f:id:stknohg:20181004160418p:plain

PowerShell Coreの利用

こちらはおまけです。

もしWindows PowerShellのWEBアクセスで機能が足りていない部分があるのであれば、PowerShell Coreを追加でインストールするのも一つの解となるかもしれません。
PowerShell CoreのWebCmdletsはIEへの依存が排除されており、また、新しいWEBの仕組みへの対応もいくつかなされています。

インストール自体は手作業で行う必要がありますが、拙作のインストーラーを使えばワンライナーでインストールできます。

blog.shibata.tech

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'))"

f:id:stknohg:20181004161620p:plain

f:id:stknohg:20181004161751p:plain