インストールされているPowerShellのバージョンを確認する


2632

コンピューターにインストールされているPowerShellのバージョンを確認するにはどうすればよいですか。

回答:


3585

$PSVersionTable.PSVersionエンジンのバージョンを判別するために使用します。変数が存在しない場合は、エンジンがバージョンであると想定しても安全1.0です。

なお$Host.Versionかつ(Get-Host).Version信頼性がありません-彼らは、ホストだけでなく、エンジンのバージョンを反映しています。PowerGUI、PowerShellPLUSなどはすべてホストアプリケーションであり、製品のバージョンを反映するようにホストのバージョンを設定します。これは完全に正しいですが、探しているものではありません。

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1

2
@DanielCassidy-パーティーに2年遅れましたが、「一部の機能は説明できないほど使用できません」は、.Net 3.5 Compactフレームワーク全体をインストールするのではなく、完全にインストールしたことが原因である可能性があります。
Dave Neeley、2012

83
$PSVersionTableより信頼性が高く、$ PSVersionを返します。も使用できます$PSVersionTable.PSVersion。別のバージョン(invoke-command -computername myRemotePC -Credential foo {$host})を実行しているマシンにリモートで接続している場合でも$host、シリアル化について合意した最も低いバージョンが表示されるだけのように見えます。ながら$PSVersionTable本当のバージョンを表示します。それが誰かを助けることを願って..
バルカンレイヴン

16
$ host.Versionは適切な選択ではないようです。PowerShell3を実行しているマシンから離れている場合は、RemotingHostがv1のように見えるため、1.0に戻ります。$ PSVersionTableを使用すると、正しく3が返されます
Danny Tuppeny

25
@Starfish表示されているコマンドは、コマンドプロンプトを使用してPowershellを起動します。インストールされていない場合、コマンドは「Powershellが見つかりません」というエラーメッセージを表示しませんか?
jpmc26

9
このためにここに戻ってくるのにうんざりしているので、走っnotepad $profileて捨てfunction psver { $PSVersionTable; $PSVersionTable.PSVersion }たところです。でリロードする. $profileと、psverいつでも入力して詳細なバージョン情報やその他の詳細を取得できます。
ADTC、2016年

434

Get-Hostまたは$ PSVersionTableを使用します。Andy Schneiderが指摘するように、$PSVersionTableバージョン1 では機能しません。バージョン2で導入されました。

get-host

Name             : ConsoleHost
Version          : 2.0
InstanceId       : d730016e-2875-4b57-9cd6-d32c8b71e18a
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : en-GB
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

$PSVersionTable

Name                           Value
----                           -----
CLRVersion                     2.0.50727.4200
BuildVersion                   6.0.6002.18111
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

5
ありがとうございました!注意:v1 Powershellから手動でアップグレードしたXPでは、実際のフォルダーとレジストリパス(誤解を招く恐れがありますか?!)はv2ではなくv1を参照しています。これはここで他の人が指定するとおりですが、インストールしたかどうかがとても心配になった理由です。私の道は; C:\ WINDOWS \ system32 \ windowspowershell \ v1.0
AnneTheAgile

4
$ psversiontableが存在しない場合は、v1.0を使用していると想定してもまったく問題ありません。また、プレストも質問に回答します。$host.version信頼性がありません-たとえばpowerguiでは、powershellエンジンのバージョンと同じではないpowerguiホストのバージョンを返します(これは望ましいことです)
x0n

10
受け入れられた回答は、「... $ Host.Versionおよび(Get-Host).Versionは信頼できない-エンジンではなくホストのバージョンのみを反映している」と述べています。
Peter Mortensen 2017年

100

組み込み変数を見ることができます$psversiontable。存在しない場合は、V1です。存在する場合は、必要な情報をすべて提供します。

1 >  $psversiontable

Name                           Value                                           
----                           -----                                           
CLRVersion                     2.0.50727.4927                                  
BuildVersion                   6.1.7600.16385                                  
PSVersion                      2.0                                             
WSManStackVersion              2.0                                             
PSCompatibleVersions           {1.0, 2.0}                                      
SerializationVersion           1.1.0.1                                         
PSRemotingProtocolVersion      2.1    

97

PowerShellがインストールされているかどうかを確認するには、レジストリの存在を確認します

HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install

そして

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3

存在する場合は、ブログ投稿の「PowerShellがインストールされているかどうかとバージョンを確認する」で詳しく説明されているように、値が1(インストールされている場合)かどうか。

インストールされているPowerShellのバージョンを確認するには、レジストリキーを確認します

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\PowerShellVersion

そして

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine\PowerShellVersion

