Adam de Automator

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:

  1. De (Get-Host).Version eigenschap
  2. De $host.Version eigenschap
  3. Het register (alleen Windows PowerShell)
  4. 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.

Verwijzen naar $host.Version

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-uitvoer

$ 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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *