in PowerShell zijn er talloze manieren om hetzelfde te doen (of er dichtbij). In deze blogpost leer je op elke manier PowerShell-versie controleren die je hebt op lokale en externe computers. We zullen de slechte manieren en mijn aanbevolen manier te dekken.
Als u van PowerShell newbie naar PowerShell goeroe wilt gaan, raad ik u aan deze gratis mini-cursus over het bouwen van een PowerShell-tool te verslinden. Dit is een stap-voor-stap handleiding met volledige uitleg en begeleiding van Adam de Automator!,
Er zijn websites die verschillende manieren tonen om Powershell-versie te controleren. Maar niemand die een uitgebreide lijst van al hen heeft samengesteld. Ik besloot dat te veranderen.
al deze manieren moeten werken in zowel Windows PowerShell als PowerShell Core. Deze methoden moeten ook werken in Windows PowerShell versies 1.0 helemaal tot aan PowerShell 7.,
de manieren waarop u een versie van PowerShell kunt vinden die u gebruikt zijn:
- De
(Get-Host).Version
property - de
$PSVersionTable.PSVersion
property - het register (alleen Windows PowerShell)
- de
$PSVersionTable.PSVersion
property
laten we alle manieren opsplitsen om de versie van powershell te vinden van minst Naar 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 misleidend zijn voor veel nieuwkomers. Ik zal je laten zien waarom.
Als u (Get-Host).Version
uitvoert, zult u zien dat het een versienummer retourneert dat lijkt op de PowerShell-engineversie. Uiterlijk kan misleidend 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.
echter, soms wanneer u Get-Host
in een geïntegreerde terminal uitvoert, is de versie niet hetzelfde. Hoewel de host meestal dezelfde versie van de motor zal vertegenwoordigen, hoeft het niet altijd te doen.
Controleer Powershell-versie via Get-Host op externe Computers
hoewel Get-Host
dezelfde versie lijkt terug te geven wanneer deze op een lokale computer wordt uitgevoerd, zal dit nooit gebeuren op externe computers.,
bijvoorbeeld, laten we Get-Host
uitvoeren op een externe Windows Server 2016 server via Invoke-Command
en zien wat er gebeurt.
De laatste keer dat ik 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 versie $host.Version command
Referencing $host.Version
is een andere manier om Powershell versie te controleren. De variabele $host
is een automatische variabele die dezelfde uitvoer geeft als Get-Host
.,
Er is niets speciaals aan deze methode. Het is gewoon hetzelfde als het draaien van Get-Host
.
$host.Versie op externe Computers
u zult hetzelfde gedrag zien via PowerShell Remoting met $host.Version
Als u Get-Host
uitvoert.
gevaar, Will Robinson!
Registry
Als u PowerShell zelf niet wilt openen, kunt u ook het register controleren., De versie van PowerShell is weggestopt onder een waarde in het registersleutel pad HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Deze registersleutel heeft een waarde genaamd PowerShellVersion
waarnaar u kunt verwijzen met Get-ItemProperty
.
u kunt zien dat deze versie vergelijkbaar is, maar de revisie niet bevat zoals de andere opties.
het gebruik van andere Tools
het gebruik van het register betekent ook dat u helemaal geen PowerShell hoeft te gebruiken om de versie te vinden. U kunt opdrachten uitvoeren vanaf de opdrachtprompt of een ander hulpmiddel dat het register kan lezen.,
Registry op externe Computers
het register is statisch en de waarden zullen niet lokaal of op afstand veranderen. Je kunt erop vertrouwen dat wat je lokaal ziet hetzelfde zal zijn als je op afstand ziet.
het tonen van dezelfde versie lokaal en op afstand is goed. Maar ik heb een betere manier om je te laten zien met behulp van de $PSVersionTable
automatische variabele.
Controleer Powershell versie via $PSVersionTable.PSVersion Commando
de laatste en laatste methode verwijst naar dePSVersion
eigenschap op de$PSVersionTable
automatische variabele., Deze methode zal altijd de PowerShell-engine vertegenwoordigen.
de $PSVersionTable
automatische variabele is een alleen-lezen hash tabel die informatie geeft 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 om meer informatie te geven over de editie van PowerShell die wordt uitgevoerd.,
$PSVersionTable op Externe Computers
met Behulp van de $PSVersionTable
automatische variabele juist lokaal als op afstand. U kunt hieronder zien dat door het inpakken van $PSVersionTable.PSVersion
in een scriptblock en het uitvoeren van die code op een externe computer, het dezelfde versie zal teruggeven.
samenvatting
In deze blogpost hebt u alle manieren geleerd om de versie van PowerShell zowel lokaal als op afstand te controleren., Ik hoop dat de eerste paar methoden gaf je een idee op welke manieren niet om de versie te controleren!
Ik adviseer altijd $PSVersionTable.PSVersion
te gebruiken. Alle andere methoden kunnen lijken op de PowerShell engine versie, maar niet altijd de motor versie.