确定已安装的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版本:

  1. 单击开始,单击所有程序,单击附件,单击Windows PowerShell,然后单击Windows PowerShell。
  2. 在Windows PowerShell控制台中,在命令提示符下键入以下命令,然后按ENTER键:

    Get-Host | select对象版本

你会看到如下所示的输出:

 Version ------- 3.0 

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

我发现检查是否安装的最简单的方法是:

  • 运行命令提示符(开始,运行, cmd ,然后确定)
  • 键入powershell然后回车。 然后您应该得到PowerShell PS提示符:
 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命令行中调用“主机”命令。 它应该给你$hostvariables的值。

忘记这个页面并且永远不会返回的最简单的方法就是学习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