回答:
$PSVersionTable.PSVersion
エンジンのバージョンを判別するために使用します。変数が存在しない場合は、エンジンがバージョンであると想定しても安全1.0
です。
なお$Host.Version
かつ(Get-Host).Version
信頼性がありません-彼らは、ホストだけでなく、エンジンのバージョンを反映しています。PowerGUI、PowerShellPLUSなどはすべてホストアプリケーションであり、製品のバージョンを反映するようにホストのバージョンを設定します。これは完全に正しいですが、探しているものではありません。
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
4 0 -1 -1
$PSVersionTable
より信頼性が高く、$ PSVersionを返します。も使用できます$PSVersionTable.PSVersion
。別のバージョン(invoke-command -computername myRemotePC -Credential foo {$host}
)を実行しているマシンにリモートで接続している場合でも$host
、シリアル化について合意した最も低いバージョンが表示されるだけのように見えます。ながら$PSVersionTable
本当のバージョンを表示します。それが誰かを助けることを願って..
notepad $profile
て捨てfunction psver { $PSVersionTable; $PSVersionTable.PSVersion }
たところです。でリロードする. $profile
と、psver
いつでも入力して詳細なバージョン情報やその他の詳細を取得できます。
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
$host.version
信頼性がありません-たとえばpowerguiでは、powershellエンジンのバージョンと同じではないpowerguiホストのバージョンを返します(これは望ましいことです)
組み込み変数を見ることができます$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
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"}
}
コマンドプロンプトなどからPowerShellを外部から起動するだけで、1行でバージョンを直接確認できます。
powershell -Command "$PSVersionTable.PSVersion"
@psaulによると、実際には、それがどこから来たかに依存しない1つのコマンド(CMD、PowerShell、またはPwsh)を持つことができます。有難うございます。
powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
私はテストしたところ、CMDとPowerShellの両方で問題なく動作しました。
cmd
で不可知論的に機能するようにしpowershell
て、役に立たないようにしました。私も同じ動作を期待していました。:)
pwsh -Command "(Get-Variable PSVersionTable -ValueOnly).PSVersion"
よく働く。
次のチェックを完了すると、Windows PowerShellのバージョンがインストールされていることを確認できます。
Windows PowerShellコンソールのコマンドプロンプトで次のコマンドを入力し、Enterキーを押します。
Get-Host | Select-Object Version
次のような出力が表示されます。
Version
-------
3.0
http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/
PowerShellがインストールされているかどうかを確認し、インストールされているバージョンを確認するための、Microsoftが推奨する上位互換性のある方法は、2つの特定のレジストリキーを調べることです。リンクが切れた場合の詳細をここに再現しました。
リンクされたページによると:
他のレジストリキー、PowerShell.exeのバージョン、またはPowerShell.exeの場所によっては、長期的には動作しない場合があります。
PowerShellのバージョンがインストールされているかどうかを確認するには、レジストリで次の値を確認します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
PowerShellのバージョン1.0または2.0がインストールされているかどうかを確認するには、レジストリで次の値を確認します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
インストールされているかどうかを確認する最も簡単な方法は次のとおりです。
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
、あなたがにも近く、コマンドプロンプトたい場合は、再度)。
使用する:
$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のバージョンを確認する方法からダウンロードできます。
このページを忘れて二度と戻らない最も簡単な方法は、次のことを学ぶことですGet-Variable
。
Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}
すべての変数を覚えておく必要はありません。ただGet-Variable
十分です(そして「バージョンについて何かがあるはずです」)。
$PSVersionTable
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
出典:このウェブサイト。
最も有用な答えは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
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"
}
以下のコマンドレットは、PowerShellのバージョンを返します。
$PSVersionTable.PSVersion.Major
$PSVersionTable
自動変数です。オブジェクト。コマンドレットではありません。
これは「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
)
PowerShellコマンドラインから「ホスト」コマンドを呼び出すこともできます。$host
変数の値が表示されます。
host
に解決されGet-Host
ます。いずれにしても、バージョンを取得するための信頼できる方法ではありません。
選択演算子を使用して回答を拡張する:
Get-Host | select {$_.Version}
Get-Host
)。