.ps1スクリプトからインストールされているPowerShellのバージョンを確認するには、次の1行を使用できます。詳細については、PowerShell.comの「実行しているPowerShellのバージョン」を参照してください

$isV2 = test-path variable:\psversiontable

同じサイトは、バージョンを返す関数も提供しています。

function Get-PSVersion {
    if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"}
}

4
Windows 2003サーバーでPowerShellのスタートメニューエントリを見つけることができなかったので便利でしたが(それはありましたが、明確ではありませんでした)、レジストリキーが私の質問に答えました。
Holistic Developer

7
PowerScript 3.0の場合、新しいエントリHKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1に加えて)があるようです。この場合、バージョンを取得するための適切な場所は、HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3 \ PowerShellEngine \ PowerShellVersion(サンプル値は "3.0")のようです。
Peter Mortensen 2013

49

コマンドプロンプトなどからPowerShellを外部から起動するだけで、1行でバージョンを直接確認できます。

powershell -Command "$PSVersionTable.PSVersion"

@psaulによると、実際には、それがどこから来たかに依存しない1つのコマンド(CMD、PowerShell、またはPwsh)を持つことができます。有難うございます。

powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"

私はテストしたところ、CMDとPowerShellの両方で問題なく動作しました。

画像


「System.Collections.Hashtable.PSVersion:「System.Collections.Hashtable.PSVersion」という用語は、コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されません。名前のスペル、またはパスが含まれていた場合は、パスが正しいことを確認して、もう一度お試しください。」常に機能するとは限りません
Gonmator、

コーナーケースを知っておくのは良いので、あなたがそれを指摘してくれてうれしいですが、私はそれが大多数の人々のためにまだうまくいくと思います。
パトリックバード

@Gonmatorでは、PowerShellはこのコマンドでも同じように動作すると思いますが、残念ながら動作しません。構文を修正して、その間cmdで不可知論的に機能するようにしpowershellて、役に立たないようにしました。私も同じ動作を期待していました。:)
tresf 2018

3
@tresf(および@Gonmator)は、これをCMD、PowerShell、またはPwsh(PS 6.0)からも不可知的に実行できますが、次の形式を使用する必要があります:powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"(すべてのケースで機能)
PSaul 2018

Macでもテスト済み。 pwsh -Command "(Get-Variable PSVersionTable -ValueOnly).PSVersion" よく働く。
tresf

38

次のチェックを完了すると、Windows PowerShellのバージョンがインストールされていることを確認できます。

  1. [スタート]、[すべてのプログラム]、[アクセサリ]、[Windows PowerShell]、[Windows PowerShell]の順にクリックします。
  2. Windows PowerShellコンソールのコマンドプロンプトで次のコマンドを入力し、Enterキーを押します。

    Get-Host | Select-Object Version

次のような出力が表示されます。

Version
-------
3.0

http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/


1
PowerShellがデフォルトのオプションでインストールされ、ショートカットがスタートメニューから削除されなかったと想定しています。レジストリテストを使用することをお勧めします。
Xalorous

最初にPowerShellを使用する必要がある場合は、標準で実行しようとしてインストールする必要があると思います。次に、アイコンが見つからない場合は、検索しようとします。コマンドプロンプトから実行しようとしている可能性があります。私はあなたがレジストリから始めるとは思わない。
Eclipses

6
受け入れられた回答は、「... $ Host.Versionおよび(Get-Host).Versionは信頼できない-エンジンではなくホストのバージョンのみを反映している」と述べています。
Peter Mortensen 2017年

21

PowerShellがインストールされているかどうかを確認し、インストールされているバージョンを確認するための、Microsoftが推奨する上位互換性のある方法は、2つの特定のレジストリキーを調べることです。リンクが切れた場合の詳細をここに再現しました。

リンクされたページによると:

他のレジストリキー、PowerShell.exeのバージョン、またはPowerShell.exeの場所によっては、長期的には動作しない場合があります。

