In PowerShell zijn er ontelbare manieren om hetzelfde te doen (of iets wat er dichtbij komt). In deze blogpost leer je elke manier om je PowerShell-versie te controleren die je lokaal en op afstand hebt. We zullen de slechte manieren behandelen en mijn aanbevolen manier.
Er zijn websites die verschillende manieren laten zien om je PowerShell-versie te controleren. Maar geen van hen heeft een uitgebreide lijst van al deze methoden samengesteld. Ik heb besloten dat te veranderen.
All deze manieren zouden moeten werken in zowel Windows PowerShell als PowerShell Core. Deze methoden zouden ook moeten werken in Windows PowerShell-versies 1.0 helemaal tot aan PowerShell 7.
De manieren waarop je de versie van PowerShell kunt achterhalen waarop je draait zijn:
- De
(Get-Host).Version
-eigenschap - De
$host.Version
-eigenschap - Het register (alleen Windows PowerShell)
- De
$PSVersionTable.PSVersion
-eigenschap
Laten we alle manieren om de versie van PowerShell te vinden van minst aanbevolen tot meest aanbevolen bekijken.
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.
A host can have a version that is completely independent of PowerShell itself. This can be deceiving to many newcomers. Let me show you why.
Als je (Get-Host).Version
uitvoert, zie je dat het een versienummer teruggeeft dat lijkt op de PowerShell-engineversie. Schijn bedriegt.
Hieronder heb ik Get-Host
uitgevoerd in Windows PowerShell 5.1 en je ziet dat het terugkomt met 5.1.17134.858. Dit lijkt op een legitieme versie.
Soms, wanneer je echter Get-Host
uitvoert in een geïntegreerde terminal, is de versie niet hetzelfde. Hoewel de host meestal dezelfde versie van de engine vertegenwoordigt, doet hij dat niet altijd.
Controleer Powershell-versie via Get-Host op externe computers
Hoewel Get-Host
lijkt dezelfde versie terug te geven bij lokaal uitvoeren, doet het dat nooit bij externe computers.
Bijvoorbeeld, laten we Get-Host
uitvoeren op een externe Windows Server 2016-server via Invoke-Command
en kijken wat er gebeurt.
De laatste keer dat ik controleerde, was het niet mogelijk om PowerShell v1 uit te voeren op Windows Server 2016.
Vertrouwen op Get-Host
is gewoonweg geen goed idee.
Controleer Powershell-versie $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
.

$host.Version
Er is niets bijzonders aan deze methode. Het is simpelweg hetzelfde als het uitvoeren van Get-Host
.
$host.Version op externe computers
Je zult hetzelfde gedrag zien via PowerShell Remoting met $host.Version
als wanneer je Get-Host
uitvoert.
Gevaar, Will Robinson!
Register
Als je PowerShell zelf niet wilt openen, kun je ook het register controleren. De versie van PowerShell staat verstopt onder een waarde in het registerpad HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Deze registersleutel heeft een waarde genaamd PowerShellVersion
die je kunt raadplegen met Get-ItemProperty
.
Je ziet dat deze versie vergelijkbaar is, maar de revisie niet bevat, zoals de andere opties doen.
Gebruik van andere tools
Het gebruik van het register betekent ook dat je helemaal geen PowerShell hoeft te gebruiken om de versie te vinden. Je kunt commando’s uitvoeren vanaf de opdrachtprompt of een ander hulpprogramma dat het register kan lezen.
Register op externe computers
Het register is statisch en de waarden zullen lokaal of op afstand niet veranderen. Je kunt erop vertrouwen dat wat je lokaal ziet, hetzelfde zal zijn als wat je op afstand ziet.
Hetzelfde versienummer lokaal en op afstand weergeven is goed. Maar ik heb een betere manier om het je te laten zien met behulp van de automatische variabele $PSVersionTable
.
Controleer de PowerShell-versie via het commando $PSVersionTable.PSVersion
De laatste en definitieve methode is het refereren aan de PSVersion
-eigenschap op de automatische variabele $PSVersionTable
. Deze methode zal altijd de PowerShell-engine vertegenwoordigen.
De automatische variabele $PSVersionTable
is een alleen-lezende hashtabel die specifieke informatie retourneert over de versie van de PowerShell-engine. Deze automatische variabele retourneert niet alleen de versie, maar ook de PSEdition. Deze eigenschap kan ofwel Core of Desktop zijn om verdere informatie te geven over de editie van PowerShell die wordt uitgevoerd.

$PSVersionTable op Externe Computers
Het gebruik van de automatische variabele $PSVersionTable
is zowel lokaal als extern nauwkeurig. U kunt hieronder zien dat door $PSVersionTable.PSVersion
in een scriptblok te omringen en die code op een externe computer uit te voeren, dezelfde versie wordt geretourneerd.
Samenvatting
In deze blogpost heb je alle manieren geleerd om de versie van PowerShell zowel lokaal als extern te controleren. Ik hoop dat de eerste paar methoden je een idee hebben gegeven van welke manieren niet om de versie te controleren!
I recommend always using $PSVersionTable.PSVersion
. All of the other methods may appear similar to the PowerShell engine version but may not always reflect the engine version.
Als ik een manier heb gemist, laat het me dan weten in de opmerkingen. Ik zal blij zijn om de post bij te werken en je er erkenning voor te geven.