I PowerShell er der en zillion måder at gøre det samme (eller tæt på det). I dette blogindlæg lærer du alle måder at kontrollere PowerShell-versionen, du har på lokale og eksterne computere. Vi dækker de dårlige måder og min anbefalede måde.
Hvis du vil gå fra PowerShell-nybegynder til PowerShell-guru, anbefaler jeg at fortære denne GRATIS mini-kursus om opbygning af et PowerShell-værktøj. Dette er en trinvis vejledning med fulde forklaringer og vejledning fra Adam the Automator!
Der er websteder, der viser forskellige måder at kontrollere Powershell-versionen på. Men ingen der samlede en omfattende liste over dem alle. Jeg besluttede at ændre det.
Alle disse måder skal fungere i både Windows PowerShell og PowerShell Core. Disse metoder skal også fungere i Windows PowerShell version 1.0 helt op til PowerShell 7.
De måder, du kan finde ud af en version af PowerShell, du kører, er:
- Egenskaben
(Get-Host).Version
-
$host.Version
- Registret (kun Windows PowerShell)
- Egenskaben
$PSVersionTable.PSVersion
Lad os opdele alle måder at finde versionen af PowerShell fra den mindst til den mest anbefalede måde .
Indholdsfortegnelse
Get-Host
PowerShell har et koncept kendt som værter. En vært er et program, der er vært for PowerShell-motoren. Det er ikke selve PowerShell-motoren. PowerShell-konsollen eller en kodeditor med en integreret terminal er PowerShell-værter.
En vært kan have en version, der er fuldstændig uafhængig af selve PowerShell. Dette kan bedrage mange nyankomne. Lad mig vise dig hvorfor.
Hvis du kører (Get-Host).Version
, vil du se, at det returnerer et versionsnummer, der ser ud til at kunne være PowerShell-motorversionen. Udseendet kan bedrage.
Nedenfor har jeg kørt Get-Host
på Windows PowerShell 5.1, og du kan se, at det kommer tilbage med 5.1.17134.858. Dette ligner en legitim version.
Men nogle gange når du kører Get-Host
i en integreret terminal, version er ikke den samme. Selvom værten normalt vil repræsentere den samme version af motoren, skal du ikke altid gøre det.
Kontroller Powershell-version via Get-Host på fjerncomputere
Selvom Get-Host
ser ud til at returnere den samme version, når den køres på en lokal computer, det vil den aldrig på fjerncomputere.
Lad os for eksempel køre Get-Host
på en ekstern Windows Server 2016-server via Invoke-Command
og se hvad der sker.
Sidste gang jeg tjekkede, er det ikke muligt at køre PowerShell v1 på Windows Server 2016.
At stole på Get-Host
er bare en dårlig idé overalt.
Kontroller Powershell Version $ host.Version-kommando
Henvisning til $host.Version
er en anden måde at kontrollere Powershell-versionen på. $host
-variablen er en automatisk variabel, der returnerer den samme output som Get-Host
.
Der er ikke noget særligt ved denne metode. Det er simpelthen det samme som at køre Get-Host
.
$ host. Version på fjerncomputere
Du vil se den samme adfærd via PowerShell Remoting med $host.Version
som du kører Get-Host
.
Fare, Will Robinson!
Registreringsdatabase
Hvis du ikke ønsker at åbne PowerShell selv, kan du også kontrollere registreringsdatabasen. Versionen af PowerShell gemmes væk under en værdi i registreringsdatabasenøglens sti HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine
. Denne registreringsdatabasenøgle har en værdi kaldet PowerShellVersion
, som du kan henvise til ved hjælp af Get-ItemProperty
.
Du kan se, at dette version er ens, men inkluderer ikke revisionen som de andre muligheder gør.
Brug af andre værktøjer
Brug af registreringsdatabasen betyder også, at du slet ikke behøver at bruge PowerShell for at finde versionen. Du kan køre kommandoer fra kommandoprompten eller et andet værktøj, der kan læse registreringsdatabasen.
Registreringsdatabase på eksterne computere
Registret er statisk, og værdierne ændres ikke lokalt eller eksternt. Du kan være sikker på, at det, du ser lokalt, vil være det samme som du ser eksternt.
Det er godt at vise den samme version lokalt og eksternt. Men jeg har en bedre måde at vise dig ved hjælp af $PSVersionTable
automatisk variabel.
Kontroller Powershell-version via $ PSVersionTable.PSVersion-kommando
Den sidste og sidste metode henviser til egenskaben PSVersion
på $PSVersionTable
automatisk variabel.Denne metode repræsenterer altid PowerShell-motoren.
Den automatiske variabel $PSVersionTable
er en skrivebeskyttet hash-tabel der returnerer information specifikt om PowerShell-motorversionen. Denne automatiske variabel returnerer ikke kun versionen, men også PSEdition
. Denne egenskab kan enten Core eller Desktop for at give yderligere oplysninger om den udgave af PowerShell, der kører.
$ PSVersionTable på fjerncomputere
Brug af $PSVersionTable
automatisk variabel er nøjagtig lokalt, da den er ekstern. Du kan se nedenfor, at ved at indpakke $PSVersionTable.PSVersion
i en scriptblock og udføre denne kode på en fjerncomputer, vil den returnere den samme version.
Oversigt
I dette blogindlæg har du lært alle måder at kontrollere versionen af PowerShell både lokalt og eksternt. Jeg håber, at de første par metoder gav dig en idé om, hvilke måder du ikke kan kontrollere versionen på!
Jeg anbefaler altid at bruge $PSVersionTable.PSVersion
. Alle de andre metoder kan se ud som PowerShell-motorversionen, men afspejler muligvis ikke altid motorversionen.