Déterminer la version PowerShell installée

Comment puis-je déterminer quelle version de PowerShell est installée sur un ordinateur, et même si elle est installée du tout?

2143
demandé sur MagicAndi 2009-12-01 14:30:03

22 réponses

utilisez $PSVersionTable.PSVersion pour déterminer la version du moteur. Si la variable n'existe pas, on peut supposer que le moteur est la version 1.0 .

notez que $Host.Version et (Get-Host).Version ne sont pas fiables - ils reflètent la version de l'hôte uniquement, pas le moteur. PowerGUI, PowerShellPLUS, etc. sont toutes des applications d'hébergement, et ils seront mis à l'hôte, afin de refléter leur produit la version qui est tout à fait correct, mais pas ce que vous cherchez.

PS C:\> $PSVersionTable.PSVersion

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

j'utiliserais Get-Host ou $PSVersionTable . Comme le souligne Andy Schneider, $PSVersionTable ne fonctionne pas dans la version 1; il a été introduit dans la version 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
répondu Thomas Bratt 2018-06-02 18:50:10

Pour déterminer si PowerShell est installé, vous pouvez vérifier le registre de l'existence de

HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\Install

et

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell

et, si elle existe, si la valeur est 1 (Pour installé), comme détaillé dans le billet de blog vérifier si PowerShell installé et la version .

pour déterminer la version de PowerShell qui est installée, vous pouvez vérifier les clés de registre

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\PowerShellEngine\PowerShellVersion

et

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\PowerShellEngine\PowerShellVersion

pour déterminer la version de PowerShell qui est installée à partir d'un .PS1 script, vous pouvez utiliser les lignes suivantes, comme détaillé sur PowerShell.com dans quelle version PowerShell suis-je en train d'exécuter .

$isV2 = test-path variable:\psversiontable

le même site donne également une fonction pour retourner la version:

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

vous pouvez regarder la variable intégrée, $psversiontable . S'il n'existe pas, vous avez V1. S'il existe, il vous donnera toutes les informations dont vous avez besoin.

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
répondu Andy Schneider 2018-06-02 18:50:26

je veux juste ajouter mes 2 cents ici.

vous pouvez vérifier directement la version avec une seule ligne en invoquant powershell extérieurement , comme de L'invite de commande

powershell -Command "$PSVersionTable.PSVersion"

EDIT:

selon @psaul vous can ont en fait une commande qui est agnostique d'où elle vient (CMD, Powershell ou Pwsh), merci vous pour qui.

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

j'ai testé et cela a fonctionné parfaitement sur CMD et Powershell

image

27
répondu Patrick Bard 2018-07-13 16:49:38

vous pouvez vérifier que la version de Windows PowerShell installée en complétant le contrôle suivant:

  1. cliquez sur Démarrer, cliquez sur tous les Programmes, cliquez sur Accessoires, cliquez sur Windows PowerShell, puis cliquez sur Windows PowerShell.
  2. dans la console Windows PowerShell, tapez la commande suivante à l'invite de commande et appuyez ensuite sur Entrée:

    Get-Host / Select-Object Version

vous verrez la sortie qui ressemble à ceci:

Version
-------
3.0

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

21
répondu Eclipses 2014-08-21 08:27:40

la méthode compatible forward recommandée par Microsoft pour vérifier si PowerShell est installé et pour déterminer la version installée est de regarder deux clés de Registre spécifiques. J'ai reproduit les détails ici au cas où le lien casse.

selon la page liée:

dépendant de toute autre clé de registre, ou version de PowerShell.exe ou L'emplacement de PowerShell.exe n'est pas garanti dans le long terme.

