De Windows-versie vinden vanaf de PowerShell-opdrachtregel

Hoe vind ik welke Windows-versie ik gebruik?

Ik gebruik PowerShell 2.0 en heb geprobeerd:

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

Hoe doe ik dit?


Antwoord 1, autoriteit 100%

Aangezien je toegang hebt tot de .NET-bibliotheek, zou je ook toegang kunnen krijgen tot de OSVersioneigenschap van de System.Environmentklasse om deze informatie te verkrijgen. Voor het versienummer is er de eigenschap Version.

Bijvoorbeeld

PS C:\> [System.Environment]::OSVersion.Version
Major  Minor  Build  Revision
-----  -----  -----  --------
6      1      7601   65536

Details van Windows-versies zijn te vinden hier.


Antwoord 2, autoriteit 54%

  1. Om het Windows-versienummer te krijgen, zoals Jeff opmerkt in zijn antwoord, gebruikt u:

    [Environment]::OSVersion
    

    Het is vermeldenswaard dat het resultaat van het type [System.Version], dus het is mogelijk om te controleren op bijvoorbeeld Windows 7/Windows Server 2008 R2 en hoger met

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

    Dit zal u echter niet vertellen of het client of server Windows is, noch de naam van de versie.

  2. Gebruik Win32_OperatingSystemklasse (altijd één instantie), bijvoorbeeld:

    (Get-WmiObject -class Win32_OperatingSystem).Caption
    

    zal iets teruggeven als

    Microsoft® Windows Server® 2008 Standard


Antwoord 3, autoriteit 39%

Helaas geven de meeste andere antwoorden geen informatie die specifiek is voor Windows 10.

Windows 10 heeft versiesvan zijn eigen: 1507, 1511, 1607, 1703, enz. Dit is wat winverlaat zien.

Powershell:
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId
Command prompt (CMD.EXE):
Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId

Zie ook gerelateerde vraag over superuser.

Zoals andere Windows-versies gebruiken 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-uitgang voor dezelfde opdracht:

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:\Windows\system32
System Locale       : en-us;English (United States)
Hotfix(s)           : N/A

4, Autoriteit 17%

Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer

Retourneren

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

Antwoord 5, autoriteit 7%

Sinds PowerShell 5:

Get-ComputerInfo
Get-ComputerInfo -Property Windows*

Ik denk dat dit commando de 1001 verschillende manieren die tot nu toe zijn ontdekt om systeeminformatie te verzamelen ongeveer probeert…


Antwoord 6, autoriteit 4%

Als u onderscheid wilt maken tussen Windows 8.1 (6.3.9600) en Windows 8 (6.2.9200), gebruik dan

(Get-CimInstance Win32_OperatingSystem).Version 

om de juiste versie te krijgen. [Environment]::OSVersionwerkt niet goed in Windows 8.1 (het geeft een Windows 8-versie terug).


Antwoord 7, autoriteit 4%

Ik verfijn een van de antwoorden

Ik heb deze vraag bereikt terwijl ik probeerde de uitvoer van winver.exe te matchen:

Version 1607 (OS Build 14393.351)

Ik heb de build-string kunnen extraheren met:

,((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name BuildLabEx).BuildLabEx -split '\.') | % {  $_[0..1] -join '.' }  

Resultaat: 14393.351

Bijgewerkt: hier is een enigszins vereenvoudigd script met regex

