しばたテックブログ

PowerShellを中心に気分で書いている技術ブログです。

Windows 7にPowerShell 6.0をインストールする

割と誰得なエントリです。

PowerShell 6.0のサポートしているプラットフォームにWindows 7があったので実際に試したところ意外とハマったので記録を残しておきます。

インストール方法について

github.com

Windows 7向けのPowerShell 6.0(現時点ではAlpha 17)はMSIのインストーラーが提供されています。

公式のインストール手順にはMSIを実行するだけ、Windows 8.1、Windows 2012R2ではVisual Studio 2015 の Visual C++ 再頒布可能パッケージも必要だと記載されているだけであり、Windows 7向けには特に注意書きなどは記載されていません…

一抹の不安を感じますがこの手順を信じて進めてみることにします。

Windows 7にPowerShell 6.0をインストールする

今回は32Bit版での手順を紹介します。
64Bit版もやることは同じです。

1. とりあえずMSIをインストールすると…

インストール媒体からOSをインストールした直後の状態でMSIを実行しPowerShell 6.0をインストールすると、インストール自体はできるのですがプログラムを実行すると以下のエラーが出てしまいます。

コンピューターに api-ms-win-crt-runtime-l1-1-0.dll がないため プログラムを開始できません。 この問題を解決するには、プログラムを再インストールしてみてください。

f:id:stknohg:20170401081756p:plain

詳細ついては特に説明不要かと思います。
Windows 7でもWindows 8.1、Windows 2012R2同様にVisual Studio 2015 の Visual C++ 再頒布可能パッケージが必要となります。

2. SP1のインストール

Visual Studio 2015 の Visual C++ 再頒布可能パッケージをインストールするには、Windows 7 SP1である必要があります。

このためSP1が適用されていない環境では先にSP1にする必要があります。
この手順については細かく説明しませんが、Windows UpdateかKB976932を適用してください。

3. Visual Studio 2015 の Visual C++ 再頒布可能パッケージのインストール

SP1を適用したらVisual Studio 2015 の Visual C++ 再頒布可能パッケージをインストールしてください。
インストーラーの指示に従うだけですのでこの手順についても細かく説明はしません。

4. KB2533623 の適用

Visual Studio 2015 の Visual C++ 再頒布可能パッケージをインストールした後でPowerShell 6.0を実行すると、今度は以下のエラーが出てしまいました。

Failed to load the dll from [C:\Program Files\PowerShell\6.0.0.17\hostfxr.dll],
HRESULT: 0x80070057 The library hostfxr.dll was found, but loading it from C:\Program Files\PowerShell\6.0.0.17\hostfxr.dll failed

f:id:stknohg:20170401081920p:plain

エラーメッセージを見るに.NET Coreの起動に必要な何かが不足していることがわかります。

そこで.NET Coreの利用に必要な事前条件を確認すると、

For Windows 7 and Windows Server 2008 machines only:
Make sure that your Windows installation is up-to-date and includes hotfix KB2533623 installed through Windows Update.

と記載されており、KB2533623を適用する必要があることがわかります。

この更新を適用することで無事PowerShell 6.0を起動することができました。

f:id:stknohg:20170401081934p:plain

おまけ

Visual Studio Code PowerShell拡張はPowerShell 3.0以上であれば使えます。

f:id:stknohg:20170401082714p:plain

settings.jsonpowershell.developer.powerShellExePathにPowerShell 6.0のパスを設定することでWindows 7でもPowerShell拡張を使うことが可能です。

// settings.json
{
    "powershell.developer.powerShellExePath": "C:\\Program Files\\PowerShell\\6.0.0.17\\powershell.exe"
}

f:id:stknohg:20170401082547p:plain

右下のPowerShellのバージョン欄がちゃんと6.0になっていることがわかります。

最後に

とりあえずこんな感じです。

現時点でWindows 7を扱う環境であれば、大抵の場合SP1および最新の(またはそれに近い)Windows Updateが適用されていると思いますので、本エントリの様にハマることは少ないと思います。

また、Windows 7ではWMF 5.1(PowerShell 5.1)もインストールすることができますので通常はこちらをインストールすることになるでしょう。

stknohg.hatenablog.jp

もともと本エントリを書こうと思った動機は「何らかの理由でPowerShell 3.0以降をインストールすることができない環境にPowerShell 6.0をサクッとインストールして代替とすることができないか?」だったのですが、現実はそう甘くなかったです。