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?
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
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
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"}
}
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
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
vous pouvez vérifier que la version de Windows PowerShell installée en complétant le contrôle suivant:
- cliquez sur Démarrer, cliquez sur tous les Programmes, cliquez sur Accessoires, cliquez sur Windows PowerShell, puis cliquez sur Windows PowerShell.
-
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 /
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>
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 PowerShellPS
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 .
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 .
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 .
$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.
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").
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
vous pouvez également appeler la commande" host " à partir de la ligne de commande PowerShell. Il devrait vous donner la valeur de la variable $host
.
le cmdlet ci-dessous renvoie la version PowerShell.
$PSVersionTable.PSVersion.Major
extension de la réponse avec un opérateur select:
Get-Host | select {$_.Version}
habituellement, vous l'obtenez en utilisant le numéro principal que vous pouvez obtenir comme ceci:
$PSVersionTable.PSVersion.Major
# Get PowerShell Version
function Global:version
{
$PSVersionTable.PSVersion
}
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