PowerShellのバージョンがインストールされているかどうを確認するには、レジストリで次の値を確認します。

  • 主な場所: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
  • 値の名前:インストール
  • 値のタイプ:REG_DWORD
  • 値のデータ:0x00000001(1

PowerShellのバージョン1.0または2.0がインストールされているかどうかを確認するには、レジストリで次の値を確認します。

  • 主な場所: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
  • 値の名前:PowerShellVersion
  • 値のタイプ:REG_SZ
  • 値のデータ:<1.0 | 2.0>

5
PowerShell 3.0の場合、新しいHKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 3があるようです。
Peter Mortensen 2013

11

インストールされているかどうかを確認する最も簡単な方法は次のとおりです。

  • コマンドプロンプトを実行します(開始、実行、 cmd、次に[OK])。
  • 入力powershellしてリターンを押します。次に、PowerShell PSプロンプトが表示されます。

C:\Users\MyUser>powershell

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\MyUser>

次に、次のように入力して、PowerShellプロンプトからバージョンを確認できます$PSVersionTable.PSVersion

PS C:\Users\MyUser> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1

PS C:\Users\MyUser>

タイプexitあなたは(プロンプトコマンドに戻りたい場合はexit、あなたがにも近く、コマンドプロンプトたい場合は、再度)。

スクリプトを実行するには、http: //ss64.com/ps/syntax-run.htmlを参照してください


3
受け入れられた回答と同様に これはPowerShell 1.0に対して何も返しません。レジストリメソッドはより明示的です。
Peter Mortensen

4
powershellがパスになかった場合、このバージョンはインストールされていないという誤った印象を与えます。レジストリメソッドは完全な情報を提供します。存在とバージョン。
Xalorous

9

$host.version単純に間違っている/信頼できない。これにより、エンジン自体のバージョンではなく、ホスティング実行可能ファイル(powershell.exe、powergui.exe、powershell_ise.exe、powershellplus.exeなど)のバージョンがわかります。

エンジンのバージョンはに含まれてい$psversiontable.psversionます。PowerShell 1.0の場合、この変数は存在しないため、この変数が使用できない場合は、明らかにエンジンが1.0であると想定しても完全に安全です。


9

使用する:

$psVersion = $PSVersionTable.PSVersion
If ($psVersion)
{
    #PowerShell Version Mapping
    $psVersionMappings = @()
    $psVersionMappings += New-Object PSObject -Property @{Name='5.1.14393.0';FriendlyName='Windows PowerShell 5.1 Preview';ApplicableOS='Windows 10 Anniversary Update'}
    $psVersionMappings += New-Object PSObject -Property @{Name='5.1.14300.1000';FriendlyName='Windows PowerShell 5.1 Preview';ApplicableOS='Windows Server 2016 Technical Preview 5'}
    $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.494';FriendlyName='Windows PowerShell 5 RTM';ApplicableOS='Windows 10 1511 + KB3172985 1607'}
    $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.122';FriendlyName='Windows PowerShell 5 RTM';ApplicableOS='Windows 10 1511 + KB3140743 1603'}
    $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.117';FriendlyName='Windows PowerShell 5 RTM 1602';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1'}
    $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.63';FriendlyName='Windows PowerShell 5 RTM';ApplicableOS='Windows 10 1511 + KB3135173 1602'}
    $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10586.51';FriendlyName='Windows PowerShell 5 RTM 1512';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1'}
    $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10514.6';FriendlyName='Windows PowerShell 5 Production Preview 1508';ApplicableOS='Windows Server 2012 R2'}
    $psVersionMappings += New-Object PSObject -Property @{Name='5.0.10018.0';FriendlyName='Windows PowerShell 5 Preview 1502';ApplicableOS='Windows Server 2012 R2'}
    $psVersionMappings += New-Object PSObject -Property @{Name='5.0.9883.0';FriendlyName='Windows PowerShell 5 Preview November 2014';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows 8.1'}
    $psVersionMappings += New-Object PSObject -Property @{Name='4.0';FriendlyName='Windows PowerShell 4 RTM';ApplicableOS='Windows Server 2012 R2, Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8.1, and Windows 7 SP1'}
    $psVersionMappings += New-Object PSObject -Property @{Name='3.0';FriendlyName='Windows PowerShell 3 RTM';ApplicableOS='Windows Server 2012, Windows Server 2008 R2 SP1, Windows 8, and Windows 7 SP1'}
    $psVersionMappings += New-Object PSObject -Property @{Name='2.0';FriendlyName='Windows PowerShell 2 RTM';ApplicableOS='Windows Server 2008 R2 SP1 and Windows 7'}
    foreach ($psVersionMapping in $psVersionMappings)
    {
        If ($psVersion -ge $psVersionMapping.Name) {
            @{CurrentVersion=$psVersion;FriendlyName=$psVersionMapping.FriendlyName;ApplicableOS=$psVersionMapping.ApplicableOS}
            Break
        }
    }
}
Else{
    @{CurrentVersion='1.0';FriendlyName='Windows PowerShell 1 RTM';ApplicableOS='Windows Server 2008, Windows Server 2003, Windows Vista, Windows XP'}
}

詳細なスクリプトは、インストールされているPowerShellのバージョンを確認する方法からダウンロードできます。


8

このページを忘れて二度と戻らない最も簡単な方法は、次のことを学ぶことですGet-Variable

Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}

すべての変数を覚えておく必要はありません。ただGet-Variable十分です(そして「バージョンについて何かがあるはずです」)。


