Determinar a versão PowerShell instalada

Como É Que posso determinar que versão do PowerShell está instalada num computador e, na verdade, se está instalada?

 2143
Author: MagicAndi, 2009-12-01

22 answers

Utilizar $PSVersionTable.PSVersion para determinar a versão do motor. Se a variável não existir, é seguro assumir que o motor é a versão 1.0.

Note que $Host.Version e (Get-Host).Version não são fiáveis - reflectem a versão do host apenas, não o motor. PowerGUI, PowerShellPLUS, etc. são todas aplicações de hospedagem, e eles irão definir a versão do host para refletir o seu produto versão-o que é inteiramente correto, mas não o que você está procurando.

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1
 2877
Author: 12 revs, 10 users 74%user156862, 2018-07-24 01:09:51

Eu usaria qualquer um deles. Get-Host ou $Psversitable . Como Andy Schneider aponta, $PSVersionTable não funciona na versão 1; foi introduzido na versão 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
 380
Author: Thomas Bratt, 2018-06-02 18:50:10

Para determinar se o PowerShell está instalado, pode verificar no registo a existência de

HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install

E

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3

E, se existir, se o valor é 1 (Para instalado), conforme detalhado no post do blogverificar se o PowerShell está instalado e a versão.

Para determinar a versão do PowerShell que está instalada, poderá verificar as chaves do registo

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

E

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

Para determinar a versão do PowerShell que está instalado a partir de um script. ps1, você pode usar o seguinte one-liner, como detalhado em PowerShell.com em que versão PowerShell estou a executar.

$isV2 = test-path variable:\psversiontable

O mesmo site também dá uma função para devolver a versão:

function Get-PSVersion {
    if (test-path variable:psversiontable) {$psversiontable.psversion} else {[version]"1.0.0.0"}
}
 87
Author: MagicAndi, 2015-12-14 00:30:32

Você pode olhar para a variável incorporada, $psversiontable. Se não existir, tem V1. Se existir, dar-lhe-á toda a informação de que necessita.

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    
 78
Author: Andy Schneider, 2018-06-02 18:50:26
Só quero acrescentar os meus dois cêntimos.

Só poderá verificar directamente a versão com uma linha invocando o powershell externamente , como a partir do comando Prompt

powershell -Command "$PSVersionTable.PSVersion"

Editar:

De acordo com @psaul você pode realmente ter um comando que é agnóstico de onde veio (CMD, Powershell ou Pwsh), obrigado por isso.

powershell -command "(Get-Variable PSVersionTable -ValueOnly).PSVersion" 
Eu testei e funcionou perfeitamente no CMD e no CMD. Powershell

image

 27
Author: Patrick Bard, 2018-07-13 16:49:38

Pode verificar se a versão PowerShell do Windows instalada ao completar a seguinte verificação:

  1. Clique em Iniciar, clique em todos os programas, clique em Acessórios, clique em PowerShell do Windows e, em seguida, clique em PowerShell do Windows.
  2. Na consola PowerShell do Windows, escreva o seguinte comando na linha de comandos e depois carregue em ENTER:

    Get-Host | Select-Object Version

Você vai ver a saída que parece isto:

Version
-------
3.0

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

 21
Author: Eclipses, 2014-08-21 08:27:40

O método avançado compatível recomendado pela Microsoft para verificar se o PowerShell está instalado e determinar a versão instalada é olhar para duas chaves de registro específicas. Reproduzi os detalhes aqui, caso a ligação se quebre.

De acordo com a página ligada:

Dependendo de qualquer outra(s) Chave (s) de registo, ou versão do PowerShell.exe ou a localização de PowerShell.o exe não tem a garantia de trabalhar a longo prazo.

