i PowerShell finns det en zillion sätt att göra samma sak (eller nära den). I det här blogginlägget lär du dig alla sätt kontrollera PowerShell-versionen som du har på lokala och fjärrdatorer. Vi täcker de dåliga sätten och mitt rekommenderade sätt.
om du vill gå från PowerShell newbie till PowerShell guru rekommenderar jag att du slukar denna gratis mini-kurs på att bygga ett PowerShell-verktyg. Detta är en steg-för-steg-handledning med fullständiga förklaringar och vägledning från Adam Automatorn!,
det finns webbplatser som visar olika sätt att kontrollera Powershell-versionen. Men ingen som sammanställt en omfattande lista över alla dem. Jag bestämde mig för att ändra på det.
alla dessa sätt bör fungera i både Windows PowerShell och PowerShell Core. Dessa metoder bör också fungera i Windows PowerShell versioner 1.0 hela vägen upp till PowerShell 7.,
hur du kan ta reda på en version av PowerShell du kör är:
-
(Get-Host).Version
egendom -
$host.Version
egendom - registret (endast Windows PowerShell)
-
$PSVersionTable.PSVersion
egendom
låt oss bryta ner alla sätt att hitta versionen av PowerShell från minst till mest rekommenderade sätt.
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 själv.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. Utseende kan lura.
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., Det här ser ut som en legitim version.
Ibland när du kör Get-Host
I en integrerad terminal är versionen inte densamma. Även om värden vanligtvis representerar samma version av motorn, behöver den inte alltid göra det.
kontrollera Powershell-versionen via Get-Host på fjärrdatorer
även omGet-Host
verkar returnera samma version när den körs på en lokal dator, kommer den aldrig på fjärrdatorer.,
låt oss till exempel köraGet-Host
på en fjärrserver för Windows Server 2016 viaInvoke-Command
och se vad som händer.
senast jag kollade är det inte möjligt att köra PowerShell v1 på Windows Server 2016.
att förlita sig påGet-Host
är bara en dålig idé runt.
Kontrollera Powershell Version $host.Version kommando
Referenser $host.Version
är ett annat sätt att kontrollera Powershell version. Variabeln$host
är en automatisk variabel som returnerar samma utdata somGet-Host
.,
det finns inget speciellt med den här metoden. Det är helt enkelt detsamma som att köra Get-Host
.
$värd.Version på fjärrdatorer
Du kommer att se samma beteende via PowerShell Remoting med $host.Version
som du kommer att köra Get-Host
.
fara, kommer Robinson!
register
om du inte vill öppna PowerShell själv kan du också kontrollera registret., Versionen av PowerShell är undanstoppad under ett värde i registernyckelvägen HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Registernyckeln har ett värde som heter PowerShellVersion
som du kan referera till genom att använda Get-ItemProperty
.
Du kan se att den här versionen är likartad men innehåller inte revideringen som de andra alternativen gör.
använda andra verktyg
med hjälp av registret innebär också att du inte behöver använda PowerShell alls 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 på distans. Du kan vara säker på att det du ser lokalt kommer att vara detsamma som du ser på distans.
visar samma version lokalt och på distans är bra. Men jag har ett bättre sätt att visa dig med $PSVersionTable
automatisk variabel.
Kontrollera Powershell Version via $PSVersionTable.PSVersion command
den sista och sista metoden refererar till egenskapen PSVersion
på den automatiska variabeln $PSVersionTable
., Denna metod kommer alltid att representera PowerShell-motorn.
den automatiska variabeln$PSVersionTable
är en skrivskyddad hashtabell som returnerar information specifikt om PowerShell engin-versionen. Denna automatiska variabel returnerar inte bara versionen utan även PSEdition
. Den här egenskapen kan antingen kärna eller skrivbord för att ge ytterligare information om upplagan av PowerShell som körs.,
$PSVersionTable på fjärrdatorer
använda$PSVersionTable
automatisk variabel är korrekt lokalt som det är på distans. Du kan se nedan att genom att paketera $PSVersionTable.PSVersion
I ett scriptblock och köra den koden på en fjärrdator kommer den 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 likna PowerShell-motorversionen men kanske inte alltid återspeglar motorversionen.