Adam the Automator

In PowerShell gibt es unzählige Möglichkeiten, dasselbe (oder in der Nähe davon) zu tun. In diesem Blogbeitrag erfahren Sie, wie Sie die PowerShell-Version auf lokalen und Remotecomputern überprüfen können. Wir werden die schlechten Wege und meinen empfohlenen Weg behandeln.

Wenn Sie vom PowerShell-Neuling zum PowerShell-Guru wechseln möchten, empfehle ich, diesen KOSTENLOS zu verschlingen Minikurs zum Erstellen eines PowerShell-Tools. Dies ist eine Schritt-für-Schritt-Anleitung mit vollständigen Erklärungen und Anleitungen von Adam the Automator!

Es gibt Websites, auf denen verschiedene Möglichkeiten zur Überprüfung der Powershell-Version gezeigt werden. Aber keiner, der eine umfassende Liste von allen zusammengestellt hat. Ich habe beschlossen, dies zu ändern.

Alle diese Möglichkeiten sollten sowohl in Windows PowerShell als auch in PowerShell Core funktionieren. Diese Methoden sollten auch in Windows PowerShell-Versionen 1.0 bis PowerShell 7 funktionieren.

Sie können eine Version von PowerShell herausfinden, die Sie ausführen:

  1. Die Eigenschaft (Get-Host).Version
  2. Die Eigenschaft $host.Version
  3. Die Registrierung (nur Windows PowerShell)
  4. Die Eigenschaft $PSVersionTable.PSVersion

Lassen Sie uns alle Möglichkeiten aufschlüsseln, um die Version von PowerShell von der am wenigsten empfohlenen bis zur am meisten empfohlenen zu finden

Inhaltsverzeichnis

Get-Host

PowerShell verfügt über ein Konzept, das als Hosts bezeichnet wird. Ein Host ist ein Programm, das die PowerShell-Engine hostet. Dies ist nicht die PowerShell-Engine selbst. Die PowerShell-Konsole oder ein Code-Editor mit integriertem Terminal sind PowerShell-Hosts.

Ein Host kann eine Version haben, die völlig unabhängig von PowerShell selbst ist. Dies kann viele Neuankömmlinge täuschen. Lassen Sie mich Ihnen zeigen, warum.

Wenn Sie (Get-Host).Version ausführen, wird eine Versionsnummer zurückgegeben, die aussieht, als könnte es sich um die PowerShell-Engine-Version handeln. Das Aussehen kann täuschen.

Unten habe ich Get-Host unter Windows PowerShell 5.1 ausgeführt und Sie können sehen, dass es mit 5.1.17134.858 zurückkommt. Dies sieht nach einer legitimen Version aus.

Manchmal jedoch, wenn Sie Get-Host in einem integrierten Terminal ausführen, wird die Version ist nicht die gleiche. Obwohl der Host normalerweise dieselbe Version der Engine darstellt, ist dies nicht immer erforderlich.

Überprüfen Sie die Powershell-Version über Get-Host auf Remotecomputern.

Auch wenn Get-Host scheint dieselbe Version zurückzugeben, wenn sie auf einem lokalen Computer ausgeführt wird. Auf Remotecomputern wird dies niemals der Fall sein.

Lassen Sie uns beispielsweise Get-Host auf einem Windows Server 2016-Remoteserver über Invoke-Command und sehen, was passiert.

Als ich das letzte Mal nachgesehen habe, ist es nicht möglich, PowerShell v1 auszuführen Windows Server 2016.

Sich auf Get-Host zu verlassen, ist nur eine schlechte Idee.

Überprüfen Sie den Powershell-Versionsbefehl $ host.Version

Das Verweisen auf $host.Version ist eine weitere Möglichkeit, die Powershell-Version zu überprüfen. Die Variable $host ist eine automatische Variable, die dieselbe Ausgabe wie Get-Host zurückgibt.

Referenzieren $host.Version

Diese Methode hat nichts Besonderes. Es ist einfach dasselbe wie das Ausführen von Get-Host.

$ host.Version auf Remotecomputern

Sie sehen dasselbe Verhalten über PowerShell Remoting mit $host.Version während Sie Get-Host ausführen.

Gefahr, Will Robinson!

Registrierung

Wenn Sie PowerShell selbst nicht öffnen möchten, können Sie auch die Registrierung überprüfen. Die Version von PowerShell ist unter einem Wert im Registrierungsschlüsselpfad HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine versteckt. Dieser Registrierungsschlüssel hat einen Wert namens PowerShellVersion, auf den Sie mit Get-ItemProperty verweisen können.

Sie können dies sehen Die Version ist ähnlich, enthält jedoch nicht die Revision wie die anderen Optionen.

Verwenden anderer Tools

Wenn Sie die Registrierung verwenden, müssen Sie PowerShell auch nicht verwenden, um zu suchen die Version. Sie können Befehle über die Eingabeaufforderung oder ein anderes Tool ausführen, das die Registrierung lesen kann.

Registrierung auf Remotecomputern

Die Registrierung ist statisch und die Werte ändern sich weder lokal noch remote. Sie können sicher sein, dass das, was Sie lokal sehen, mit dem übereinstimmt, das Sie remote sehen.

Es ist gut, dieselbe Version lokal und remote anzuzeigen. Aber ich habe eine bessere Möglichkeit, Ihnen die Verwendung der automatischen Variablen $PSVersionTable zu zeigen.

Überprüfen Sie die Powershell-Version über den Befehl $ PSVersionTable.PSVersion

Die letzte und letzte Methode verweist auf die Eigenschaft PSVersion in der automatischen Variablen $PSVersionTable.Diese Methode stellt immer die PowerShell-Engine dar.

Die automatische Variable $PSVersionTable ist eine schreibgeschützte Hash-Tabelle Dadurch werden Informationen speziell zur PowerShell-Engin-Version zurückgegeben. Diese automatische Variable gibt nicht nur die Version zurück, sondern auch PSEdition. Diese Eigenschaft kann entweder Core oder Desktop sein, um weitere Informationen zur laufenden Edition von PowerShell bereitzustellen.

$ PSVersionTable-Ausgabe

$ PSVersionTable auf Remotecomputern

Verwenden der $PSVersionTable ist lokal genau, da sie remote ist. Sie können unten sehen, dass durch Umschließen von $PSVersionTable.PSVersion in einen Skriptblock und Ausführen dieses Codes auf einem Remotecomputer dieselbe Version zurückgegeben wird.

Zusammenfassung

In diesem Blogbeitrag haben Sie alle Möglichkeiten kennengelernt, um die Version von PowerShell sowohl lokal als auch remote zu überprüfen. Ich hoffe, die ersten Methoden haben Ihnen eine Idee gegeben, wie Sie die Version nicht überprüfen können!

Ich empfehle, immer $PSVersionTable.PSVersion zu verwenden. Alle anderen Methoden ähneln möglicherweise der PowerShell-Engine-Version, spiegeln jedoch möglicherweise nicht immer die Engine-Version wider.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.