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?
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
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
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"}
}
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
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
Pode verificar se a versão PowerShell do Windows instalada ao completar a seguinte verificação:
- 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.
-
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/
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:
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 PowerShellPS
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.
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.
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 .
$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.
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").
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
Você também pode chamar o comando "host" a partir da linha de comando PowerShell. Deve dar-lhe o valor da variável $host
.
O cmdlet abaixo devolve a versão PowerShell.
$PSVersionTable.PSVersion.Major
Alargar a resposta com um operador seleccionado:
Get-Host | select {$_.Version}
Use o comandoGet-Host . A segunda linha do resultado é a versão.
Normalmente obtém-se com o número maior que se pode obter assim:
$PSVersionTable.PSVersion.Major
Tenta;)
((Get-Host).Version).Major
# Get PowerShell Version
function Global:version
{
$PSVersionTable.PSVersion
}
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