it-swarm.com.de

Bestimmen Sie die installierte PowerShell-Version

Wie kann ich feststellen, welche Version von PowerShell auf einem Computer installiert ist und ob sie überhaupt installiert ist?

2272
MagicAndi

Verwenden Sie $PSVersionTable.PSVersion, um die Engine-Version zu ermitteln. Wenn die Variable nicht vorhanden ist, kann davon ausgegangen werden, dass die Engine die Version 1.0 ist.

Beachten Sie, dass $Host.Version und (Get-Host).Version nicht zuverlässig sind. Sie geben nur die Version des Hosts und nicht die Engine wieder. PowerGUI, PowerShellPLUS usw. sind alle Hosting-Anwendungen, und Sie setzen die Version des Hosts entsprechend ihrer Produktversion . Dies ist völlig korrekt, aber nicht das, wonach Sie suchen.

PS C:\> $PSVersionTable.PSVersion

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

Ich würde entweder Get-Host oder $ PSVersionTable verwenden. Andy Schneider weist darauf hin, dass $PSVersionTable in Version 1 nicht funktioniert. es wurde in Version 2 eingeführt.

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
400
Thomas Bratt

Um festzustellen, ob PowerShell installiert ist, können Sie die Registrierung auf Vorhandensein von überprüfen 

HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\Install

und

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3

und, falls vorhanden, ob der Wert 1 ist (für installiert), wie im Blogbeitrag ÜBERPRÜFEN, OB POWERSHELL UND VERSION INSTALLIERT SIND.

Um die installierte Version von PowerShell zu ermitteln, können Sie die Registrierungsschlüssel überprüfen 

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

und

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

Zum Ermitteln der von einem .ps1-Skript installierten Version von PowerShell können Sie den folgenden Einzeiler verwenden, der auf PowerShell.com unter WELCHE POWERSHELL-VERSION IST AKTIV beschrieben wird.

$isV2 = test-path variable:\psversiontable

Dieselbe Site bietet auch eine Funktion zur Rückgabe der Version:

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

Sie können sich die eingebaute Variable $psversiontable ansehen. Wenn es nicht existiert, haben Sie V1. Wenn es existiert, erhalten Sie alle Informationen, die Sie benötigen.

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    
88
Andy Schneider

Ich möchte nur meine 2 Cent hier hinzufügen.

Sie können die Version nur mit einer Zeile direkt überprüfen, indem Sie die Powershell extern aufrufen, z. B. über die Eingabeaufforderung

powershell -Command "$PSVersionTable.PSVersion"

EDIT:

Laut @psaul you kann tatsächlich ein Kommando haben, das agnostisch ist (CMD, Powershell oder Pwsh).

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

Ich habe getestet und es funktionierte einwandfrei auf CMD und Powershell

 image

32
Patrick Bard

Sie können die installierte Windows PowerShell-Version überprüfen, indem Sie die folgende Prüfung durchführen:

  1. Klicken Sie auf Start, klicken Sie auf Alle Programme, klicken Sie auf Zubehör, klicken Sie auf Windows PowerShell und klicken Sie dann auf Windows PowerShell.
  2. Geben Sie in der Windows PowerShell-Konsole den folgenden Befehl an der Eingabeaufforderung ein, und drücken Sie die EINGABETASTE:

    Get-Host | Select-Object-Version

Sie sehen eine Ausgabe, die folgendermaßen aussieht:

Version
-------
3.0

http://www.myerrorsandmysolutions.com/wie-zu-verifizieren-die-windows-powershell-version-installed/

22
Eclipses

Von Microsoft empfohlene vorwärtskompatible Methode, um zu überprüfen, ob PowerShell installiert ist und die installierte Version bestimmt. Es werden zwei bestimmte Registrierungsschlüssel betrachtet. Ich habe die Details hier wiedergegeben, falls der Link bricht.

Entsprechend der verlinkten Seite:

Abhängig von anderen Registrierungsschlüsseln, der Version von PowerShell.exe oder dem Speicherort von PowerShell.exe ist die langfristige Funktionsfähigkeit nicht garantiert.

