Vraag Bepaal de geïnstalleerde PowerShell-versie


Hoe kan ik bepalen welke versie van PowerShell op een computer is geïnstalleerd en zelfs of deze al is geïnstalleerd?


2076
2017-12-01 11:30


oorsprong


antwoorden:


Gebruik $PSVersionTable.PSVersion om de motorversie te bepalen. Als de variabele niet bestaat, is het veilig om aan te nemen dat de engine een versie is 1.0.

Let daar op $Host.Version en (Get-Host).Version zijn niet betrouwbaar - ze weerspiegelen alleen de versie van de host, niet de engine. PowerGUI, PowerShellPLUS, etc. zijn allemaal hosttoepassingen, en ze zullen de versie van de host instellen op hun product versie - wat helemaal correct is, maar niet wat je zoekt.

PS C:\> $PSVersionTable.PSVersion

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

2793
2018-01-19 11:06



Ik zou een van beide gebruiken Get-Host of $ PSVersionTable. Zoals Andy Schneider opmerkt, $PSVersionTable werkt niet in versie 1; het werd geïntroduceerd in versie 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

371
2017-12-01 11:34



Om te bepalen of PowerShell is geïnstalleerd, kunt u het register controleren op het bestaan ​​van

HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install

en

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3

en, als deze bestaat, of de waarde 1 is (voor geïnstalleerd), zoals beschreven in de blogpost Controleer of PowerShell is geïnstalleerd en de versie.

Om te bepalen welke versie van PowerShell is geïnstalleerd, kunt u de registersleutels controleren

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine\PowerShellVersion

en

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine\PowerShellVersion

Om de versie van PowerShell te bepalen die is geïnstalleerd met een script van .ps1, kunt u de volgende one-liner gebruiken, zoals gedetailleerd beschreven op PowerShell.com in Welke PowerShell-versie wordt gebruikt.

$isV2 = test-path variable:\psversiontable

Dezelfde site geeft ook een functie om de versie te retourneren:

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

86
2017-12-01 14:37



Je kunt kijken naar de ingebouwde variabele, $psversiontable. Als het niet bestaat, heb je V1. Als het bestaat, geeft het je alle informatie die je nodig hebt.

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    

77
2018-04-25 13:47



Ik wil gewoon mijn 2 cent hier toevoegen.

U kunt de versie met slechts één regel rechtstreeks controleren door powershell aan te roepen uitwendig, zoals vanaf de opdrachtprompt

powershell -Command "$PSVersionTable.PSVersion"

BEWERK:

Volgens @psaul u kan in feite één commando hebben dat agnostisch is van waar het vandaan kwam (CMD, Powershell of Pwsh), bedankt daarvoor.

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

Ik heb het getest en het werkte perfect op zowel CMD als Powershell

image


23
2018-03-10 11:32



U kunt controleren of de Windows PowerShell-versie is geïnstalleerd door de volgende controle uit te voeren:

  1. Klik op Start, klik op Alle programma's, klik op Bureau-accessoires, klik op Windows PowerShell en klik vervolgens op Windows PowerShell.
  2. Typ in de Windows PowerShell-console de volgende opdracht bij de opdrachtprompt en druk vervolgens op ENTER:

    Get-host | Select-Object-versie

U ziet uitvoer die er als volgt uitziet:

Version
-------
3.0

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


19
2018-06-17 07:59



Aanbevolen door Microsoft aanbevolen voorwaarts compatibele methode voor het controleren of PowerShell is geïnstalleerd en het bepalen van de geïnstalleerde versie is om te kijken naar twee specifieke registersleutels. Ik heb de details hier weergegeven voor het geval de link wordt verbroken.

Volgens de gelinkte pagina:

Afhankelijk van andere registersleutel (s) of een versie van PowerShell.exe of de locatie van PowerShell.exe kan op de lange termijn niet gegarandeerd worden gewerkt.

Om te controleren of elke versie van PowerShell is geïnstalleerd, controleer dan op de volgende waarde in het register:

  • Sleutel locatie: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
  • Waardenaam: installeren
  • Waardetype: REG_DWORD
  • Waardegegevens: 0x00000001 (1

Controleren of versie 1.0 of 2.0 van PowerShell is geïnstalleerd, controleer dan op de volgende waarde in het register:

  • Sleutel locatie: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
  • Waardenaam: PowerShellVersion
  • Waardetype: REG_SZ
  • Waardegegevens: <1.0 | 2.0>

18
2017-11-04 10:24



Ik vond de gemakkelijkste manier om te controleren of geïnstalleerd was om:

  • voer een opdrachtprompt uit (Start, Uitvoeren, cmd, dan ok)
  • type powershell druk dan op Return. Je zou dan de PowerShell moeten krijgen PS prompt:

C:\Users\MyUser>powershell

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

PS C:\Users\MyUser>

Vervolgens kunt u de versie van de PowerShell-prompt controleren door te typen $PSVersionTable.PSVersion:

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

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

PS C:\Users\MyUser>

Type exit als je terug wilt gaan naar de opdrachtprompt (exit nogmaals als u ook de opdrachtprompt wilt sluiten).

Zie voor het uitvoeren van scripts http://ss64.com/ps/syntax-run.html.


11
2017-12-01 11:35



Ga als volgt te werk om te controleren of PowerShell is geïnstalleerd:

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

Om te controleren of RC2 of RTM is geïnstalleerd, gebruikt u:

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

Bron: deze website.


8
2017-11-01 01:41



Gebruik:

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

Je kunt het gedetailleerde script downloaden van Hoe de geïnstalleerde PowerShell-versie te bepalen.


8
2018-04-17 20:46



$host.version is gewoon fout / onbetrouwbaar. Dit geeft je de versie van het uitvoerbare host-bestand (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe, enz.) En niet de versie van de motor zelf.

De motorversie is opgenomen in $psversiontable.psversion. Voor PowerShell 1.0 bestaat deze variabele niet, dus uiteraard is het, als deze variabele niet beschikbaar is, volkomen veilig om aan te nemen dat de motor 1.0 is.


7
2018-03-18 23:44