もっと詳しく

管理者は、特にスクリプトの互換性のために、システムにインストールされているWindowsPowerShellおよびPowerShellのエディションとバージョンを知っておくことが重要です。 この記事では、Windows、Linux、およびMacOSでPowerShellのバージョンを確認するすべての方法を取り上げ、ヒントとコツを紹介します。 PowerShell7とPowerShell7.2での変更点についても説明します。

LeosMarekによる最新の投稿 (すべてを見る)

PowerShellエディションの確認 ^

一般に、2つのPowerShellエディションを区別します。

  1. デスクトップ-以前のWindowsPowerShellエディション。Windowsでのみ使用できます。 そのバージョン番号の範囲は1.0から5.1であり、これはWindowsServer2019/2022およびWindows10/11のデフォルトバージョンです。 これはオペレーティングシステムの一部です。
  2. -クロスプラットフォームのPowerShell(以前はPowerShell Coreと呼ばれていました)は、Windows、Linux、およびMacOSで使用できます。 そのバージョン番号は6(PowerShell Core)から始まります。 現在のバージョンは7.2.3で、PowerShellと呼ばれます。

PowerShellエディションを確認する最も簡単な方法は、自動変数$PSEditionを使用することです。

$PSEdition変数を使用してPowerShellエディションを確認する

$PSEdition変数を使用してPowerShellエディションを確認する

わかりやすくするために、投稿全体でエディション名を使用します。

LinuxとMacOSではPowerShellエディションしか入手できないため、正しいバージョンを入手するのは比較的簡単ですが、DesktopエディションとCoreエディションの両方を入手できるWindowsでは少し難しいかもしれません。

WindowsでPowerShellのバージョンを確認する ^

Windowsでは、PowerShellの正しいバージョンを取得するための4つの方法があります。

  1. Get-Host コマンドレット
  1. $ Host 変数
  2. レジストリ
  3. $ PSVersionTable 変数

それらのいくつかは他のものより信頼性が低いです。 リモートで呼び出されたときに正しく機能しないものもあります。 それらを進める前に、WindowsPowerShellとPowerShellについて少し説明しましょう。

WindowsPowerShellとPowerShell

上で説明したように、Windowsは両方のPowerShellエディションをインストールできる唯一のシステムです。 では、どれをクエリしますか? クエリは両方のバージョンを返しますか? これは、特に経験の浅い管理者にとっては、少し誤解を招く可能性があります。

答えは簡単です。 Windows PowerShellとPowerShellには、異なる独立した実行可能ファイル(およびアイコン)があります。 Windows PowerShellの場合、 powershell.exe; PowerShellの場合は pwsh.exe

したがって、ローカルでは、これは簡単です。クエリを開始して実行するPowerShellによって異なります。リモートでは、以下に示すように、話は異なります。

WindowsPowerShellとPowerShellのバージョン

WindowsPowerShellとPowerShellのバージョン

Get-Hostコマンドレット

PowerShellでは、ホストはPowerShellエンジンをホストするプログラムです。 統合された端末を備えたVisualStudioCodeは、ホストの例です。 Get-Hostコマンドレットは、バージョンを含むホストに関する情報を返します。 PowerShellのみを表示するには、次のコマンドを実行できます。

(Get-Host).version
GetHostコマンドレットの使用

GetHostコマンドレットの使用

ただし、コマンドレットは、PowerShellエンジン自体ではなく、実行しているホストのバージョンを返します。 これらは異なる場合があります。 また、このコマンドレット リモートでは機能しません-Windows Server 2022でも、常にバージョン1.0.0.0を返します。

$ホスト変数

$ Host変数は自動変数であり、Get-Hostが返すのと同じオブジェクトです。 メソッドは交換可能であるため、正しいエンジンバージョンを返さない可能性があり、リモートでは機能しません。 これらの使用はまったくお勧めしません。 $ Host変数の内容を表示するには、PowerShellコンソールに入力するだけです。

$Host変数の使用

$Host変数の使用

レジストリ

もう1つのオプションは、レジストリを使用することです。 このような情報を取得するには、基本的に3つの方法があります。グラフィカルにregeditを使用する方法、コマンドラインを使用してregクエリを使用する方法、PowerShellを使用する方法です。 この投稿はすべてPowerShellに関するものなので、その方法を見てみましょう。

