versão - update powershell




Determinar a versão do PowerShell instalada (16)

A maneira mais fácil de esquecer essa 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. Basta Get-Variable é suficiente (e "deve haver algo sobre a versão").

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


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

Get-Host | select {$_.Version}

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"
}

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

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

$PSVersionTable.PSVersion.Major

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

$PSVersionTable.PSVersion.Major

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 em PowerShell.com em qual versão do PowerShell estou executando .

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

Para verificar se o PowerShell está instalado, use:

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

Para verificar se o RC2 ou o 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 .


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


Uma vez que a resposta mais útil não abordou a parte que existe , pensei em dar uma olhada em uma solução rápida e suja. Ele depende do PowerShell estar na variável de ambiente path que provavelmente é o que você deseja. (Dica de Hat to the top resposta como eu não sabia disso.) Cole isso em um arquivo de texto 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

Use o Get-Host para obter os detalhes da versão do 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

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


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 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/


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


$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 não 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.


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 .

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

PS C:\> $PSVersionTable.PSVersion

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




powershell