PowerShellには、同じこと(またはそれに近いこと)を行う方法が無数にあります。このブログ投稿では、ローカルコンピューターとリモートコンピューターにあるPowerShellのバージョンを確認するあらゆる方法を学びます。悪い方法と私の推奨する方法について説明します。
PowerShellの初心者からPowerShellの第一人者に移行したい場合は、これを無料で食べることをお勧めします。 PowerShellツールの構築に関するミニコース。これは、Adam theAutomatorからの完全な説明とガイダンスを含むステップバイステップのチュートリアルです!
Powershellのバージョンを確認するさまざまな方法を示すWebサイトがあります。しかし、それらすべての包括的なリストをまとめたものはありません。これを変更することにしました。
これらの方法はすべて、WindowsPowerShellとPowerShellCoreの両方で機能するはずです。これらの方法は、WindowsPowerShellバージョン1.0からPowerShell7まですべてで機能するはずです。
実行しているPowerShellのバージョンを確認する方法は次のとおりです。
-
(Get-Host).Version
プロパティ -
$host.Version
プロパティ - レジストリ(Windows PowerShellのみ)
-
$PSVersionTable.PSVersion
プロパティ
PowerShellのバージョンを見つけるためのすべての方法を最小のものから最も推奨される方法まで分類してみましょう。 。
目次
Get-Host
PowerShellにはホストと呼ばれる概念があります。ホストは、PowerShellエンジンをホストしているプログラムです。これはPowerShellエンジン自体ではありません。PowerShellコンソールまたは端末が統合されたコードエディターはPowerShellホストです。
ホストは、PowerShell自体から完全に独立したバージョンを持つことができます。これは多くの新参者を欺く可能性があります。理由をお見せしましょう。
(Get-Host).Version
を実行すると、PowerShellエンジンのバージョンのように見えるバージョン番号が返されることがわかります。見た目はだまされている可能性があります。
Windows PowerShell5.1でGet-Host
を実行すると、5.1.17134.858で戻ってくることがわかります。これは正規のバージョンのように見えます。
ただし、統合端末でGet-Host
を実行すると、バージョンは同じではありません。通常、ホストは同じバージョンのエンジンを表しますが、必ずしもそうする必要はありません。
リモートコンピューターのGet-Hostを介してPowershellのバージョンを確認する
Get-Host
は、ローカルコンピューターで実行すると同じバージョンを返すようですが、リモートコンピューターでは返されません。
たとえば、Get-Host
リモートWindowsServer2016サーバーでInvoke-Command
を使用して、何が起こるかを確認します。
前回チェックしたとき、PowerShellv1をで実行することはできません。 Windows Server2016。
Get-Host
に依存することは、あらゆる面で悪い考えです。
Powershellバージョン$ host.Versionコマンドを確認してください
$host.Version
を参照することは、Powershellのバージョンを確認するもう1つの方法です。 $host
変数は、Get-Host
と同じ出力を返す自動変数です。
を参照
この方法には特別なことは何もありません。 Get-Host
を実行するのと同じです。
$ host.Versionをリモートコンピューターで実行する
PowerShellRemotingを使用すると同じ動作が見られます。 $host.Version
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のエディションに関する詳細情報を提供できます。
リモートコンピューターでの$ PSVersionTable
自動変数は、リモートと同様にローカルでも正確です。以下では、$PSVersionTable.PSVersion
をスクリプトブロックでラップし、そのコードをリモートコンピューターで実行すると、同じバージョンが返されることがわかります。
まとめ
このブログ投稿では、PowerShellのバージョンをローカルとリモートの両方で確認するすべての方法を学習しました。最初のいくつかの方法で、バージョンを確認しない方法がわかったと思います。
常に$PSVersionTable.PSVersion
を使用することをお勧めします。他のすべてのメソッドは、PowerShellエンジンのバージョンと同じように見える場合がありますが、必ずしもエンジンのバージョンを反映しているとは限りません。