[version](Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftPowerShell3PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion
You can also use this method remotely with Invoke-Command.
$script = { [version](Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftPowerShell3PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion }
Invoke-Command -ComputerName srv2022 -ScriptBlock $script
ローカルおよびリモートでレジストリ方式を使用する

ローカルおよびリモートでレジストリ方式を使用する

注意してください。このようなコマンドを実行すると、デスクトップ版のバージョンのみが返されます。 ただし、PowerShell 7.1で新しいレジストリキーが追加され、コアのインストールについてレジストリにクエリを実行できるようになりました。 次のコードは次のようになります。

  1. デスクトップ版バージョンのレジストリを確認してください
  2. Coreエディションバージョン(別のキー)のレジストリを確認してください
  3. コアレジストリキーが見つからない場合は、警告メッセージが表示されます
$script = { [version](Get-ItemProperty -Path HKLM:SOFTWAREMicrosoftPowerShell3PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion
try {
[version] (Get-ChildItem -Path HKLM:SOFTWAREMicrosoftPowerShellCoreInstalledVersions -ErrorAction stop | Get-ItemProperty -Name SemanticVersion ).SemanticVersion
 } catch {
 Write-Host "PowerShell 7.1 or higher is not installed, can't query the registry for previous PowerShell Core versions." -ForegroundColor Yellow
 }
}
Invoke-Command -ComputerName srv2019 -ScriptBlock $script
デスクトップ版とコア版のレジストリ方式を使用したリモートシステムのクエリ

デスクトップ版とコア版のレジストリ方式を使用したリモートシステムのクエリ

このメソッドは、返されたバージョンに関して絶対的に信頼できますが、その構文は日常の使用にはかなり長いです。 幸いなことに、もう1つの方法が利用できます。

$PSVersionTable変数

最後に、おそらく最も有用なメソッドである、$PSVersionTableと呼ばれる別の自動変数について見ていきます。 これは、PowerShellエンジンの正しいバージョンだけでなく、そのエディション(デスクトップまたはコア)も提供する非常に信頼性の高い方法です。 このコマンドを実行して、バージョンプロパティを展開します。

$PSVersionTable.PSversion
$PSVersionTable変数の使用

$PSVersionTable変数の使用

リモートホストでPowerShellのバージョンを確認する

この方法は、PowerShellのバージョンをリモートで確認する場合にも効果的です。 呼び出す-コマンド

$PSVersionTableを使用したリモートコンピューターのクエリ

$PSVersionTableを使用したリモートコンピューターのクエリ

注意—スクリーンキャプチャでは、PowerShell 7でコマンドを実行したことがわかりますが、得られた結果は、デスクトップ版であるバージョン5.1でした。

これは、デフォルトで、 呼び出す-コマンド 特に指定がない限り、常にWindowsPowerShellリモーティングエンドポイントに接続します。 そのサーバーにインストールしたコアバージョンを知りたい場合は、コマンドに-ConfigurationNameパラメーターを追加する必要があります。

$PSVersionTableを使用したCoreエディションバージョンのクエリ

$PSVersionTableを使用したCoreエディションバージョンのクエリ

以下の小さなコードは、リモートシステムにすべての可能なバージョンとエディションを問い合わせます。

Invoke-Command -ComputerName srv2019 -ScriptBlock {$PSVersionTable.PSVersion}
try {
    Invoke-Command -ComputerName srv2019 -ConfigurationName "powershell.6" -ScriptBlock {$PSVersionTable.PSVersion} -ErrorAction stop
} catch { 
    Write-Host "PowerShell 6 is not installed" -ForegroundColor Yellow
}
try {  
    Invoke-Command -ComputerName srv2019 -ConfigurationName "powershell.7" -ScriptBlock {$PSVersionTable.PSVersion} -ErrorAction stop
} catch {  
    Write-Host "PowerShell 7 is not installed" -ForegroundColor Yellow
}
インストールされているすべてのバージョンを取得する

インストールされているすべてのバージョンを取得する

この方法は、これまでで最も正確で最も使いやすい方法です。

LinuxでPowerShellのバージョンを確認する ^

Linuxは、PowerShellのCoreエディションのみをサポートします。 さらに、PowerShellインストールの更新は通常、インプレースアップグレードであるため、最終的には、PowerShellのバージョンを1つだけインストールできます。

Linuxにはレジストリがないため、使用できる方法は3つあります。Get-Host $host変数、 そしてその $ PSVersionTable 変数。

LinuxでPowerShellバージョンを取得する

LinuxでPowerShellバージョンを取得する

これらの方法はすべてLinuxで機能します。 Get-Hostメソッドに関しては、LinuxでもWindowsと同じ動作、特にリモートでの動作が期待されますが、テストはしていません。

macOSでPowerShellのバージョンを確認する ^

MacOSは、PowerShellのコアエディションのみをサポートします。 Linuxと同様に、新しいバージョンは通常、インプレースアップグレードです。

MacOSのメソッドもLinuxのメソッドと同じです—Get-亭主$ host 変数、および $ PSVersionTable 変数。

4sysopsニュースレターを購読してください!

MacOSでPowerShellバージョンを取得する

MacOSでPowerShellバージョンを取得する

最後の言葉 ^

この投稿では、Windows、Linux、およびmacOSにインストールされているPowerShellのバージョンとエディションを確認する方法に関する包括的なガイドを提供します。 また、2つのエディションを区別する方法と、情報をリモートで確認する方法も学習しました。

The post PowerShellのバージョンを確認する方法– 4sysops appeared first on Gamingsym Japan.