I PowerShell er det en million måter å gjøre det samme (eller i nærheten av det). I dette blogginnlegget lærer du alle måter å sjekke PowerShell-versjonen du har på lokale og eksterne datamaskiner. Vi vil dekke de dårlige måtene og den anbefalte måten min.
Hvis du vil gå fra PowerShell-nybegynner til PowerShell-guru, anbefaler jeg at du sluker dette GRATIS minikurs om å bygge et PowerShell-verktøy. Dette er en trinnvis veiledning med fullstendige forklaringer og veiledning fra Adam the Automator!
Det finnes nettsteder som viser forskjellige måter å sjekke Powershell-versjonen på. Men ingen som samlet en omfattende liste over dem alle. Jeg bestemte meg for å endre det.
Alle disse måtene skal fungere i både Windows PowerShell og PowerShell Core. Disse metodene skal også fungere i Windows PowerShell versjoner 1.0 helt opp til PowerShell 7.
Måtene du kan finne ut en versjon av PowerShell du kjører er:
- Egenskapen
(Get-Host).Version
-
$host.Version
- Registeret (bare Windows PowerShell)
- Egenskapen
$PSVersionTable.PSVersion
La oss bryte ned alle måter å finne versjonen av PowerShell fra den minste til den mest anbefalte måten .
Innholdsfortegnelse
Get-Host
PowerShell har et konsept kjent som verter. En vert er et program som er vert for PowerShell-motoren. Det er ikke selve PowerShell-motoren. PowerShell-konsollen eller en kodeditor med en integrert terminal er PowerShell-verter.
En vert kan ha en versjon som er helt uavhengig av PowerShell selv. Dette kan bedra for mange nykommere. La meg vise deg hvorfor.
Hvis du kjører (Get-Host).Version
, ser du at den returnerer et versjonsnummer som ser ut som det kan være PowerShell-motorversjonen. Utseendet kan bedra.
Nedenfor har jeg kjørt Get-Host
på Windows PowerShell 5.1, og du kan se at det kommer tilbake med 5.1.17134.858. Dette ser ut som en legitim versjon.
Noen ganger når du kjører Get-Host
i en integrert terminal, versjonen er ikke den samme. Selv om verten vanligvis vil representere den samme versjonen av motoren, er det ikke nødvendig å alltid gjøre det.
Kontroller Powershell-versjonen via Get-Host på eksterne datamaskiner
Selv om Get-Host
ser ut til å returnere den samme versjonen når den kjøres på en lokal datamaskin, den vil den aldri gjøre på eksterne datamaskiner.
La oss for eksempel kjøre Get-Host
på en ekstern Windows Server 2016-server via Invoke-Command
og se hva som skjer.
Sist jeg sjekket, er det ikke mulig å kjøre PowerShell v1 på Windows Server 2016.
Å stole på Get-Host
er bare en dårlig idé rundt.
Kontroller Powershell-versjonen $ host.Version-kommando
Henvisning til $host.Version
er en annen måte å sjekke Powershell-versjonen på. $host
-variabelen er en automatisk variabel som returnerer samme utdata som Get-Host
.
Det er ikke noe spesielt med denne metoden. Det er rett og slett det samme som å kjøre Get-Host
.
$ host.Versjon på eksterne datamaskiner
Du vil se den samme oppførselen via PowerShell Remoting med $host.Version
mens du kjører Get-Host
.
Fare, Will Robinson!
Register
Hvis du ikke vil åpne PowerShell selv, kan du også sjekke registret. Versjonen av PowerShell er gjemt under en verdi i registernøkkelbanen HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Denne registernøkkelen har en verdi kalt PowerShellVersion
som du kan referere til ved å bruke Get-ItemProperty
.
Du kan se at dette versjonen er lik, men inkluderer ikke revisjonen som de andre alternativene gjør.
Bruk av andre verktøy
Bruk av registeret betyr også at du ikke trenger å bruke PowerShell i det hele tatt for å finne versjonen. Du kan kjøre kommandoer fra ledeteksten eller et annet verktøy som kan lese registeret.
Register på eksterne datamaskiner
Registret er statisk og verdiene endres ikke lokalt eller eksternt. Du kan være trygg på at det du ser lokalt, vil være det samme som du ser eksternt.
Å vise den samme versjonen lokalt og eksternt er bra. Men jeg har en bedre måte å vise deg ved å bruke $PSVersionTable
automatisk variabel.
Sjekk Powershell-versjonen via $ PSVersionTable.PSVersion-kommandoen
Den siste og siste metoden refererer til PSVersion
-egenskapen på $PSVersionTable
automatisk variabel.Denne metoden vil alltid representere PowerShell-motoren.
Den automatiske variabelen $PSVersionTable
er en skrivebeskyttet hash-tabell. som returnerer informasjon spesifikt om PowerShell-motorversjonen. Denne automatiske variabelen returnerer ikke bare versjonen, men også PSEdition
. Denne egenskapen kan enten Core eller Desktop for å gi ytterligere informasjon om utgaven av PowerShell som kjører.
$ PSVersionTable on Remote Computers
Using the $PSVersionTable
automatisk variabel er nøyaktig lokalt som den er eksternt. Du kan se nedenfor at ved å pakke $PSVersionTable.PSVersion
i en skriptblokk og utføre den koden på en ekstern datamaskin, vil den returnere samme versjon.
Sammendrag
I dette blogginnlegget har du lært alle måtene å sjekke versjonen av PowerShell både lokalt og eksternt. Jeg håper de første metodene ga deg en ide om hvilke måter du ikke kan sjekke versjonen på!
Jeg anbefaler alltid å bruke $PSVersionTable.PSVersion
. Alle de andre metodene kan se ut som PowerShell-motorversjonen, men gjenspeiler ikke alltid motorversjonen.