みなさんは普段お使いの Windows PC にインストールされている PowerShell のバージョンを把握していますか?多くの WIndows 10 ユーザーの場合、バージョンは 5.1 になっています。しかし、最新の PowerShell のバージョンは 7.0 です。なぜ今のバージョンが 5.1 なのか?自動で 7.0 にバージョンアップされないのか?そのあたりを疑問に思ったので調べてみました。
以下、調べた内容のまとめ
当時の手元環境
PowerShell を開いた時にずっと気になってた以下の通知があります。
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6
PS C:\>
これはきっと今の自分の環境が古いのだろうと思って、とりあえず今のバージョンを見てみました。
PS C:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.18362.752
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.752
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
出力から、バージョン (PSVersion
) が 5.1 であることがわかります。あと、後々出てきまlすが、エディション (PSEdition
) が Desktop であることもここからわかります。
PowerShell のバージョン
標準でインストールされている PowerShell のバージョン
Windows に標準でインストールされている PowerShell のバージョンは公式ドキュメントに記載があります。
ここから、OS によって入ってるバージョンが異なることと、なぜ自分の環境 (Windows 10) で PowerShell 5.1 が入っていたかが分かります。
PowerShell 6.x と 7.x
ところで、上記の表を見ただけだと、バージョン 5.1 が最新のように見えます。それなのになぜ、PowerShell 起動時に「新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6
」のようなメッセージが出たのでしょうか。そこで、指定された URL を開いてみます。
長年にわたって、多くの PowerShell がリリースされてきました。 最初の Windows PowerShell は .NET Framework 上にビルドされていて、Windows システム上でしか動作しませんでした。 現在のリリースでは、PowerShell はランタイムとして .NET Core 3.1 を使用します。 PowerShell は、Windows、macOS、Linux のプラットフォームで実行されます。
引用元: https://docs.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell?view=powershell-7
ここで、現在の PowerShell には 2 つの系統があることが分かります。
まず、従来の Windows PowerShell は、.NET Framework 上で動作していて、Windows OS 上でしか動作していませんでした。この系統が、デフォルトで Windows OS にインストールされているものであり、最新バージョンが 5.1 となっています。
続いて、現在の PowerShell (Core) は .NET Core 上で動作していて、Windows OS 以外の OS (Mac, Linux, etc.) にも対応しています。バージョンには 6.x と 7.x があり、最新バージョンは 7.0 となっています(プレビュー版の 7.1 はあります)。
2 つの系統はバージョン番号で区別ができますが、厳密には .NET Core 上で動作する 5.1 もあるので、先程の出力のエディション (PSEdition
) で区別するのが本当はよいようです。これが Desctop なら従来系統、Core なら現行系統となります。ただし、7.0 が出たタイミングで現行系統を PowerShell Core という名称から PowerShell という名称に変えたこともあり、(詳しい経緯は未調査ですが)今後は PowerShell (Core) 系統に絞っていくんだろうなという気配があります。
5.1 と 7.0 のどちらがいいの?
そもそも、僕は PowerShell をほぼ使わないので、バージョン 5.1 で必要十分となっています。とはいえ、ドキュメントの雰囲気やサポートライフサイクルを参照する限り、今後は .NET Core ベースの開発に注力しそうな気もしています。
そのため、そもそも使ってない人は 5.1 のままでもよいでしょうが、少しでも使ってない人は 7.0 も別途入れて、徐々に使い方に慣れた方がいいのでしょう。なお、5.1 と 7.0 で共存可能です。
PowerShell 7 は新しいディレクトリにインストールされ、Windows PowerShell 5.1 と side-by-side 実行されます。PowerShell Core 6.x がインストールされている場合、PowerShell 7 にインプレース アップグレードされ、PowerShell Core 6.x は削除されます。
引用元 : https://docs.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-core-on-windows?view=powershell-7#installing-the-msi-package
PowerShell 7.0 のインストール
インストールの仕方は ドキュメント に書いてあるままで、特に迷うところはありません。ドキュメントにも長々と書いてありますが、結局のところ github から msi をダウンロードしてきて実行するだけです。
Assets まで降りていって自分の環境のものをダウンロードして…
粛々とインストールを進めていくだけです。
起動確認
従来の Windows PowerShell (5.1) は powershell
という名前でしたが、PowerShell 7.0 は pwsh
という名前となっています。さっそくこちらの名前で起動してみます。
PowerShell 7.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
https://aka.ms/powershell
Type 'help' to get help.
PS C:\> $PSVersionTable
Name Value
---- -----
PSVersion 7.0.0
PSEdition Core
GitCommitId 7.0.0
OS Microsoft Windows 10.0.18363
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
ちゃんと 7.0 が起動したことが分かります。もちろん、現在でも 5.1 を起動できます。
PS C:\> powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6
PS C:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.18362.752
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.752
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
余談: pwsh で出力がコピーできない!と思ったのですが、[プロパティ] → [簡易編集モード] を有効化すれば大丈夫でした。
まとめ
- PowerShell には 2 系統存在する(Windows PowerShell & PowerShell Core)
- Windows PowerShell の最新バージョンが 5.1 であり、Windows 10 標準搭載
- バージョン 6.0 からクロスプラットフォーム (Mac, Linux, etc.) に対応
- ただし破壊的な変更を含むため PowerShell Core 系統として進化
- PowerShell Core の最新バージョンが 7.0
- 5.1 と 7.0 は共存できるので、7.0 を入れてみるというのはアリ