(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").BuildLabEx -match '^[0-9]+\.[0-9]+' |  % { $matches.Values }

8, Autoriteit 3%

Ik nam de scripts hierboven en tweaked ze een beetje om hiermee met deze te komen:

$name=(Get-WmiObject Win32_OperatingSystem).caption
$bit=(Get-WmiObject Win32_OperatingSystem).OSArchitecture
$vert = " Version:"
$ver=(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId
$buildt = " Build:"
$build= (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").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

Om een ​​resultaat als volgt te krijgen:

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

HINT: Ik zou een hand op prijs stellen die de voorvoegseltekst uit de installatiedatum zou strippen, zodat ik het kan vervangen door een meer leesbare koptekst.


9, Autoriteit 2%

om identieke uitvoer te produceren naar Winver.exe in PowerShell V5 op Windows 10 1809:

$Version = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\'
"Version $($Version.ReleaseId) (OS Build $($Version.CurrentBuildNumber).$($Version.UBR))"

10, Autoriteit 2%

Gebruik:

Get-WmiObject -class win32_operatingsystem -computer computername | Select-Object Caption

11, Autoriteit 2%

Als u probeert informatie te ontcijferen, plaatst MS op hun patching-site, zoals https://technet.microsoft.com/en-us/library/security/ms17-010.aspx

U hebt een combo nodig, zoals:

$name=(Get-WmiObject Win32_OperatingSystem).caption
$bit=(Get-WmiObject Win32_OperatingSystem).OSArchitecture
$ver=(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId
Write-Host $name, $bit, $ver

Microsoft Windows 10 Home 64-bit 1703


12

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
}

Voor weergave (beide versies):

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

Antwoord 13

Dit is echt een lange draad, en waarschijnlijk omdat de antwoorden, hoewel correct, de fundamentele vraag niet oplossen.
Ik kwam deze site tegen: Versie & Build-nummersdie een duidelijk overzicht gaven van wat er in de wereld van Microsoft Windows is.

Omdat het mijn interesse is om te weten met welk Windows-besturingssysteem ik te maken heb, heb ik de hele versie-regenboog weggelaten en in plaats daarvan gefocust op het buildnummer.
Het buildnummer kan worden bereikt door:

([Environment]::OSVersion.Version).Build

of door:

(Get-CimInstance Win32_OperatingSystem).buildNumber

de keuze is aan jou, hoe je het ook wilt.
Dus van daaruit zou ik iets kunnen doen in de trant van:

   switch ((Get-CimInstance Win32_OperatingSystem).BuildNumber) 
{
    6001 {$OS = "W2K8"}
    7600 {$OS = "W2K8R2"}
    7601 {$OS = "W2K8R2SP1"}    
    9200 {$OS = "W2K12"}
    9600 {$OS = "W2K12R2"}
    14393 {$OS = "W2K16v1607"}
    16229 {$OS = "W2K16v1709"}
    default { $OS = "Not Listed"}
}
Write-Host "Server system: $OS" -foregroundcolor Green

Opmerking: zoals u kunt zien, gebruikte ik het bovenstaande alleen voor serversystemen, maar het kan eenvoudig worden toegepast op werkstations of zelfs slim uitgebreid tot ondersteuning van beide … maar ik laat dat aan u.

Geniet van, & amp; Veel plezier!


14

Moet zo eenvoudig zijn:

Get-ComputerInfo  | select windowsversion

15

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

16

Hiermee geeft u het volledige en correct (hetzelfde versienummer dat u vindt wanneer u WINVER.EXE) Versie van Windows (inclusief Revision / Build Number) op afstand, in tegenstelling tot alle andere oplossingen (getest op Windows & NBSP; 10):

Function Get-OSVersion {
Param($ComputerName)
    Invoke-Command -ComputerName $ComputerName -ScriptBlock {
        $all = @()
        (Get-Childitem c:\windows\system32) | ? 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"
    }
}

17

Ik heb veel gezocht om de exacte versie te achterhalen, omdat de WSUS-server de verkeerde versie toont.
Het beste is om een revisie te krijgen van de UBR-registersleutel.

   $WinVer = New-Object –TypeName PSObject
$WinVer | Add-Member –MemberType NoteProperty –Name Major –Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' CurrentMajorVersionNumber).CurrentMajorVersionNumber
$WinVer | Add-Member –MemberType NoteProperty –Name Minor –Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' CurrentMinorVersionNumber).CurrentMinorVersionNumber
$WinVer | Add-Member –MemberType NoteProperty –Name Build –Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' CurrentBuild).CurrentBuild
$WinVer | Add-Member –MemberType NoteProperty –Name Revision –Value $(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion' UBR).UBR
$WinVer

Antwoord 18

Met Windows Powershell is het mogelijk om op de volgende manier de benodigde gegevens te verkrijgen

Bijschrift:

(Get-WmiObject -class Win32_OperatingSystem).Caption

Release-ID:

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

versie:

(Get-CimInstance Win32_OperatingSystem).version

Antwoord 19

[opgelost]

#copy all the code below:
#save file as .ps1 run and see the magic
 Get-WmiObject -Class Win32_OperatingSystem | ForEach-Object -MemberName Caption
 (Get-CimInstance Win32_OperatingSystem).version

#-------------comment-------------#
#-----finding windows version-----#

$version= (Get-CimInstance Win32_OperatingSystem).version
$length= $version.Length
$index= $version.IndexOf(".")
[int]$windows= $version.Remove($index,$length-2)  
$windows
#-----------end------------------#
#-----------comment-----------------#

20

Je zou ook zoiets kunnen gebruiken, door de Osversion.version.major te controleren:

IF ([System.Environment]::OSVersion.Version.Major -ge 10) {Write-Host "Windows 10 or above"}
IF ([System.Environment]::OSVersion.Version.Major -lt 10) {Write-Host "Windows 8.1 or below"}

21

HKLM \ SOFTWARING \ MICROSOFT \ Windows NT \ CurrentVersion \ Update \ TargetingINFO \ geïnstalleerd \ client.os.rs2.amd64 \ versie
‘Voor Win 10 Client’

HKLM \ SOFTWARING \ Microsoft \ Windows NT \ CurrentVersion \ Update \ TargetingINFO \ installed \ Server.os.amd64 \ versie
‘Voor server OS’


22

(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Update\TargetingInfo\Installed\Client.OS.rs2.amd64').version

Op basis van het eerdere antwoord van Tim, is het leuke aan deze specifieke locatie dat het pand al in wat ik een voorkeursindeling zou noemen.


23

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

Op Windows 10 Retourneren: 10.0.10586.420

U kunt de variabele vervolgens gebruiken om toegang te krijgen tot eigenschappen voor gedetailleerde vergelijking

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

Bovendien kunt u versies van besturingssystemen vergelijken met behulp van de volgende

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

Antwoord 24

Je kunt python gebruiken om dingen te vereenvoudigen (werkt op alle Windows-versies en alle andere platforms):

import platform
print(platform.system()) # returns 'Windows', 'Linux' etc.
print(platform.release()) # returns for Windows 10 or Server 2019 '10'
if platform.system() = 'Windows':
    print(platform.win32_ver()) # returns (10, 10.0.17744, SP0, Multiprocessor Free) on windows server 2019

Other episodes