PowerShellには、同じことをする(またはそれに近いことをする)方法が無数にあります。このブログ記事では、ローカルおよびリモートコンピューター上のPowerShellバージョンをチェックするためのすべての方法を学びます。悪い方法と私のおすすめの方法についても説明します。
PowerShellバージョンを確認するさまざまな方法を示すウェブサイトはいくつかありますが、それらのすべてを総合的なリストにまとめたものはありませんでした。それを変えることにしました。
これらの方法は、Windows PowerShellとPowerShell Coreの両方で動作するはずです。これらの方法は、Windows PowerShellバージョン1.0からPowerShell 7までのすべてのバージョンで動作するはずです。
実行中のPowerShellバージョンを確認する方法は次のとおりです:
(Get-Host).Version
プロパティ$host.Version
プロパティ- レジストリ(Windows PowerShellのみ)
$PSVersionTable.PSVersion
プロパティ
これらの方法を最も推奨される方法から最も推奨されない方法まで解説しましょう。
Get-Host
PowerShellには、「ホスト」という概念があります。ホストとは、PowerShellエンジンを「ホストする」プログラムのことです。ホスト自体はPowerShellエンジンではありません。PowerShellコンソールや統合ターミナルを備えたコードエディタは、PowerShellの「ホスト」です。ホスト
A host can have a version that is completely independent of PowerShell itself. This can be deceiving to many newcomers. Let me show you why.
(Get-Host).Version
を実行すると、PowerShellエンジンのバージョンのように見えるバージョン番号が返されます。見かけは騙されることがあります。
以下では、Windows PowerShell 5.1でGet-Host
を実行した結果を示しています。バージョンは5.1.17134.858となっており、正当なバージョンのように見えます。
しかし、統合ターミナルでGet-Host
を実行すると、バージョンが同じでないことがあります。通常、ホストはエンジンの同じバージョンを示すはずですが、必ずしもそうではありません。
リモートコンピュータでのGet-Host
を使用してPowerShellのバージョンを確認する
ローカルコンピュータで実行する場合でも、Get-Host
はリモートコンピュータでは常に同じバージョンを返しません。
たとえば、Invoke-Command
を使用してリモートのWindows Server 2016サーバーでGet-Host
を実行してみましょう。
最後に確認したとき、Windows Server 2016ではPowerShell v1を実行することはできません。
Get-Host
に頼るのはどんな状況でも良いアイデアではありません。
$host.VersionコマンドでPowerShellのバージョンを確認する
$host.Version
を参照することは、PowerShellのバージョンを確認する別の方法です。$host
変数は、Get-Host
と同じ出力を返します。

$host.Version
この方法には特別なものはありません。単にGet-Host
を実行するのと同じです。
リモートコンピュータ上で$host.Version
を実行すると、
PowerShellリモーティングを介してGet-Host
を実行すると同じ動作が確認できます。
危険です、ウィル・ロビンソン!
レジストリ
PowerShell自体を開かなくても、レジストリを確認することもできます。PowerShellのバージョンは、レジストリキーのパスHKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
の値の一部として格納されています。このレジストリキーにはPowerShellVersion
という値があり、Get-ItemProperty
を使用して参照することができます。
他のオプションとは異なり、このバージョンにはリビジョンは含まれていません。
他のツールの使用
レジストリを使用することは、PowerShellを使用せずにバージョンを確認できることを意味します。コマンドプロンプトやレジストリを読み取ることができる他のツールからコマンドを実行できます。
リモートコンピュータ上のレジストリ
レジストリは静的であり、値はローカルおよびリモートで変更されません。ローカルで見えるものと同じものがリモートでも確認できます。
ローカルとリモートで同じバージョンが表示されるのは良いことです。ただし、$PSVersionTable
の自動変数を使用してより良い方法を紹介します。
$PSVersionTable.PSVersionコマンドを使用してPowerShellのバージョンを確認します。
最後の方法は、$PSVersionTable
自動変数の PSVersion
プロパティを参照する方法です。この方法は常にPowerShellエンジンを表します。
$PSVersionTable
自動変数は、PowerShellエンジンのバージョンに関する情報を返す読み取り専用のハッシュテーブルです。この自動変数はバージョンだけでなく、PSEditionも返します。このプロパティは、実行中のPowerShellのエディションに関する詳細情報を提供するため、CoreまたはDesktop のいずれかになります。

リモートコンピュータ上の$PSVersionTable
$PSVersionTable
自動変数を使用すると、ローカルと同様に正確です。以下の例では、$PSVersionTable.PSVersion
をスクリプトブロックでラップし、そのコードをリモートコンピュータ上で実行すると、同じバージョンが返されます。
概要
このブログ投稿では、ローカルおよびリモートでPowerShellのバージョンを確認する方法をすべて学びました。最初のいくつかの方法がどの方法を使用しないかについてのアイデアを提供したことを願っています!
I recommend always using $PSVersionTable.PSVersion
. All of the other methods may appear similar to the PowerShell engine version but may not always reflect the engine version.
もし他の方法を見落としていた場合は、コメントで教えてください。投稿を更新し、クレジットをお与えします。