Um zu prüfen, ob any Version von PowerShell installiert ist, überprüfen Sie den folgenden Wert in der Registrierung:

  • Schlüsselstandort: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
  • Wertname: Install
  • Werttyp: REG_DWORD
  • Wertdaten: 0x00000001 (1

Um zu prüfen, ob Version 1.0 oder 2.0 von PowerShell installiert ist, überprüfen Sie den folgenden Wert in der Registrierung:

  • Schlüsselstandort: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
  • Wertname: PowerShellVersion
  • Werttyp: REG_SZ
  • Wertdaten: <1,0 | 2,0>
19
Starfish

Ich fand es am einfachsten zu überprüfen, ob installiert wurde:

  • eine Eingabeaufforderung ausführen (Start, Ausführen, cmd, dann OK)
  • geben Sie powershell ein und drücken Sie die Eingabetaste. Sie sollten dann die PowerShell PS-Eingabeaufforderung erhalten:

C:\Users\MyUser>powershell

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

PS C:\Users\MyUser>

Sie können die Version anschließend in der PowerShell-Eingabeaufforderung prüfen, indem Sie $PSVersionTable.PSVersion eingeben:

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

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

PS C:\Users\MyUser>

Geben Sie exit ein, wenn Sie zum Befehl Prompt zurückkehren möchten (exit, wenn Sie auch den Befehl Prompt schließen möchten).

Informationen zum Ausführen von Skripts finden Sie unter http://ss64.com/ps/syntax-run.html .

11
SharpC

$Host.version ist einfach falsch/unzuverlässig. Dies gibt Ihnen die Version der ausführbaren Host-Datei (powershell.exe, powergui.exe, powershell_ise.exe, powershellplus.exe usw.) und nicht die Version der Engine selbst.

Die Engine-Version ist in $psversiontable.psversion enthalten. Für PowerShell 1.0 ist diese Variable nicht vorhanden. Wenn diese Variable nicht verfügbar ist, kann man natürlich davon ausgehen, dass die Engine 1.0 ist.

9
x0n

Benutzen:

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

Sie können das ausführliche Skript von ERMITTELN DER INSTALLIERTEN POWERSHELL-VERSION herunterladen.

9
Dale Chen

Um zu prüfen, ob PowerShell installiert ist, verwenden Sie Folgendes:

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

Um zu prüfen, ob RC2 oder RTM installiert ist, verwenden Sie:

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

Quelle: diese Website .

7
Daniel Elliott

Der einfachste Weg, diese Seite zu vergessen und nie wieder zurückzukehren, ist den Get-Variable

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

Es ist nicht notwendig, sich an jede Variable zu erinnern. Nur Get-Variable ist genug (und "Version sollte etwas sein"). 

6

Da die hilfreichste Antwort nicht den if exists -Anteil ansprach, dachte ich, ich würde es über eine schnelle und schmutzige Lösung annehmen. Es hängt davon ab, dass sich PowerShell in der Pfad Umgebungsvariable befindet, was wahrscheinlich das ist, was Sie wollen. (Hat ein Tipp ganz oben, da ich das nicht wusste.) Fügen Sie diese in eine text -Datei ein und nennen Sie sie einen Namen

Test Powershell Version.cmd

oder ähnliches.

@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
Pecos Bill

Das folgende Cmdlet gibt die PowerShell-Version zurück.

$PSVersionTable.PSVersion.Major
3
Venkatakrishnan

Ich musste die Version von PS überprüfen und dann den entsprechenden Code ausführen. Einige unserer Server laufen v5, andere v4. Dies bedeutet, dass einige Funktionen, wie zum Beispiel komprimieren, möglicherweise nicht verfügbar sind.

Das ist meine Lösung: 

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"
}
3
Atron Seige

Sie können den Befehl "Host" auch über die PowerShell-Befehlszeile aufrufen. Es sollte Ihnen den Wert der $Host-Variablen geben.

2
Tylor Durden

Dies ist das Top-Suchergebnis für "Batch-Datei erhält Powershell-Version". Ich möchte daher ein grundlegendes Beispiel für das Ausführen eines bedingten Flusses in einer Batch-Datei in Abhängigkeit von der Powershell-Version geben

allgemeines Beispiel

powershell "exit $PSVersionTable.PSVersion.Major"
if %errorlevel% GEQ 5 (
    echo Do some fancy stuff that only powershell v5 or higher supports
) else (
    echo Functionality not support by current powershell version.
)

Beispiel aus der Praxis

powershell "exit $PSVersionTable.PSVersion.Major"
if %errorlevel% GEQ 5 (
    rem Unzip archive automatically
    powershell Expand-Archive Compressed.Zip
) else (
    rem Make the user unzip, because lazy
    echo Please unzip Compressed.Zip prior to continuing...
    pause
)
1
Derpy

Normalerweise erhalten Sie es mit der Major-Nummer, die Sie wie folgt erhalten können:

$PSVersionTable.PSVersion.Major
1
Jose Ortega

Die Antwort mit einem ausgewählten Operator erweitern:

Get-Host | select {$_.Version}
1
HaBo

Versuchen Sie es mit folgendem Befehl:

Get-Host

Gesehen hier

0
user2366586