Sådan finder du Windows-versionen fra PowerShell-kommandolinjen?

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan finder jeg hvilken Windows-version jeg bruger?


Jeg bruger PowerShell 2.0 og prøvede:


PS C:> ver
The term 'ver' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify tha
t the path is correct and try again.
At line:1 char:4
+ ver <<<< 
    + CategoryInfo          : ObjectNotFound: (ver:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


Hvordan gør jeg det her?

Bedste reference


Da du har adgang til .NET-biblioteket, kunne du få adgang til OSVersion egenskaben i System.Environment klassen for at få disse oplysninger. For versionsnummeret er der Version egenskaben. [47] [48]


For eksempel,


PS C:> [System.Environment]::OSVersion.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
6      1      7601   65536


Oplysninger om Windows-versioner findes her. [49]

Andre referencer 1



  1. For at få Windows versionsnummer, som Jeff noterer i sit svar, brug:


    [Environment]::OSVersion
    


    Det er værd at bemærke, at resultatet er af typen [System.Version], så det er muligt at kontrollere, om Windows &Nbsp; 7/Windows Server 2008 R2 og senere med [51]


    [Environment]::OSVersion.Version -ge (new-object 'Version' 6,1)
    


    Dette vil dog ikke fortælle dig, om det er klient eller server Windows, eller navnet på versionen.

  2. Brug WMIs Win32\_OperatingSystem klasse (altid enkelt forekomst), for eksempel: [52]


    (Get-WmiObject -class Win32\_OperatingSystem).Caption
    


    vil vende tilbage noget lignende



      Microsoft® Windows Server® 2008 Standard



Andre referencer 2


Get-WmiObject -Class Win32\_OperatingSystem | ForEach-Object -MemberName Caption


Eller golfed


gwmi win32\_operatingsystem | \% caption


Resultat


Microsoft Windows 7 Ultimate

Andre referencer 3


Desværre giver de fleste af de andre svar ikke oplysninger, der er specifikke for Windows 10.


Windows 10 har versioner selv: 1507, 1511, 1607, 1703 osv. Dette er hvad winver viser. [53] [54]


Powershell:
(Get-ItemProperty "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion").ReleaseId

Command prompt (CMD.EXE):
Reg Query "HKLMSOFTWAREMicrosoftWindows NTCurrentVersion" /v ReleaseId


Se også relaterede spørgsmål om superbrugeren. [55]


Hvad angår andre Windows-versioner, brug systeminfo. Powershell wrapper:


PS C:> systeminfo /fo csv | ConvertFrom-Csv | select OS*, System*, Hotfix* | Format-List


OS Name             : Microsoft Windows 7 Enterprise
OS Version          : 6.1.7601 Service Pack 1 Build 7601
OS Manufacturer     : Microsoft Corporation
OS Configuration    : Standalone Workstation
OS Build Type       : Multiprocessor Free
System Type         : x64-based PC
System Locale       : ru;Russian
Hotfix(s)           : 274 Hotfix(s) Installed.,[01]: KB2849697,[02]: KB2849697,[03]:...


Windows 10 output til den samme kommando:


OS Name             : Microsoft Windows 10 Enterprise N 2016 LTSB
OS Version          : 10.0.14393 N/A Build 14393
OS Manufacturer     : Microsoft Corporation
OS Configuration    : Standalone Workstation
OS Build Type       : Multiprocessor Free
System Type         : x64-based PC
System Directory    : C:Windowssystem32
System Locale       : en-us;English (United States)
Hotfix(s)           : N/A

Andre referencer 4


Dette vil give dig den fulde version af Windows (herunder Revision/Build nummer) i modsætning til alle ovenstående løsninger:


(Get-ItemProperty -Path c:windowssystem32hal.dll).VersionInfo.FileVersion


Resultat:


10.0.10240.16392 (th1\_st1.150716-1608)

Andre referencer 5


Hvis du vil skelne mellem Windows   8.1 (6.3.9600) og Windows   8 (6.2.9200), brug


(Get-CimInstance Win32\_OperatingSystem).Version 


for at få den rigtige version. [Environment]::OSVersion fungerer ikke ordentligt i Windows 8.1 (det returnerer en Windows   8-version).

Andre referencer 6


Jeg raffinerer et af svarene


Jeg nåede dette spørgsmål, mens jeg forsøgte at matche output fra winver.exe:


Version 1607 (OS Build 14393.351)


Jeg var i stand til at udtrække byggestrengen med:


,((Get-ItemProperty -Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion" -Name BuildLabEx).BuildLabEx -split '.') | \% {  $\_[0..1] -join '.' }  


Resultat: 14393.351


Opdateret : Her er et lidt forenklet script ved hjælp af regex


(Get-ItemProperty "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion").BuildLabEx -match '^[0-9]+.[0-9]+' |  \% { $matches.Values }

Andre referencer 7


Siden PowerShell 5:


Get-ComputerInfo
Get-ComputerInfo -Property Windows*


Jeg tror, ​​at denne kommando stort set forsøger de 1001 forskellige måder hidtil opdaget at indsamle systemoplysninger ...

Andre referencer 8


Som MoonStom siger, fungerer [Environment]::OSVersion ikke korrekt på en opgraderet Windows 8.1: (den returnerer en Windows &Nbsp; 8-version): link. [57]


Hvis du vil skelne mellem Windows   8.1 (6.3.9600) og Windows   8 (6.2.9200), kan du bruge (Get-CimInstance Win32\_OperatingSystem).Version for at få den rigtige version. Men det virker ikke i PowerShell 2. Så brug dette:


$version = $null
try {
    $version = (Get-CimInstance Win32\_OperatingSystem).Version
}
catch {
    $version = [System.Environment]::OSVersion.Version | \% {"{0}.{1}.{2}" -f $\_.Major,$\_.Minor,$\_.Build}
}

Andre referencer 9


Brug:


Get-WmiObject -class win32\_operatingsystem -computer computername | Select-Object Caption

Andre referencer 10


Windows PowerShell 2.0:


$windows = New-Object -Type PSObject |
           Add-Member -MemberType NoteProperty -Name Caption -Value (Get-WmiObject -Class Win32\_OperatingSystem).Caption -PassThru |
           Add-Member -MemberType NoteProperty -Name Version -Value [Environment]::OSVersion.Version                     -PassThru


Windows PowerShell 3.0:


$windows = [PSCustomObject]@{
    Caption = (Get-WmiObject -Class Win32\_OperatingSystem).Caption
    Version = [Environment]::OSVersion.Version
}


Til visning (begge versioner):


"{0}  ({1})" -f $windows.Caption, $windows.Version 

Andre referencer 11


Ifølge Lars Fosdal - Sådan finder du Windows-versionen fra PowerShell-kommandolinjen?


PS C:> Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer


vender tilbage


WindowsProductName    WindowsVersion OsHardwareAbstractionLayer
------------------    -------------- --------------------------
Windows 10 Enterprise 1709           10.0.16299.371 


Kan dette gøres fjernt? For eksempel som dette:


Get-WMIObject –class win32\_ComputerSystem –computername ProdBIG


Så jeg tror jeg stiller spørgsmålet forkert.


Er der væk for at få disse oplysninger til en anden fjerncomputer?

Andre referencer 12


(Get-ItemProperty -Path 'HKLM: \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion' -Name BuildLabEx) .BuildLabEx

Andre referencer 13


Dette vil give dig den fulde og korrekte (det samme versionsnummer, som du finder, når du kører winver.exe) version af Windows (herunder revision/build number) REMOTELT i modsætning til alle andre løsninger (testet på Windows   10):


Function Get-OSVersion {
Param($ComputerName)
    Invoke-Command -ComputerName $ComputerName -ScriptBlock {
        $all = @()
        (Get-Childitem c:windowssystem32) | ? Length | Foreach {

            $all += (Get-ItemProperty -Path $\_.FullName).VersionInfo.Productversion
        }
        $version = [System.Environment]::OSVersion.Version
        $osversion = "$($version.major).0.$($version.build)"
        $minor = @()
        $all | ? {$\_ -like "$osversion*"} | Foreach {
            $minor += [int]($\_ -replace".*.")
        }
        $minor = $minor | sort | Select -Last 1

        return "$osversion.$minor"
    }
}

Andre referencer 14


Hvis du forsøger at dechiffrere info, sættes MS på deres patch-site, f.eks. Https://technet.microsoft.com/en-us/library/security/ms17-010.aspx [59]


du skal bruge en kombinationsboks som:


$name=(Get-WmiObject Win32\_OperatingSystem).caption $bit=(Get-WmiObject Win32\_OperatingSystem).OSArchitecture $ver=(Get-ItemProperty "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion").ReleaseId Write-Host $name, $bit, $ver


Microsoft Windows 10 Home 64-bit 1703

Andre referencer 15


Jeg tog skripterne over og tweaked dem lidt for at komme op med dette:


$name=(Get-WmiObject Win32\_OperatingSystem).caption
$bit=(Get-WmiObject Win32\_OperatingSystem).OSArchitecture

$vert = " Version:"
$ver=(Get-ItemProperty "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion").ReleaseId

$buildt = " Build:"
$build= (Get-ItemProperty "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion").BuildLabEx -match '^[0-9]+.[0-9]+' |  \% { $matches.Values }

$installd = Get-ComputerInfo -Property WindowsInstallDateFromRegistry

Write-host $installd
Write-Host $name, $bit, $vert, $ver, `enter code here`$buildt, $build, $installd





For at få et resultat som dette:


Microsoft Windows 10 Home 64-bit Version: 1709 Byg: 16299.431 @ {WindowsInstallDateFromRegistry=18-01-01 2:29:11}


Tip: Jeg værdsætter en hånd, der fjerner præfikseteksten fra installationsdatoen, så jeg kan erstatte den med en læsbar overskrift.

Andre referencer 16


Jeg søgte meget for at finde ud af den nøjagtige version, fordi WSUS-serveren viser den forkerte version.
Det bedste er at få revision fra UBR-registreringsdatabasen KEY.


    $WinVer = New-Object –TypeName PSObject
$WinVer | Add-Member –MemberType NoteProperty –Name Major –Value $(Get-ItemProperty -Path 'Registry::HKEY\_LOCAL\_MACHINESoftwareMicrosoftWindows NTCurrentVersion' CurrentMajorVersionNumber).CurrentMajorVersionNumber
$WinVer | Add-Member –MemberType NoteProperty –Name Minor –Value $(Get-ItemProperty -Path 'Registry::HKEY\_LOCAL\_MACHINESoftwareMicrosoftWindows NTCurrentVersion' CurrentMinorVersionNumber).CurrentMinorVersionNumber
$WinVer | Add-Member –MemberType NoteProperty –Name Build –Value $(Get-ItemProperty -Path 'Registry::HKEY\_LOCAL\_MACHINESoftwareMicrosoftWindows NTCurrentVersion' CurrentBuild).CurrentBuild
$WinVer | Add-Member –MemberType NoteProperty –Name Revision –Value $(Get-ItemProperty -Path 'Registry::HKEY\_LOCAL\_MACHINESoftwareMicrosoftWindows NTCurrentVersion' UBR).UBR
$WinVer

Andre referencer 17


PS C:> Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer


vender tilbage


WindowsProductName    WindowsVersion OsHardwareAbstractionLayer
------------------    -------------- --------------------------
Windows 10 Enterprise 1709           10.0.16299.371 

Andre referencer 18


$OSVersion = [Version](Get-ItemProperty -Path "$($Env:Windir)System32hal.dll" -ErrorAction SilentlyContinue).VersionInfo.FileVersion.Split()[0]


På Windows 10 vender tilbage: 10.0.10586.420


Du kan derefter bruge variablen til at få adgang til egenskaber til granulær sammenligning


$OSVersion.Major equals 10
$OSVersion.Minor equals 0
$OSVersion.Build equals 10586
$OSVersion.Revision equals 420


Derudover kan du sammenligne operativsystemversioner ved hjælp af følgende


If ([Version]$OSVersion -ge [Version]"6.1")
   {
       #Do Something
   }