cheshire-boy

システム・サービス

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

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

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

今回は、

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

について紹介します。

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

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

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

そんな時にバージョン調査に使える、バージョン取得方法を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.