Im Automator

In PowerShell gibt es eine Million Möglichkeiten, dasselbe zu tun (oder in der Nähe davon). In diesem Blogbeitrag erfahren Sie alles über die PowerShell-Version, die Sie auf lokalen und Remote-Computern haben. Wir werden die schlechten Wege und meinen empfohlenen Weg behandeln.

Wenn Sie vom PowerShell-Neuling zum PowerShell-Guru wechseln möchten, empfehle ich, diesen KOSTENLOSEN Minikurs zum Erstellen eines PowerShell-Tools zu verschlingen. Dies ist ein Schritt-für-Schritt-Tutorial 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 angezeigt werden. Aber keine, die eine umfassende Liste aller zusammengestellt. Ich beschloss, das 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.,

Die Möglichkeiten, wie Sie eine Version von PowerShell herausfinden können, die Sie ausführen, sind:

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

Lassen Sie uns alle Möglichkeiten aufschlüsseln, um die Version von PowerShell vom geringsten bis zum am meisten empfohlenen Weg zu finden.

Inhaltsverzeichnis

Get-Host

PowerShell hat ein Konzept, das als Hosts bekannt ist. Ein Host ist ein Programm, das die PowerShell-Engine hostet., Es 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 für viele Neuankömmlinge täuschen. Lassen Sie mich Ihnen zeigen, warum.

Wenn Sie (Get-Host).Version ausführen, wird eine Versionsnummer zurückgegeben, die so aussieht, als könnte es sich um die PowerShell Engine-Version handeln. Blicke können 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 aus wie eine legitime version.

Wenn Sie jedoch Get-Host in einem integrierten Terminal ausführen, ist die Version nicht dieselbe. 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

Obwohl Get-Host auf einem lokalen Computer dieselbe Version zurückzugeben scheint, wird dies auf Remotecomputern niemals der Fall sein.,

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

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

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

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

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

Referencing $host.Version

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

$host.Version auf Remote-Computern

Sie werden das gleiche Verhalten über PowerShell-Remoting mit $host.Version sehen, da Sie Get-Hostausführen.

Gefahr, Will Robinson!

Registry

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

Sie können sehen, dass diese Version ähnlich ist, aber die Revision nicht wie die anderen Optionen enthält.

Verwenden anderer Tools

Die Verwendung der Registrierung bedeutet auch, dass Sie PowerShell überhaupt nicht verwenden müssen, um die Version zu finden. 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 nicht lokal oder remote. Sie können sicher sein, dass das, was Sie lokal sehen, dasselbe ist, wie Sie es aus der Ferne sehen.

Es ist gut, die gleiche Version lokal und remote anzuzeigen. Aber ich habe eine bessere Möglichkeit, Ihnen die automatische Variable $PSVersionTable zu zeigen.

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

Die letzte und letzte Methode verweist auf die Eigenschaft PSVersion für die automatische Variable $PSVersionTable., Diese Methode stellt immer die PowerShell-Engine dar.

Die automatische Variable $PSVersionTable ist eine schreibgeschützte Hash-Tabelle, die Informationen speziell zur PowerShell Engin-Version zurückgibt. Diese automatische Variable gibt nicht nur die Version zurück, sondern auch PSEdition. Diese Eigenschaft kann entweder Kern oder Desktop, um weitere Informationen über die Ausgabe von Powershell, die ausgeführt wird, bereitzustellen.,

$PSVersionTable output

$PSVersionTable auf Remotecomputern

Die automatische Variable $PSVersionTable ist lokal genau, da sie aus der Ferne. Sie können unten sehen, dass, indem Sie $PSVersionTable.PSVersion in einen Skriptblock $PSVersionTable.PSVersion und diesen Code auf einem Remote-Computer ausführen, dieselbe Version zurückgegeben wird.

Zusammenfassung

In diesem Blogbeitrag haben Sie alle Möglichkeiten kennengelernt, 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. Alle anderen Methoden erscheinen möglicherweise ähnlich 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.