Jak sprawdzić, której wersji systemu Windows używam?
Używam PowerShell 2.0 i próbowałem:
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
Jak mam to zrobic?
Odpowiedzi:
Ponieważ masz dostęp do biblioteki .NET, możesz uzyskać dostęp do
OSVersion
właściwościSystem.Environment
klasy, aby uzyskać te informacje. Numer wersji zawieraVersion
właściwość.Na przykład,
Szczegóły dotyczące wersji systemu Windows można znaleźć tutaj .
źródło
[Environment]::OSVersion
działa wOSVersion.Version.Major
winver
pokazuje mi wersję 1607. Ale powyższa komenda PowerShell nie daje 1607. Gdzie znajdę ten numer „1607” w programie Powershell?(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
[System.Environment]::OSVersion
nie jest przestarzałe, a metoda, z której korzysta w tle, jest przestarzała. Nowe wersje PS zmieniają zachowanie backendu: github.com/PowerShell/PowerShell/issues/ ...Aby uzyskać numer wersji systemu Windows, jak zauważa Jeff w swojej odpowiedzi , użyj:
Warto zauważyć, że wynik jest typowy
[System.Version]
, więc można sprawdzić, na przykład, Windows 7 / Windows Server 2008 R2 i nowsze za pomocą[Environment]::OSVersion.Version -ge (new-object 'Version' 6,1)
Jednak nie powie ci, czy jest to klient czy serwer Windows, ani nazwa wersji.
Użyj
Win32_OperatingSystem
klasy WMI (zawsze pojedynczej instancji), na przykład:zwróci coś takiego
źródło
Niestety większość pozostałych odpowiedzi nie zawiera informacji dotyczących systemu Windows 10.
Windows 10 ma własne wersje : 1507, 1511, 1607, 1703 itd . Oto, co
winver
widać.Powershell: (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId Command prompt (CMD.EXE): Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId
Zobacz także powiązane pytanie dotyczące superużytkownika .
Podobnie jak w przypadku innych wersji systemu Windows, użyj
systeminfo
. Opakowanie PowerShell:Dane wyjściowe systemu Windows 10 dla tego samego polecenia:
źródło
winver
na komputerze stacjonarnym isysteminfo
serwerze. Od lat wprawia mnie w zakłopotanie, że nie ma jednolitego sposobu uzyskania tych informacji.OS Version : 6.3.9600 N/A Build 9600
. Tak więc w wersjach poniżej W81 może być bardziej pouczające przyjrzenie się (zawsze pomijanym) wersjom LTSB. Zobacz wyjście z:(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").BuildLabEx
co może wyglądać następująco:9600.19179.amd64fre.winblue_ltsb_escrow.181015-1847
. Moje przypuszczenie jest to, że181015
jest to data budowy, podczas gdy1847
jest budowa lub wydanie wersji. Być może będziesz musiał porównać to z kernelem, hal .meta
problem?Albo grał w golfa
Wynik
źródło
zwroty
źródło
W ten sposób otrzymasz pełną wersję systemu Windows (w tym numer wersji / kompilacji) w przeciwieństwie do wszystkich powyższych rozwiązań:
Wynik:
źródło
10.0.10586.0 (th2_release.151029-1700)
, podczas gdy winload.exe ma10.0.10586.63 (th2_release.160104-1513)
.version
. System operacyjny jest budowany (i aktualizowany) z części, tj. Jądra, warstwy HAL, UBR i funkcji itp. Zatem powinniśmy naprawdę wyświetlić je wszystkie. Pod tym względem myślęBuildLabEx
,Kernel
iHAL
(w tej kolejności) byłby najbardziej odpowiedni sposób, aby dać bardziej właściwą wersję . Ale ponieważ wydaje się, że wiesz, co jest nie tak , powinieneś opublikować to, co jest dobre .Od PowerShell 5:
Myślę, że to polecenie prawie próbuje 1001 różnych odkrytych do tej pory sposobów zbierania informacji o systemie ...
źródło
Jeśli chcesz odróżnić Windows 8.1 (6.3.9600) i Windows 8 (6.2.9200), użyj
aby uzyskać odpowiednią wersję.
[Environment]::OSVersion
nie działa poprawnie w Windows 8.1 (zwraca wersję Windows 8).źródło
[Environment]::OSVersion
działa wOSVersion.Version.Major
(Get-CimInstance Win32_OperatingSystem).Version
i[Environment]::OSVersion
działają dla mnie i zwracają ten sam wynik: 6.3.9600.0Doprecyzowuję jedną z odpowiedzi
Dotarłem do tego pytania, próbując dopasować dane wyjściowe z winver.exe:
Version 1607 (OS Build 14393.351)
Udało mi się wyodrębnić ciąg kompilacji za pomocą:
,((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name BuildLabEx).BuildLabEx -split '\.') | % { $_[0..1] -join '.' }
Wynik:
14393.351
Zaktualizowano : Oto nieco uproszczony skrypt używający wyrażenia regularnego
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").BuildLabEx -match '^[0-9]+\.[0-9]+' | % { $matches.Values }
źródło
Wziąłem powyższe skrypty i trochę je poprawiłem, aby wymyślić to:
$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
Aby uzyskać taki wynik:
Microsoft Windows 10 Home 64-bit Wersja: 1709 Kompilacja: 16299.431 @ {WindowsInstallDateFromRegistry = 18-01-01 2:29:11 AM}
Wskazówka: byłbym wdzięczny za ręczne usunięcie tekstu prefiksu z daty instalacji, abym mógł zastąpić go bardziej czytelnym nagłówkiem.
źródło
[timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970')).AddSeconds($(get-itemproperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion").InstallDate)
jest trochę bardziej złożone, ale działa o wiele szybciej. Możesz nawet pominąć część dotyczącą strefy czasowej:([datetime]'1/1/1970').AddSeconds($(get-itemproperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion").InstallDate)
Jak mówi MoonStom,
[Environment]::OSVersion
nie działa poprawnie na zaktualizowanym Windows 8.1 (zwraca wersję Windows 8): link .Jeśli chcesz odróżnić Windows 8.1 (6.3.9600) i Windows 8 (6.2.9200), możesz użyć,
(Get-CimInstance Win32_OperatingSystem).Version
aby uzyskać odpowiednią wersję. Jednak to nie działa w PowerShell 2. Użyj tego:$version = $null try { $version = (Get-CimInstance Win32_OperatingSystem).Version } catch { $version = [System.Environment]::OSVersion.Version | % {"{0}.{1}.{2}" -f $_.Major,$_.Minor,$_.Build} }
źródło
Posługiwać się:
źródło
Jeśli próbujesz odszyfrować informacje, które MS umieszcza na swojej stronie z poprawkami, na przykład https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
będziesz potrzebować kombinacji, takiej jak:
$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-bitowy 1703
źródło
Aby wygenerować identyczne dane wyjściowe z winver.exe w programie PowerShell v5 w systemie Windows 10 1809:
$Version = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\' "Version $($Version.ReleaseId) (OS Build $($Version.CurrentBuildNumber).$($Version.UBR))"
źródło
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 }
Do wyświetlania (obie wersje):
"{0} ({1})" -f $windows.Caption, $windows.Version
źródło
(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name BuildLabEx).BuildLabEx
źródło
To naprawdę długi wątek i prawdopodobnie dlatego, że odpowiedzi, choć poprawne, nie rozwiązują podstawowego pytania. Trafiłem na tę stronę: Numery wersji i kompilacji, która zapewnia jasny przegląd tego, czym jest świat Microsoft Windows.
Ponieważ interesuje mnie wiedza, z którym dokładnie systemem operacyjnym Windows mam do czynienia, odłożyłem na bok całą tęczową wersję i skupiłem się na numerze kompilacji. Numer kompilacji można uzyskać przez:
lub przez:
wybór należy do Ciebie, tak jak wolisz. Stamtąd mogłem zrobić coś w stylu:
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
Uwaga: Jak widać, użyłem powyższego tylko dla systemów serwerowych, jednak można go łatwo zastosować na stacjach roboczych lub nawet sprytnie rozszerzyć, aby obsługiwał oba ... ale zostawię to tobie.
Baw się dobrze!
źródło
W ten sposób otrzymasz pełną i PRAWIDŁOWĄ (ten sam numer wersji, który znajdziesz po uruchomieniu winver.exe) wersji systemu Windows (w tym numer wersji / kompilacji) ZDALNIE w przeciwieństwie do wszystkich innych rozwiązań (przetestowanych w systemie Windows 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" } }
źródło
Dużo szukałem, aby znaleźć dokładną wersję, ponieważ serwer WSUS pokazuje niewłaściwą wersję. Najlepiej jest uzyskać korektę z klucza rejestru UBR.
$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
źródło
Korzystając z programu Windows Powershell, można uzyskać potrzebne dane w następujący sposób
Podpis:
ReleaseId:
(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
wersja:
źródło
[rozwiązany]
#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-----------------#
źródło
Możesz również użyć czegoś takiego, sprawdzając OSVersion.Version.Major:
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"}
źródło
Powinno być takie proste:
źródło
$OSVersion = [Version](Get-ItemProperty -Path "$($Env:Windir)\System32\hal.dll" -ErrorAction SilentlyContinue).VersionInfo.FileVersion.Split()[0]
W systemie Windows 10 zwraca: 10.0.10586.420
Następnie możesz użyć zmiennej, aby uzyskać dostęp do właściwości w celu szczegółowego porównania
$OSVersion.Major equals 10 $OSVersion.Minor equals 0 $OSVersion.Build equals 10586 $OSVersion.Revision equals 420
Ponadto możesz porównać wersje systemu operacyjnego, korzystając z poniższych
If ([Version]$OSVersion -ge [Version]"6.1") { #Do Something }
źródło
Możesz użyć Pythona, aby uprościć rzeczy (działa na wszystkich wersjach systemu Windows i wszystkich innych platformach):
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
źródło