确定已安装的 PowerShell 版本

如何确定计算机上安装了哪个版本的 PowerShell,以及是否确实安装了该版本?

答案

使用$PSVersionTable.PSVersion确定引擎版本。如果变量不存在,则可以安全地假定引擎为1.0版。

请注意, $Host.Version(Get-Host).Version不可靠 - 它们仅反映主机的版本,而不反映引擎的版本。 PowerGUI,PowerShellPLUS 等都是托管应用程序,它们将设置主机的版本以反映其产品版本 - 完全正确,但不是您想要的。

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

您可以查看内置变量$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

,如果存在,则该值是否为 1(对于已安装),如博客文章中所述。 检查 PowerShell 是否已安装和版本

要确定已安装的 PowerShell 的版本,可以检查注册表项

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

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

要确定从. ps1 脚本安装的 PowerShell 版本,可以使用以下单行代码,如我正在运行 PowerShell 版本的 PowerShell.com 上所述

$isV2 = test-path variable:\psversiontable

同一站点还提供了返回版本的功能:

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

您只能通过从外部调用 PowerShell(例如从命令提示符)直接用一行来检查版本。

powershell -Command "$PSVersionTable.PSVersion"

根据@psaul 的说法,您实际上可以有一个与它的来源无关的命令(CMD,PowerShell 或 Pwsh)。谢谢你

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

我已经测试过,它在 CMD 和 PowerShell 上都可以正常工作。

图片

您可以通过完成以下检查来验证是否安装了 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/

Microsoft 建议使用向前兼容的方法来检查是否已安装 PowerShell 并确定已安装的版本是查看两个特定的注册表项。如果链接断开,我将在此复制详细信息。

根据链接的页面:

取决于任何其他注册表项,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>

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

  • 运行命令提示符(“开始”,“运行”,“ 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 (如果要关闭命令提示符,请再次exit )。

要运行脚本,请参阅http://ss64.com/ps/syntax-run.html

$host.version是错误的 / 不可靠的。这为您提供了托管可执行文件的版本(powershell.exe,powergui.exe,powershell_ise.exe,powershellplus.exe 等),而不是引擎本身的版本。

引擎版本包含在$psversiontable.psversion 。对于 PowerShell 1.0,此变量不存在,因此很明显,如果此变量不可用,则可以很明显地假设引擎为 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 版本” 中下载详细脚本。