确定已安装的PowerShell版本
如何确定计算机上安装了哪个版本的PowerShell?实际上,是否安装了PowerShell?
使用$PSVersionTable.PSVersion
来确定引擎版本。 如果该variables不存在,则认为该引擎是1.0
版是安全的。
请注意, $Host.Version
和(Get-Host).Version
是不可靠的 – 它们仅反映主机的版本,而不是引擎。 PowerGUI,PowerShellPLUS等都是托pipe应用程序,他们将设置主机的版本,以反映他们的产品版本 – 这是完全正确的,但不是你在找什么。
PS C:\> $PSVersionTable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 4 0 -1 -1
我会使用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
要确定是否安装了PowerShell,可以检查registry是否存在
HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install
和
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3
如果存在,值是否为1(针对已安装),详见博客文章检查是否安装了PowerShell和版本 。
要确定已安装的PowerShell的版本,可以检查registry项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\PowerShellVersion
和
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine\PowerShellVersion
要确定从.ps1脚本安装的PowerShell的版本,可以使用以下一行,详细信息请参阅PowerShell.com上的“我正在运行的PowerShell版本” 。
$isV2 = test-path variable:\psversiontable
同一个网站也提供了一个函数来返回版本:
function Get-PSVersion { if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"} }
你可以看看内置的variables$ 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是否已安装并确定安装版本的兼容方法是查看两个特定的registry项。 我已经在这里复制的细节,以防链接中断。
根据链接页面:
根据任何其他registry项或PowerShell.exe的版本或PowerShell.exe的位置不能保证长期工作。
要检查是否安装了任何版本的PowerShell,请在registry中检查以下值:
- 关键位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
- 值名称:安装
- 值types:REG_DWORD
- 数值数据:0x00000001(1
要检查是否安装了PowerShell 版本1.0或2.0 ,请在registry中检查以下值:
- 关键位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
- 值名称:PowerShellVersion
- 值types:REG_SZ
- 数值数据:<1.0 | 2.0>
您可以通过完成以下检查来validation是否安装了Windows PowerShell版本:
- 单击开始,单击所有程序,单击附件,单击Windows PowerShell,然后单击Windows PowerShell。
-
在Windows PowerShell控制台中,在命令提示符下键入以下命令,然后按ENTER键:
Get-Host | select对象版本
你会看到如下所示的输出:
Version ------- 3.0
http://www.myerrorsandmysolutions.com/how-to-verify-the-windows-powershell-version-installed/
我发现检查是否安装的最简单的方法是:
- 运行命令提示符(开始,运行,
cmd
,然后确定) - 键入
powershell
然后回车。 然后您应该得到PowerShellPS
提示符:
C:\Users\MyUser>powershell Windows PowerShell Copyright (C) 2009 Microsoft Corporation. All rights reserved. PS C:\Users\MyUser>
然后,您可以通过键入$PSVersionTable.PSVersion
从PowerShell提示符检查版本:
PS C:\Users\MyUser> $PSVersionTable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 2 0 -1 -1 PS C:\Users\MyUser>
如果要返回到命令提示符,请键入exit
(如果还想closures命令提示符,请再次exit
)。
要运行脚本,请参阅http://ss64.com/ps/syntax-run.html 。
只是想在这里添加我的2美分。
您只能用一行直接检查版本
powershell -Command "$PSVersionTable.PSVersion"
要检查是否安装了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
来源: 本网站 。
$host.version
只是错误的/不可靠的。 这给你的主机可执行文件(powershell.exe,powergui.exe,powershell_ise.exe,powershellplus.exe等)的版本,而不是引擎本身的版本。
引擎版本包含在$psversiontable.psversion
。 对于PowerShell 1.0,这个variables不存在,所以显然如果这个variables不可用,那么显然假设引擎是1.0是完全安全的。
使用:
$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版本”下载详细的脚本。
由于最有用的答案没有解决如果存在的部分,我想我会给一个通过一个快速和肮脏的解决scheme。 它依赖于PowerShell在path环境variables ,这可能是你想要的。 (帽子顶部的答案,因为我不知道这一点。)将其粘贴到一个文本文件并命名
testingPowershell 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
用下面的命令尝试一下:
Get-Host
看到这里
您也可以从PowerShell命令行中调用“主机”命令。 它应该给你$host
variables的值。
忘记这个页面并且永远不会返回的最简单的方法就是学习Get-Variable
:
Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}
没有必要记住每个variables。 只要Get-Variable
就足够了(“应该有关于版本的东西”)。
使用Get-Host命令。 结果的第二行是版本。
用select运算符扩展答案:
Get-Host | select {$_.Version}
下面的cmdlet将返回PowerShell版本。
$PSVersionTable.PSVersion.Major
试试;) ((Get-Host).Version).Major
使用Get-Host获取PowerShell版本的详细信息:
PS C:\Users\ashash001c> Get-Host Name : ConsoleHost Version : 2.0 InstanceId : ################################## UI : System.Management.Automation.Internal.Host.InternalHostUserI nterface CurrentCulture : en-US CurrentUICulture : en-US PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace
# Get PowerShell Version function Global:version { $PSVersionTable.PSVersion }
如果你只是想检查一下,以确保你有一个主要的版本号,你可以在variables$host.version.major
得到这个数字:
if (2 -ge $host.version.major) { "Make it so!" } else { "Full Stop!" }
通常情况下,你可以使用你可以得到的主要号码来获得它:
$PSVersionTable.PSVersion.Major