I PowerShell finns det zillioner sätt att göra samma sak (eller nära det). I det här blogginlägget lär du dig på alla sätt kontrollera PowerShell-versionen som du har på lokala och fjärrdatorer. Vi kommer att täcka de dåliga sätten och mitt rekommenderade sätt.
Om du vill gå från PowerShell-nybörjare till PowerShell-guru, rekommenderar jag att sluka detta GRATIS minikurs om att bygga ett PowerShell-verktyg. Detta är en steg-för-steg-handledning med fullständiga förklaringar och vägledning från Adam the Automator!
Det finns webbplatser som visar olika sätt att kontrollera Powershell-versionen. Men ingen som sammanställde en omfattande lista över dem alla. Jag bestämde mig för att ändra det.
Alla dessa sätt ska fungera i både Windows PowerShell och PowerShell Core. Dessa metoder ska också fungera i Windows PowerShell version 1.0 hela vägen upp till PowerShell 7.
Sätten du kan ta reda på en version av PowerShell du kör är:
- Egenskapen
(Get-Host).Version
-
$host.Version
- Registret (endast Windows PowerShell)
- Egenskapen
$PSVersionTable.PSVersion
Låt oss dela upp alla sätt att hitta versionen av PowerShell från det minsta till det mest rekommenderade sättet .
Innehållsförteckning
Get-Host
PowerShell har ett koncept som kallas värdar. En värd är ett program som är värd för PowerShell-motorn. Det är inte PowerShell-motorn i sig. PowerShell-konsolen eller en kodredigerare med en integrerad terminal är PowerShell-värdar.
En värd kan ha en version som är helt oberoende av PowerShell själv. Detta kan lura många nykomlingar. Låt mig visa varför.
Om du kör (Get-Host).Version
ser du att det returnerar ett versionsnummer som ser ut som det kan vara PowerShell-motorversionen. Utseendet kan bedra.
Nedan har jag kört Get-Host
på Windows PowerShell 5.1 och du kan se att det kommer tillbaka med 5.1.17134.858. Detta ser ut som en legitim version.
Men ibland när du kör Get-Host
i en integrerad terminal, versionen är inte densamma. Även om värden vanligtvis representerar samma version av motorn, behöver du inte alltid göra det.
Kontrollera Powershell-versionen via Get-Host på fjärrdatorer
Även om Get-Host
verkar returnera samma version när den körs på en lokal dator, den kommer aldrig på fjärrdatorer.
Låt oss till exempel köra Get-Host
på en fjärrserver för Windows Server 2016 via Invoke-Command
och se vad som händer.
Förra gången jag kollade är det inte möjligt att köra PowerShell v1 på Windows Server 2016.
Förlita sig på Get-Host
är bara en dålig idé överallt.
Kontrollera Powershell Version $ host.Version-kommando
Referenser till $host.Version
är ett annat sätt att kontrollera Powershell-versionen. $host
-variabeln är en automatisk variabel som returnerar samma utdata som Get-Host
.
Det finns inget speciellt med den här metoden. Det är helt enkelt detsamma som att köra Get-Host
.
$ host. Version på fjärrdatorer
Du kommer att se samma beteende via PowerShell Remoting med $host.Version
när du kör Get-Host
.
Fara, Will Robinson!
Register
Om du inte vill öppna PowerShell själv kan du också kontrollera registret. Versionen av PowerShell är undangömd under ett värde i registernyckelvägen HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Den här registernyckeln har ett värde som heter PowerShellVersion
som du kan referera till med Get-ItemProperty
.
Du kan se att detta versionen liknar men inkluderar inte revisionen som de andra alternativen gör.
Använda andra verktyg
Att använda registret betyder också att du inte alls behöver använda PowerShell för att hitta versionen. Du kan köra kommandon från kommandotolken eller ett annat verktyg som kan läsa registret.
Registret på fjärrdatorer
Registret är statiskt och värdena ändras inte lokalt eller fjärrstyrt. Du kan vara säker på att det du ser lokalt kommer att vara detsamma som du ser på distans.
Att visa samma version lokalt och fjärr är bra. Men jag har ett bättre sätt att visa dig med $PSVersionTable
automatisk variabel.
Kontrollera Powershell-version via $ PSVersionTable.PSVersion-kommandot
Den sista och sista metoden hänvisar till PSVersion
-egenskapen på $PSVersionTable
automatisk variabel.Den här metoden representerar alltid PowerShell-motorn.
Den automatiska variabeln $PSVersionTable
är en skrivskyddad hashtabell. som returnerar information specifikt om PowerShell-motorversionen. Den här automatiska variabeln returnerar inte bara versionen utan också PSEdition
. Den här egenskapen kan antingen Core eller Desktop för att ge ytterligare information om den version av PowerShell som körs.
$ PSVersionTable på fjärrdatorer
Med $PSVersionTable
automatisk variabel är korrekt lokalt eftersom den är fjärrstyrd. Du kan se nedan genom att lägga in $PSVersionTable.PSVersion
i ett skriptblock och köra koden på en fjärrdator, den kommer att returnera samma version.
Sammanfattning
I det här blogginlägget har du lärt dig alla sätt att kontrollera versionen av PowerShell både lokalt och på distans. Jag hoppas att de första metoderna gav dig en idé om vilka sätt att inte kontrollera versionen!
Jag rekommenderar att du alltid använder $PSVersionTable.PSVersion
. Alla andra metoder kan se ut som PowerShell-motorversionen men kanske inte alltid återspeglar motorversionen.