In PowerShell zijn er ontelbaar veel manieren om hetzelfde te doen (of er dichtbij). In deze blogpost leer je elke manier om de PowerShell-versie te controleren die je op lokale en externe computers hebt. We behandelen de slechte manieren en mijn aanbevolen manier.
Als je van PowerShell-newbie naar PowerShell-goeroe wilt gaan, raad ik je aan deze GRATIS te verslinden minicursus over het bouwen van een PowerShell-tool. Dit is een stap-voor-stap tutorial met volledige uitleg en begeleiding van Adam the Automator!
Er zijn websites die verschillende manieren tonen om de Powershell-versie te controleren. Maar geen enkele die een uitgebreide lijst van allemaal heeft samengesteld. Ik besloot dat te veranderen.
Al deze manieren zouden moeten werken in zowel Windows PowerShell als PowerShell Core. Deze methoden zouden ook moeten werken in Windows PowerShell-versie 1.0 tot en met PowerShell 7.
De manieren waarop u een versie van PowerShell die u gebruikt, kunt achterhalen zijn:
- De
(Get-Host).Version
eigenschap - De
$host.Version
eigenschap - Het register (alleen Windows PowerShell)
- De
$PSVersionTable.PSVersion
eigenschap
Laten we alle manieren opsplitsen om de versie van PowerShell te vinden van de minst tot de meest aanbevolen manier .
Inhoudsopgave
Get-Host
PowerShell heeft een concept dat bekend staat als hosts. Een host is een programma dat de PowerShell-engine host. Het is niet de PowerShell-engine zelf. De PowerShell-console of een code-editor met een geïntegreerde terminal zijn PowerShell-hosts.
Een host kan een versie hebben die volledig onafhankelijk is van PowerShell zelf. Dit kan veel nieuwkomers misleiden. Ik zal je laten zien waarom.
Als je (Get-Host).Version
uitvoert, zul je zien dat het een versienummer retourneert dat eruitziet alsof het de PowerShell-engine-versie zou kunnen zijn. Het uiterlijk kan bedrieglijk zijn.
Hieronder heb ik Get-Host
uitgevoerd op Windows PowerShell 5.1 en je kunt zien dat het terugkomt met 5.1.17134.858. Dit ziet eruit als een legitieme versie.
Wanneer u Get-Host
in een geïntegreerde terminal uitvoert, versie is niet hetzelfde. Hoewel de host meestal dezelfde versie van de engine vertegenwoordigt, hoeft dit niet altijd te gebeuren.
Controleer de Powershell-versie via Get-Host op externe computers
Hoewel Get-Host
lijkt dezelfde versie te retourneren wanneer deze op een lokale computer wordt uitgevoerd, dit zal nooit gebeuren op externe computers.
Laten we bijvoorbeeld Get-Host
op een externe Windows Server 2016-server via Invoke-Command
en kijk wat er gebeurt.
De laatste keer dat ik het controleerde, is het niet mogelijk om PowerShell v1 uit te voeren op Windows Server 2016.
Vertrouwen op Get-Host
is gewoon een slecht idee.
Controleer Powershell Version $ host.Version commando
Verwijzen naar $host.Version
is een andere manier om de Powershell-versie te controleren. De variabele $host
is een automatische variabele die dezelfde uitvoer retourneert als Get-Host
.
Er is niets speciaals aan deze methode. Het is gewoon hetzelfde als het uitvoeren van Get-Host
.
$ host.Version op externe computers
U zult hetzelfde gedrag zien via PowerShell Remoting met $host.Version
terwijl u Get-Host
uitvoert.
Gevaar, Will Robinson!
Register
Als u PowerShell zelf niet wilt openen, kunt u ook het register controleren. De versie van PowerShell is weggestopt onder een waarde in het pad van de registersleutel HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Deze registersleutel heeft een waarde met de naam PowerShellVersion
waarnaar u kunt verwijzen door Get-ItemProperty
te gebruiken.
U kunt zien dat dit versie is vergelijkbaar, maar bevat de revisie niet zoals de andere opties.
Andere tools gebruiken
Het gebruik van het register betekent ook dat u PowerShell helemaal niet hoeft te gebruiken om de versie. U kunt opdrachten uitvoeren vanaf de opdrachtprompt of een ander hulpprogramma dat het register kan lezen.
Register op externe computers
Het register is statisch en de waarden veranderen niet lokaal of op afstand. U kunt erop vertrouwen dat wat u lokaal ziet, hetzelfde is als op afstand.
Het is goed om dezelfde versie lokaal en op afstand te tonen. Maar ik heb een betere manier om je te laten zien met behulp van de $PSVersionTable
automatische variabele.
Controleer de Powershell-versie met het $ PSVersionTable.PSVersion-commando
De laatste en laatste methode is verwijzen naar de PSVersion
eigenschap op de $PSVersionTable
automatische variabele.Deze methode zal altijd de PowerShell-engine vertegenwoordigen.
De $PSVersionTable
automatische variabele is een alleen-lezen hashtabel die informatie retourneert specifiek over de PowerShell engin-versie. Deze automatische variabele geeft niet alleen de versie terug, maar ook PSEdition
. Deze eigenschap kan zowel Core als Desktop bieden om meer informatie te geven over de editie van PowerShell die wordt uitgevoerd.
$ PSVersionTable op externe computers
Met de $PSVersionTable
automatische variabele is zowel lokaal als op afstand nauwkeurig. Je kunt hieronder zien dat door $PSVersionTable.PSVersion
in een scriptblok te wikkelen en die code op een externe computer uit te voeren, het dezelfde versie retourneert.
Samenvatting
In deze blogpost heb je alle manieren geleerd om de versie van PowerShell zowel lokaal als op afstand te controleren. Ik hoop dat de eerste paar methoden je een idee hebben gegeven op welke manieren je de versie niet moet controleren!
Ik raad aan altijd $PSVersionTable.PSVersion
te gebruiken. Alle andere methoden kunnen lijken op de PowerShell-engine-versie, maar komen niet altijd overeen met de engine-versie.