ti-enxame.com

Determinar a versão do PowerShell instalada

Como posso determinar qual versão do PowerShell está instalada em um computador e, na verdade, se ela está instalada?

2272
MagicAndi

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

Note que $Host.Version e (Get-Host).Version não são confiáveis ​​- eles refletem A versão do Host apenas, não o mecanismo. PowerGUI, PowerShellPLUS, etc. são todos aplicativos de hospedagem, e Eles definirão a versão do Host para refletir sua versão do produto - o que é totalmente correto, mas não o que você está procurando por.

PS C:\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1
3091
user156862

Eu usaria Get-Host ou $ PSVersionTable. 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
400
Thomas Bratt

Para determinar se o PowerShell está instalado, você pode verificar o registro para 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 na postagem do blog Verifique se o PowerShell foi instalado e a versão.

Para determinar a versão do PowerShell que está instalada, você pode verificar as chaves do Registro 

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 é instalada a partir de um script .ps1, você pode usar o seguinte one-liner, conforme detalhado no PowerShell.com em Qual Versão do PowerShell Eu Estou em Execução.

$isV2 = test-path variable:\psversiontable

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

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

Você pode olhar para a variável interna, $psversiontable. Se não existe, você tem V1. Se existir, fornecerá todas as informações necessárias.

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    
88
Andy Schneider

Só quero adicionar meus 2 centavos aqui.

Você pode verificar diretamente a versão com apenas uma linha invocando powershell externally, como em Prompt de Comando.

powershell -Command "$PSVersionTable.PSVersion"

EDIT:

De acordo com @psaul você can realmente tem 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 em ambos CMD e Powershell

image

32
Patrick Bard

Você pode verificar se a versão do Windows PowerShell está instalada, concluindo a seguinte verificação:

  1. Clique em Iniciar, clique em Todos os Programas, clique em Acessórios, clique em Windows PowerShell e, em seguida, clique em Windows PowerShell.
  2. No console do Windows PowerShell, digite o seguinte comando no prompt de comando e, em seguida, pressione ENTER:

    Get-Host | Versão de objeto selecionado

Você verá a saída que se parece com isto:

Version
-------
3.0

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

22
Eclipses

O método compatível com encaminhamento recomendado pela Microsoft para verificar se o PowerShell está instalado e determinar a versão instalada é examinar duas chaves de registro específicas. Eu reproduzi os detalhes aqui caso o link se quebre.

De acordo com a página vinculada:

Dependendo de qualquer outra (s) chave (s) de registro, ou a versão do PowerShell.exe ou o local do PowerShell.exe não têm garantia de funcionar a longo prazo.

Para verificar se qualquer versão do PowerShell está instalada, verifique o seguinte valor no registro:

  • Localização chave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
  • Nome do valor: instalar
  • Tipo de valor: REG_DWORD
  • Dados do valor: 0x00000001 (1

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

  • Localização chave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
  • Nome do valor: PowerShellVersion
  • Tipo de valor: REG_SZ
  • Dados do valor: <1,0 | 2,0>
19
Starfish

Eu encontrei a maneira mais fácil de verificar se instalado foi para:

  • executar um prompt de comando (Iniciar, Executar, cmd e OK)
  • digite powershell e, em seguida, pressione Enter. Você deve então obter o prompt do PowerShell PS:

C:\Users\MyUser>powershell

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

PS C:\Users\MyUser>

Você pode verificar a versão no prompt do PowerShell digitando $PSVersionTable.PSVersion:

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

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

PS C:\Users\MyUser>

Digite exit se você quiser voltar ao prompt de comando (exit novamente se quiser fechar também o comando Prompt).

Para executar scripts, consulte http://ss64.com/ps/syntax-run.html .

11
SharpC

$Host.version é simplesmente errado/não confiável. Isso fornece a versão do executável de hospedagem (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe etc) e not a versão do próprio mecanismo.

A versão do mecanismo está contida em $psversiontable.psversion. Para o PowerShell 1.0, essa variável não existe, portanto, obviamente, se essa variável não estiver disponível, é totalmente seguro assumir que o mecanismo é 1.0, obviamente.

9
x0n

Usar:

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

Você pode baixar o script detalhado de Como determinar a versão instalada do PowerShell.

9
Dale Chen

Para verificar se o PowerShell está instalado, use:

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

Para verificar se o RC2 ou RTM está instalado, 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 site .

7
Daniel Elliott

A maneira mais fácil de esquecer esta página e nunca retornar a ela é aprender o Get-Variable

Get-Variable | where {$_.Name -Like '*version*'} | %{$_[0].Value}

Não há necessidade de lembrar de todas as variáveis. Apenas Get-Variable é suficiente (e "Deve haver algo sobre a versão"). 

6
Roman Pokrovskij

Uma vez que a resposta mais útil não abordou a parte if exists, pensei em dar uma olhada por meio de uma solução rápida e suja. Ele depende do PowerShell estar na variável path environment o que você provavelmente deseja. (Dica de Hat to the top resposta como eu não sabia disso.) Cole isso em um arquivo text e nomeie-o

Teste Powershell Version.cmd

ou similar.

@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
Pecos Bill

O cmdlet abaixo retornará a versão do PowerShell.

$PSVersionTable.PSVersion.Major
3
Venkatakrishnan

Eu precisava verificar a versão do PS e, em seguida, executar o código apropriado. Alguns de nossos servidores executam v5, outros v4. Isso significa que algumas funções, como compactar, podem ou não estar disponíveis.

Esta é minha solução: 

if ($PSVersionTable.PSVersion.Major -eq 5) {
    #Execute code available in 5, like Compress
    Write-Host "You are running version 5"
}
else {
    #Use a different process
    Write-Host "This is version $PSVersionTable.PSVersion.Major"
}
3
Atron Seige

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

2
Tylor Durden

Geralmente você obtém usando o número Maior que você pode obter assim:

$PSVersionTable.PSVersion.Major
1
Jose Ortega

Estendendo a resposta com um operador de seleção:

Get-Host | select {$_.Version}
1
HaBo

Experimente com o seguinte comando:

Get-Host

Visto aqui

0
user2366586