pour vérifier si une version de PowerShell est installée, vérifiez la valeur suivante dans le registre:

  • Emplacement De La Clé: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell
  • Valeur Nom: Install
  • Type de valeur: REG_DWORD
  • Value Data: 0x000001 (1

pour vérifier si la version 1.0 ou 2.0 de PowerShell est installé, vérifiez la valeur suivante dans le registre:

  • Emplacement De La Clé: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\PowerShellEngine
  • Nom De La Valeur: PowerShellVersion
  • Type de valeur: REG_SZ
  • Données De La Valeur: <1.0 | 2.0>
18
répondu Starfish 2013-06-17 07:59:47

j'ai trouvé que la façon la plus facile de vérifier si installé était de:

  • lancer une invite de commande (Démarrer, Exécuter, cmd , puis OK)
  • type powershell puis appuyez sur retour. Vous devriez alors obtenir la PowerShell PS prompt:

C:\Users\MyUser>powershell

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

PS C:\Users\MyUser>

vous pouvez alors vérifier la version à partir de L'invite PowerShell en tapant $PSVersionTable.PSVersion :

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

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

PS C:\Users\MyUser>

Tapez exit si vous souhaitez revenir à l'invite de commande ( exit encore une fois, si vous souhaitez également fermer l'invite de commande).

pour exécuter des scripts, voir http://ss64.com/ps/syntax-run.html .

11
répondu SharpC 2014-11-04 10:31:37

utiliser:

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

vous pouvez télécharger le script détaillé de Comment déterminer la version PowerShell installée .

10
répondu Dale Chen 2017-03-04 09:09:52

pour vérifier si PowerShell est installé utiliser:

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

pour vérifier si RC2 ou RTM est installé, utiliser:

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

Source: ce site web .

8
répondu Daniel Elliott 2013-03-19 14:19:22

$host.version est tout simplement erroné/peu fiable. Cela vous donne la version de l'hébergement exécutable (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe etc) et pas la version du moteur lui-même.

la version du moteur est contenue dans $psversiontable.psversion . Pour PowerShell 1.0, cette variable n'existe pas, alors, évidemment, si cette variable n'est pas disponible, il est tout à fait sûr de supposer que le moteur est 1.0, évidemment.

7
répondu x0n 2013-08-26 14:11:13

la façon la plus facile d'oublier cette page et de ne jamais y revenir est d'apprendre le Get-Variable :

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

Il n'est pas nécessaire de se souvenir de chaque variable. Juste Get-Variable est suffisant (et"il devrait y avoir quelque chose à propos de la version").

7
répondu Roman Pokrovskij 2017-01-03 09:57:42

puisque la réponse la plus utile n'a pas abordé la partie s'il existe , j'ai pensé que je donnerais une prise sur elle via une solution rapide et sale. Il repose sur PowerShell étant dans le chemin variable d'environnement qui est probablement ce que vous voulez. (Hat tip vers le haut de répondre que je ne savais pas que.) Coller ce dans un texte fichier et le nommer

Test Powershell Version.cmd

ou similaire.

@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
répondu Pecos Bill 2014-06-30 12:11:50

vous pouvez également appeler la commande" host " à partir de la ligne de commande PowerShell. Il devrait vous donner la valeur de la variable $host .

4
répondu Tylor Durden 2014-06-30 09:27:43

le cmdlet ci-dessous renvoie la version PowerShell.

$PSVersionTable.PSVersion.Major
4
répondu Venkatakrishnan 2017-03-04 09:08:28

essayez avec la commande suivante:

Get-Host

vu ici

3
répondu 2013-05-09 14:35:13

extension de la réponse avec un opérateur select:

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

utilisez la commande Get-Host . La deuxième ligne du résultat est la version.

2
répondu Shami 2014-12-05 19:51:28

habituellement, vous l'obtenez en utilisant le numéro principal que vous pouvez obtenir comme ceci:

$PSVersionTable.PSVersion.Major
2
répondu Jose Ortega 2017-09-29 04:51:01

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

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

utilisez Get-Host pour obtenir les détails de la version 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
répondu Abhishek 2014-12-30 21:50:50