Para verificar se existe a versão do PowerShell está instalada, verifique o seguinte valor no registo:

  • Localização Da Chave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
  • Nome Do Valor: Install
  • Tipo de valor: REG_DWORD
  • dados relativos ao valor: 0x00000001 (1

Para verificar se a versão 1.0 ou 2.0 do PowerShell está instalada, verifique o seguinte valor no registo:

  • Localização Da Chave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
  • Nome Do Valor: PowerShellVersion
  • Tipo De Valor: REG_SZ
  • Dados Dos Valores:
 18
Author: Starfish, 2013-06-17 07:59:47

Encontrei a maneira mais fácil de verificar se o instalado era para:

  • execute uma linha de comandos (Iniciar, Executar, cmd, depois OK)
  • Tipo powershell depois carrega em return. Você deve então obter o PowerShell PS prompt:

C:\Users\MyUser>powershell

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

PS C:\Users\MyUser>

Você pode então verificar a versão a partir da linha de comandos PowerShell, escrevendo $PSVersionTable.PSVersion:

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

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

PS C:\Users\MyUser>

Tipo exit se quiser voltar à linha de comandos (exit de novo se quiser também fechar a linha de comandos).

Para correr programas, Ver http://ss64.com/ps/syntax-run.html.

 11
Author: SharpC, 2014-11-04 10:31:37

Utilizar:

$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'}
}

Pode obter o programa detalhado de Como determinar a versão PowerShell instalada.

 10
Author: Dale Chen, 2017-03-04 09:09:52

Para verificar se o PowerShell está instalado use:

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

Para verificar se o RC2 ou o RTM estão instalados use:

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

Fonte: este sítio web .

 8
Author: Daniel Elliott, 2013-03-19 14:19:22

$host.version é simplesmente errado / não confiável. Isto dá-Lhe a versão do executável de hospedagem (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe etc) e não a versão do próprio motor.

A versão do motor está contida em $psversiontable.psversion. Para PowerShell 1.0, Esta variável não existe, então obviamente se esta variável não está disponível é inteiramente seguro assumir que o motor é 1.0, obviamente.

 7
Author: x0n, 2013-08-26 14:11:13
A maneira mais fácil de esquecer esta página e nunca voltar a ela é aprender a Get-Variable:
Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}
Não há necessidade de recordar todas as variáveis. Just Get-Variable is enough (and"There should be something about version").
 7
Author: Roman Pokrovskij, 2017-01-03 09:57:42

Como a resposta mais útil não se refere à parte Se existe, pensei em dar uma resposta através de uma solução rápida e suja. Ele depende de PowerShell estar na variável de ambiente path que é provavelmente o que você quer. (Chapéu para a resposta superior como eu não sabia disso.) Cole isto num ficheiro e nomeie-o

Test Powershell Version.cmd

Ou semelhante.

@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
 6
Author: Pecos Bill, 2014-06-30 12:11:50

Você também pode chamar o comando "host" a partir da linha de comando PowerShell. Deve dar-lhe o valor da variável $host.

 4
Author: Tylor Durden, 2014-06-30 09:27:43

O cmdlet abaixo devolve a versão PowerShell.

$PSVersionTable.PSVersion.Major
 4
Author: Venkatakrishnan, 2017-03-04 09:08:28

Tente com o seguinte comando:

Get-Host

Visto aqui

 3
Author: , 2013-05-09 14:35:13

Alargar a resposta com um operador seleccionado:

Get-Host | select {$_.Version}
 3
Author: HaBo, 2016-03-04 21:55:10

Use o comandoGet-Host . A segunda linha do resultado é a versão.

 2
Author: Shami, 2014-12-05 19:51:28

Normalmente obtém-se com o número maior que se pode obter assim:

$PSVersionTable.PSVersion.Major
 2
Author: Jose Ortega, 2017-09-29 04:51:01

Tenta;) ((Get-Host).Version).Major

 1
Author: Ivandro Ismael, 2015-08-26 09:28:52
# Get PowerShell Version
function Global:version
{
      $PSVersionTable.PSVersion
}
 0
Author: Kolob Canyon, 2017-10-27 15:55:51

Use Get-Host para obter os detalhes para a versão 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
 -1
Author: Abhishek, 2014-12-30 21:50:50