PowerShell のバージョン判別方法 [PowerShell]
忘れそうなので PowerShell のバージョン判別方法を整理しておくことにします。
(以下 Version 2 と書いてますが現時点では CTP 3 での確認のみ)
Version 2 からは PSVersionTable という変数が追加されており、
Version 1 にはこの変数は存在していなかったので、
Get-Variable で変数の存在を見分ければ Version 1 か
それより新しいのかを判別できます。
他に、次のようにレジストリを見て PowerShellVersion の値を調べる方法もあります。
どちらの方法がいいのでしょうね?
不存在を調べるのも、レジストリパスを書くのもどちらもあまり美しくないような気はします。
なお、Get-Host で PowerShell ホストのバージョンを取得可能で、
これも参考にはなるのですが、Hostの種類・バージョンと PowerShell の
バージョンは異なるので単純に判別できるわけではありません。
たとえば、標準コンソールの場合であれば
あるいは
になるのですが、PowerGUI の中だと
(以下 Version 2 と書いてますが現時点では CTP 3 での確認のみ)
Version 2 からは PSVersionTable という変数が追加されており、
PS > $PSVersionTableのように確認可能です。
Name Value
---- -----
CLRVersion 2.0.50727.3053
BuildVersion 6.1.6949.0
PSVersion 2.0
PSCompatibleVersions {1.0, 2.0}
Version 1 にはこの変数は存在していなかったので、
Get-Variable で変数の存在を見分ければ Version 1 か
それより新しいのかを判別できます。
if (Get-Variable PSVersionTable -ErrorAction SilentlyContinue)
{
# ある時:Version 2 ~
}
else
{
# ない時:Version 1
}
他に、次のようにレジストリを見て PowerShellVersion の値を調べる方法もあります。
(Get-ItemProperty HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine).PowerShellVersion文字列として 1.0 もしくは 2.0 が戻ってきます。数値ではないので比較には注意しましょう。
どちらの方法がいいのでしょうね?
不存在を調べるのも、レジストリパスを書くのもどちらもあまり美しくないような気はします。
なお、Get-Host で PowerShell ホストのバージョンを取得可能で、
これも参考にはなるのですが、Hostの種類・バージョンと PowerShell の
バージョンは異なるので単純に判別できるわけではありません。
たとえば、標準コンソールの場合であれば
Name : ConsoleHost
Version : 1.0.0.0
あるいは
Name : ConsoleHost
Version : 2.0
になるのですが、PowerGUI の中だと
Name : PowerGUIScriptEditorHostだったりします。
Version : 1.5.2.550
わかりやすいなので、勉強になりました。
by ユーザA (2012-05-11 10:17)