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:
- Die
(Get-Host).Version
Eigenschaft - Die
$host.Version
Eigenschaft - Die Registrierung (nur Windows PowerShell)
- 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
.,
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-Host
ausfü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-ItemProperty
verweisen 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 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.