こんにちは。チェシャ男です。(-皿-)
今回は、
【PowerShell のバージョン確認方法】
について紹介します。
個人的に Powreshell を使う場合だと、バージョンの事をそんなに気に留める必要はないと思います。 (※あくまで個人的な感想です)
一方、お仕事でスクリプトを組まなければならなくなった場合は、しっかりとバージョンを意識しなければなりません。コマンドレットの互換性がなかったりしたら大変ですからね。
作成したツールの稼働先が Windows 2012 R2で、あなたが使っている PC が Windows 7の場合。果たしてバージョンは同じなのか!
そんな時にバージョン調査に使える、バージョン取得方法を2通りご紹介します。
もくじ
Get-Host でバージョン取得
実行している PowerShell のバージョンを取得できるコマンドレットに、
Get-Host
というものがあります。
[blogcard url=”https://cheshire-wara.com/powershell/ps-help/get-host-help/”]【コマンドレット】
Get-Host
【オプション】
なし
【入力】
None(このコマンドレットに対して、パイプ渡しはできません)
【出力】
System.Management.Automation.Host.PSHost
【エイリアス】
なし
Get-Hostの実行
実行結果を見てみましょう。
PS C:\> Get-Host Name : ConsoleHost Version : 5.0.10586.117 InstanceId : 912edb2e-f4da-4cab-9604-020a8ad657bb 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 : 5.0.10586.117」
と表示されている部分を見てみてください。
バージョンのプロパティを取り出す
実行結果を見てみても、”.(ドット)”で区切られていてよくわからないかもしれません。
そんな場合は、バージョン部分のプロパティを取り出してみましょう。
“.”を使ってプロパティを参照することができます。実行結果は下をご覧ください。
PS C:\> (Get-Host).Version Major Minor Build Revision ----- ----- ----- -------- 5 0 10586 117 PS C:\> (Get-Host).Version.Major 5
最終的に、”Major” のプロパティまで抽出していますが、この値が一般的にいうところの「PowerShell のバージョン」です。
まあ、つまりチェシャ男が実行している Powerhsell はバージョン 5.0ということになりますね。
自動変数$host
Get-Host コマンドレットの戻り値を格納している、
$host
という変数が存在していますので、この変数を用いることでも同様の結果を得られます。
PS C:\> $host Name : ConsoleHost Version : 5.0.10586.117 InstanceId : 912edb2e-f4da-4cab-9604-020a8ad657bb 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
Get-Host の落とし穴
さて、ここまで紹介してきたGet-Hostコマンドレットですが、注意するべき落とし穴があります。
Get-Host コマンドで取得できる結果は、PowerShell を実行しているホストプログラムに関する情報なのです。
たとえば、
PowerShell ISE 上で Get-Host コマンドを実行した場合の結果を見てましょう。
PS C:\> Get-Host | Select-object Name,Version Name : Windows PowerShell ISE Host Version : 5.0.10586.117
Name を見て頂くと、実行するホストが変わっていることが変わっていることがわかりますよね。
Powrshell ISE は Windows 標準装備の公式ツールなので、この場合特に問題はありません。
しかし、
PowerCLI 上等の外部ツール上で動作させた場合、うまく値を取得できない場合がありますのでご注意ください。
$PSversionTableでバージョン取得
PowerShell のバージョンを取得できる、
$PSVersionTable
という変数があります。
$PSVersionTableの実行
実行結果を見てみましょう
PS C:\> $PSVersiontable Name Value ---- ----- PSVersion 5.0.10586.117 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.10586.117 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
結果だけ見てみると、Get-Host コマンドレットの結果とほぼ変わらないようです。
「PSVersion 5.0.10586.117」
と、表示されていますね。
バージョンのプロパティを取り出す Part2
“.”を使ってプロパティをすることができます。
$PSVershionTable で参照するプロパティは、”PSVersion” です。
PS C:\> $PSVersiontable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 5 0 10586 117
この様に、Get-Host 時の結果と同じ結果を得ることができました。
CLR のバージョンを取得
ここまで読んでくれたあなたは、
「Get-Host と $PSVersionTable の違いはなんだろう。」
と、思っているかもしれません。
$PSVersionTable には、.Net Framework の CLR(共通言語ランタイム)のバージョンに関するプロパティが含まれており、”.” を使って取得することができます。(→ CLRとPowerShellの関係)
PS C:\> $PSVersiontable.CLRVersion Major Minor Build Revision ----- ----- ----- -------- 4 0 30319 42000
これにより、PowerShell が動作する CLR を取得することができます。
$PSVersionTable の落とし穴
Get-Host の落とし穴では、Get-Host では動作するホスト情報の影響を受けると記載しました。そのため、Microsoft の “Hey,Scripting Guy!” でも、$PSVersionTable によるバージョン取得を推奨しています。
ただし、$PSVersionTable にも落とし穴があります。
Windows PowerShell 1.0 には、$PSVersionTable のシェル変数が定義されていません。
もしあなたが、(ほとんどないとは思いますが) PowerShell 1.0 を使っている場合は、$PSVersionTable によってバージョンを取得することができないことに注意してください。
まとめ
PowerShell でバージョン情報を取得するお勧めの方法は
$PSVersionTable
の変数から、PSVersion プロパティを引っ張ってくること。
もし、変数の定義がない場合は、バージョン 1.0である。
[…] PowerShell のバージョンを確認する方法とは? | チェシャわら (cheshire-wara.com) […]