cheshire-boy

システム・サービス

【Get-Host/$PSVersiontable】PowerShellのバージョンを確認する方法とは?

投稿日:2016年9月27日 更新日:

こんにちは。チェシャ男です。(-皿-)

今回は、

PowerShell のバージョン確認方法】

について紹介します。

個人的に Powreshell を使う場合だと、バージョンの事をそんなに気に留める必要はないと思います。 (※あくまで個人的な感想です)

一方、お仕事でスクリプトを組まなければならなくなった場合は、しっかりとバージョンを意識しなければなりません。コマンドレットの互換性がなかったりしたら大変ですからね。

作成したツールの稼働先が Windows 2012 R2で、あなたが使っている PC が Windows 7の場合。果たしてバージョンは同じなのか!

そんな時にバージョン調査に使える、バージョン取得方法を2通りご紹介します。

スポンサーリンク

Get-Host でバージョン取得

実行している PowerShell のバージョンを取得できるコマンドレットに、

Get-Host

というものがあります。

【コマンドレット】

Get-Host

【オプション】

なし

【入力】

None(このコマンドレットに対して、パイプ渡しはできません)

【出力】

System.Management.Automation.Host.PSHost

【エイリアス】

なし

Get-Hostの実行

実行結果を見てみましょう。

結果が何行か出力されますが、バージョン情報について知りたい方は

「Version    : 5.0.10586.117」

と表示されている部分を見てみてください。

バージョンのプロパティを取り出す

実行結果を見てみても、".(ドット)"で区切られていてよくわからないかもしれません。

そんな場合は、バージョン部分のプロパティを取り出してみましょう。

"."を使ってプロパティを参照することができます。実行結果は下をご覧ください。

最終的に、"Major" のプロパティまで抽出していますが、この値が一般的にいうところの「PowerShell のバージョン」です。

まあ、つまりチェシャ男が実行している Powerhsell はバージョン 5.0ということになりますね。

自動変数$host

Get-Host コマンドレットの戻り値を格納している、

$host

という変数が存在していますので、この変数を用いることでも同様の結果を得られます。

Get-Host の落とし穴

さて、ここまで紹介してきたGet-Hostコマンドレットですが、注意するべき落とし穴があります。

Get-Host コマンドで取得できる結果は、PowerShell を実行しているホストプログラムに関する情報なのです。

たとえば、

PowerShell ISE 上で Get-Host コマンドを実行した場合の結果を見てましょう。

Name を見て頂くと、実行するホストが変わっていることが変わっていることがわかりますよね。

Powrshell ISE は Windows 標準装備の公式ツールなので、この場合特に問題はありません。

しかし、

PowerCLI 上等の外部ツール上で動作させた場合、うまく値を取得できない場合がありますのでご注意ください。

$PSversionTableでバージョン取得

PowerShell のバージョンを取得できる、

$PSVersionTable

という変数があります。

$PSVersionTableの実行

実行結果を見てみましょう

結果だけ見てみると、Get-Host コマンドレットの結果とほぼ変わらないようです。

「PSVersion       5.0.10586.117」

と、表示されていますね。

バージョンのプロパティを取り出す Part2

"."を使ってプロパティをすることができます。

$PSVershionTable で参照するプロパティは、"PSVersion" です。

この様に、Get-Host 時の結果と同じ結果を得ることができました。

CLR のバージョンを取得

ここまで読んでくれたあなたは、

Get-Host $PSVersionTable の違いはなんだろう。」

と、思っているかもしれません。

$PSVersionTable には、.Net Framework の CLR(共通言語ランタイム)のバージョンに関するプロパティが含まれており、"." を使って取得することができます。(→ CLRとPowerShellの関係)

これにより、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である。

スポンサーリンク

-システム・サービス
-, , , ,

Copyright© 【チェシャわら】PowerShellとは、から学ぶ入門者の教科書-脱コマンドプロンプト- , 2017 AllRights Reserved Powered by micata2.