PowerShellのバージョンを調べる

PowerShellはバージョンが違っていてもなるべく同じスクリプトで動作するようにマイクロソフトさんが努力してくれておりますが、PowerShellが完全に下位互換性が保たれているわけではありません。将来的に画期的な新しいコマンドが増えることもあるでしょう。

自分のパソコンにどのようなバージョンの PowerShell がインストールされているか調べるには $PSVersionTable または $HOST という変数を参照します。これは環境変数のようなものです。

$PSVersionTable を使う

まずは $PSVersionTable を使う方法を示します。下記が私のパソコンの実行結果です。バージョン 7.2.5 です。

PS C:\tmp> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      7.2.5
PSEdition                      Core
GitCommitId                    7.2.5
OS                             Microsoft Windows 10.0.19044
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

そのうちメンバだけを表示するならばこうします。

PS C:\tmp> $PSVersionTable.PSVersion

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      2      5

他のパソコンではこういう結果もありました。バージョン 5.1 です。バージョン 5.1 だと OS や Platform などのメンバが定義されていないことがわかります。

PS C:\tmp> $PSVersionTable

Name                           Value                                                       
----                           -----                                                       
PSVersion                      5.1.19041.1682                                              
PSEdition                      Desktop                                                     
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                     
BuildVersion                   10.0.19041.1682                                             
CLRVersion                     4.0.30319.42000                                             
WSManStackVersion              3.0                                                         
PSRemotingProtocolVersion      2.3                                                         
SerializationVersion           1.1.0.1 

$HOST を使う

$HOST という変数を参照しても、PowerShell のバージョン情報が取得できます。

PS C:\tmp> $HOST

Name             : ConsoleHost
Version          : 7.2.5
InstanceId       : cf43fafb-c822-44a3-8135-54d7670b3cb2
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : ja-JP
CurrentUICulture : ja-JP
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

そのうち Version メンバだけ取得します。$HOST だと Revision も取得できるようですが -1 だから、あまり意味のある数値ではないかもしれません。

PS C:\tmp> $HOST.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
7      2      5      -1