8
これは同じです$PSVersionTable
orad

6
PSバージョンをお探しですか?$ PSVersion [タブ] [入力]と入力します。できました。何も覚える必要はありません:)
orad

1
これは、使用されるパイピングトリックに精通している場合にのみ役立ちます。初心者は、$ PSVersionTableを覚えておくよりも簡単にそのすべての構文を覚えられるようになることは決してないでしょう
ジョセフガブリエル

1
皆さん、Get-Variableは単独でうまく機能します(バージョンを取得するために必要なものがすべてあれば)、そこには冗談があります:)パイプ構文を覚えていません。
Roman Pokrovskij

7

PowerShellがインストールされているかどうかを確認するには、次を使用します。

HKLM\Software\Microsoft\PowerShell\1 Install ( = 1 )

RC2またはRTMがインストールされているかどうかを確認するには、以下を使用します。

HKLM\Software\Microsoft\PowerShell\1 PID (=89393-100-0001260-00301) -- For RC2
HKLM\Software\Microsoft\PowerShell\1 PID (=89393-100-0001260-04309) -- For RTM

出典:このウェブサイト


7

最も有用な答えはif existsの部分に対応していなかったので、私は迅速で汚い解決策を介してそれを取り上げると思いました。これは、PowerShellがパス環境変数に含まれていることに依存しています。(私はそれを知らなかったので、トップの回答にヒントを付けます。)これをテキストファイルに貼り付けて名前を付けます

Powershell Version.cmdをテストする

または類似。

@echo off
echo Checking powershell version...
del "%temp%\PSVers.txt" 2>nul
powershell -command "[string]$PSVersionTable.PSVersion.Major +'.'+ [string]$PSVersionTable.PSVersion.Minor | Out-File ([string](cat env:\temp) + '\PSVers.txt')" 2>nul
if errorlevel 1 (
 echo Powershell is not installed. Please install it from download.Microsoft.com; thanks.
) else (
 echo You have installed Powershell version:
 type "%temp%\PSVers.txt"
 del "%temp%\PSVers.txt" 2>nul
)
timeout 15

4

PowerShellのバージョンを確認してから、適切なコードを実行する必要がありました。一部のサーバーはv5を実行し、他のサーバーはv4を実行しています。これは、compressなどの一部の機能が使用できる場合と使用できない場合があります。

これは私の解決策です:

if ($PSVersionTable.PSVersion.Major -eq 5) {
    #Execute code available in PowerShell 5, like Compress
    Write-Host "You are running PowerShell version 5"
}
else {
    #Use a different process
    Write-Host "This is version $PSVersionTable.PSVersion.Major"
}


1

これは「Batch file get powershell version」の上位の検索結果なので、powershellのバージョンに応じてバッチファイルで条件付きフローを実行する方法の基本的な例を提供したいと思います

一般的な例

powershell "exit $PSVersionTable.PSVersion.Major"
if %errorlevel% GEQ 5 (
    echo Do some fancy stuff that only powershell v5 or higher supports
) else (
    echo Functionality not support by current powershell version.
)

実例

powershell "exit $PSVersionTable.PSVersion.Major"
if %errorlevel% GEQ 5 (
    rem Unzip archive automatically
    powershell Expand-Archive Compressed.zip
) else (
    rem Make the user unzip, because lazy
    echo Please unzip Compressed.zip prior to continuing...
    pause
)

0

PowerShellコマンドラインから「ホスト」コマンドを呼び出すこともできます。$host変数の値が表示されます。


3
これは少し間違っています。 hostに解決されGet-Hostます。いずれにしても、バージョンを取得するための信頼できる方法ではありません。
Maximilian Burszley

-1

選択演算子を使用して回答を拡張する:

Get-Host | select {$_.Version}

7
受け入れられた回答は、「... $ Host.Versionおよび(Get-Host).Versionは信頼できない-エンジンではなくホストのバージョンのみを反映している」と述べています。
Peter Mortensen 2017年

@PeterMortensenは私の回答が承認される前のようでした
HaBo

2
@HaBo何を見てるの?受け入れられた回答は2009
。– TylerH

@TylerHだから何?私はあなたの質問に従っていません。私の答えは、それが受け入れられた答えへの拡張であるとはっきり述べています。その簡略版。
HaBo

2
@HaBo以前のコメントは、回答が承認された回答の前に投稿されたという事実によって回答を正当化しているように見えますが、そうではありません。回答は、受け入れられた回答の7年後に投稿され、回答の6年後に実際に「延長」されました。それについて言えば、あなたの答えは、それが受け入れられた答えの拡張であることを明確に示していません(これもを使用していませんGet-Host)。
TylerH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.