วิธีค้นหารุ่น Windows จากบรรทัดคำสั่ง PowerShell


133

ฉันจะค้นหาเวอร์ชั่น Windows ที่ใช้อยู่ได้อย่างไร

ฉันใช้ PowerShell 2.0 และลอง:

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

ฉันจะทำสิ่งนี้ได้อย่างไร


4
หากคุณกำลังดูใน 2019+ ไม่สนใจคำตอบที่ถูกทำเครื่องหมายว่าถูกต้องและตรงไปหนึ่งที่เป็นที่ถูกต้อง ไม่เป็นไร
BrainSlugs83

คำตอบ:


186

เนื่องจากคุณมีสิทธิ์เข้าถึงไลบรารี. NET คุณจึงสามารถเข้าถึงOSVersionคุณสมบัติของSystem.Environmentคลาสเพื่อรับข้อมูลนี้ สำหรับหมายเลขเวอร์ชั่นมีVersionคุณสมบัติ

ตัวอย่างเช่น,

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

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

รายละเอียดของ Windows รุ่นสามารถพบได้ที่นี่


4
โปรดทราบว่า[Environment]::OSVersionการทำงานในหน้าต่าง-10 , OSVersion.Version.Majorผลตอบแทน 10
yzorg

4
เมื่อฉันวิ่ง winverแสดงเวอร์ชัน 1607 ให้ฉัน แต่คำสั่ง powershell ด้านบนไม่ให้ 1607 ฉันจะได้รับหมายเลข "1607" นี้ใน Powershell ได้อย่างไร
CMCDragonkai

6
@CMCDragonkai(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId
Anton Krouglov

3
วิธีนี้เลิกใช้แล้วใน Windows 8.1 ดูลิงค์นี้สำหรับรายละเอียด
Slogmeister Extraordinaire

1
@SlogmeisterExtraordinaire คำสั่ง[System.Environment]::OSVersionไม่ได้ถูกคัดค้านวิธีการที่ใช้ในพื้นหลังนั้นถูกคัดค้าน เวอร์ชั่น PS ใหม่กำลังเปลี่ยนพฤติกรรมแบ็กเอนด์: github.com/PowerShell/PowerShell/issues/…
Randy

109
  1. ในการรับหมายเลขเวอร์ชัน Windows ตามที่ Jeff บันทึกไว้ในคำตอบให้ใช้:

    [Environment]::OSVersion

    เป็นที่น่าสังเกตว่าผลลัพธ์เป็นประเภท[System.Version]ดังนั้นจึงเป็นไปได้ที่จะตรวจสอบ, พูด, Windows 7 / Windows Server 2008 R2 และใหม่กว่าด้วย

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

    อย่างไรก็ตามสิ่งนี้จะไม่บอกคุณว่าเป็นไคลเอนต์หรือเซิร์ฟเวอร์ Windows หรือชื่อของรุ่น

  2. ใช้Win32_OperatingSystemคลาสของ WMI (อินสแตนซ์เดียวเสมอ) ตัวอย่างเช่น:

    (Get-WmiObject -class Win32_OperatingSystem).Caption

    จะคืนสิ่งที่ชอบ

    Microsoft® Windows Server® 2008 Standard


61

น่าเสียดายที่คำตอบอื่น ๆ ส่วนใหญ่ไม่ได้ให้ข้อมูลเฉพาะกับ Windows 10

วินโดวส์ 10 มีรุ่นของตัวเอง: 1507 1511 1607 1703 ฯลฯ นี่คือสิ่งที่winverแสดงให้เห็น

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

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

ดูเพิ่มเติมที่เกี่ยวข้องกับคำถามใน superuser

สำหรับ Windows อื่น ๆ systeminfoรุ่นที่ใช้ กระดาษห่อ Powershell:

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 สำหรับคำสั่งเดียวกัน:

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

3
ง่ายต่อการจดจำwinverบนเดสก์ท็อปและsysteminfo เซิร์ฟเวอร์ มันทำให้ฉันงุนงงมานานหลายปีแล้วว่าไม่มีวิธีที่เหมือนกันในการรับข้อมูลนี้
MortenB

2
ลิงก์ที่ยอดเยี่ยมไปยังข้อมูล MS ที่มีประโยชน์จริง ๆ มันควรจะตั้งข้อสังเกตว่าสำหรับ Win8.1 (และด้านล่าง?) OS Version : 6.3.9600 N/A Build 9600ข้อมูลที่แสดงคือ: ดังนั้นในรุ่นที่ต่ำกว่า W81 อาจให้ข้อมูลมากกว่านี้ในการดูรุ่น LTSB (มองข้ามเสมอ) เห็นผลลัพธ์จาก: ซึ่งอาจมีลักษณะเช่น:(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").BuildLabEx 9600.19179.amd64fre.winblue_ltsb_escrow.181015-1847ฉันเดาว่า181015ส่วนคือวันที่สร้างในขณะที่1847เป็นรุ่นที่สร้างหรือปล่อย นอกจากนี้คุณยังอาจจะต้องเปรียบเทียบนี้เพื่อเคอร์เนล, ห้องโถง
not2qubit

26
Get-WmiObject -Class Win32_OperatingSystem | ForEach-Object -MemberName Caption

หรือตีกอล์ฟ

gwmi win32_operatingsystem | % caption

ผลลัพธ์

Microsoft Windows 7 Ultimate

4
ขอแนะนำให้ใช้ Get-CimInstance แทน Get-WmiObject ในรหัสใหม่
Der_Meister

2
@Der_Meister นั่นเป็นเรื่องจริงสำหรับ PSv3 +
Maximilian Burszley

20

สิ่งนี้จะให้Windows เวอร์ชันเต็ม (รวมถึงหมายเลข Revision / Build)ซึ่งแตกต่างจากโซลูชันทั้งหมดด้านบน:

(Get-ItemProperty -Path c:\windows\system32\hal.dll).VersionInfo.FileVersion

ผลลัพธ์:

10.0.10240.16392 (th1_st1.150716-1608)

5
นี่เป็นทางออกที่ดีที่สุดเท่าที่ฉันกังวลเนื่องจากมีการรายงานหมายเลขการแก้ไขอย่างถูกต้อง ไม่มีอย่างอื่นเลย (อย่างน้อยที่สุดฉันได้ทำการทดสอบ)
BStateham

6
นี่เป็นทางออกเดียวที่ทำให้ฉันได้รับหมายเลขบิลเต็ม แต่ไม่ไฟล์ทั้งหมดใน system32 มีการปรับปรุงด้วยการปรับปรุงแต่ละ - ตัวอย่างเช่น hal.dll ของฉันยังคงแสดงให้เห็นว่าในขณะที่มี10.0.10586.0 (th2_release.151029-1700) winload.exe 10.0.10586.63 (th2_release.160104-1513)
melak47

2
นี่เป็นสคริปต์เล็กน้อยที่รับรุ่นจาก dll / exe ที่มีวันที่สร้างสูงสุด: gist
melak47

6
สิ่งนี้ขึ้นอยู่กับรายละเอียดการนำไปใช้งานทางด้านของ Microsoft ซึ่งไม่มีการรับประกันว่าพวกเขาจะยังคงทำต่อไป ใช้งานได้ในขณะนี้ แต่คุณควรหลีกเลี่ยงการใช้สิ่งนี้หากคุณต้องการให้สคริปต์ทำงานในระยะยาว
Nick

1
@ Jaykul ดีฉันไม่เห็นด้วยด้วยเหตุผล 2 ประการ (1) เพราะตัวเลขที่เหมือนกัน "1803" นั้นไม่สามารถใช้งานได้เสมอ (เช่นใน Win8) ดังนั้นควรใช้อะไรบ้าง (2) ไม่มีเหตุผลทางเทคนิคทำไมควรจะมีเพียงหนึ่งversionที่ถูกต้อง ระบบปฏิบัติการถูกสร้างขึ้น (และอัพเดท) โดยชิ้นส่วนเช่นเคอร์เนล, HAL, UBR และคุณสมบัติอื่น ๆ ดังนั้นเราจึงควรแสดงทั้งหมดของมัน ในส่วนที่ผมคิดว่าBuildLabEx, KernelและHAL(ตามลำดับ) จะเป็นวิธีที่เหมาะสมที่สุดที่จะให้เหมาะสมมากขึ้นรุ่น แต่เนื่องจากคุณดูเหมือนจะรู้ว่าสิ่งที่ไม่ถูกต้องคุณควรโพสต์สิ่งที่เป็นสิทธิ
not2qubit

18
Get-ComputerInfo | select WindowsProductName, WindowsVersion, OsHardwareAbstractionLayer

ผลตอบแทน

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

@ not2qubit จริงเหรอ? ประมาณ 1 วินาทีในหนังสือพื้นผิวของฉัน 2
Eric Herlitz

14

ตั้งแต่ PowerShell 5:

Get-ComputerInfo
Get-ComputerInfo -Property Windows*

ฉันคิดว่าคำสั่งนี้พยายามอย่างมากที่จะค้นพบวิธีต่าง ๆ กัน 1001 ครั้งเพื่อรวบรวมข้อมูลระบบ ...


ส่วนหนึ่งของการตอบสนองที่ฉันได้รับจากสิ่งนี้เป็นเรื่องแปลก ... ฉันใช้ Windows 10 1909 แต่ "WindowsCurrentVersion" คือ 6.3 ฉันคิดว่าน่าจะเท่ากับ 10 เท่ากับ 6.3 คือ Windows 8.1 มิฉะนั้นฉันชอบข้อมูลที่ให้ไว้โดยคำสั่งนี้
แรนดี้

8

หากคุณต้องการแยกความแตกต่างระหว่างการใช้งาน Windows 8.1 (6.3.9600) และ Windows 8 (6.2.9200)

(Get-CimInstance Win32_OperatingSystem).Version 

เพื่อรับรุ่นที่เหมาะสม [Environment]::OSVersionทำงานไม่ถูกต้องใน Windows 8.1 (ส่งคืนเวอร์ชัน Windows 8)


โปรดทราบว่า[Environment]::OSVersionการทำงานในหน้าต่าง-10 , OSVersion.Version.Majorผลตอบแทน 10
yzorg

1
ทั้งสอง(Get-CimInstance Win32_OperatingSystem).Versionและ[Environment]::OSVersionการทำงานสำหรับฉันและกลับผลเดียวกัน: 6.3.9600.0
VirtualVDX

โชคไม่ดีที่ 6.3.9600 ไม่ใช่เพียงแค่ชนะ 8.1 แต่เซิร์ฟเวอร์ 2012 R2 ก็ส่งคืนหมายเลขบิลด์เดียวกันนี้
bytejunkie

8

ฉันกำลังปรับปรุงหนึ่งในคำตอบ

ฉันมาถึงคำถามนี้ในขณะที่พยายามจับคู่ผลลัพธ์จาก winver.exe:

Version 1607 (OS Build 14393.351)

ฉันสามารถแยกสตริงการสร้างด้วย:

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

ผลลัพธ์: 14393.351

อัปเดต : นี่คือสคริปต์ที่เรียบง่ายเล็กน้อยโดยใช้ regex

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

5

ฉันใช้สคริปท์ข้างต้นและปรับแต่งเล็กน้อยเพื่อทำสิ่งนี้:

$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

เพื่อให้ได้ผลลัพธ์เช่นนี้:

Microsoft Windows 10 Home รุ่น 64 บิต: 1709 รุ่น: 16299.431 @ {WindowsInstallDateFromRegistry = 18-01-01 2:29:11 AM}

คำแนะนำ: ฉันขอขอบคุณมือที่ลอกข้อความคำนำหน้าจากวันที่ติดตั้งเพื่อให้ฉันสามารถแทนที่ด้วยส่วนหัวที่อ่านได้มากขึ้น


คำสั่งวันที่ติดตั้งใช้เวลาสักครู่ดังนั้นฉันจึงพบคำสั่งที่เร็วกว่า: [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970')).AddSeconds($(get-itemproperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion").InstallDate) มันซับซ้อนกว่าเล็กน้อย แต่ก็ทำงานได้เร็วกว่ามาก คุณอาจสามารถแยกส่วนของเขตเวลาออกไปได้:([datetime]'1/1/1970').AddSeconds($(get-itemproperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion").InstallDate)
แรนดี้

4

ในฐานะที่เป็น MoonStom กล่าวว่า[Environment]::OSVersionทำงานไม่ถูกต้องในการอัพเกรดของ Windows 8.1 (มันกลับเป็นรุ่น Windows 8): การเชื่อมโยง

หากคุณต้องการแยกความแตกต่างระหว่าง Windows 8.1 (6.3.9600) และ Windows 8 (6.2.9200) คุณสามารถใช้(Get-CimInstance Win32_OperatingSystem).Versionเพื่อรับรุ่นที่เหมาะสม อย่างไรก็ตามสิ่งนี้ไม่ทำงานใน PowerShell 2 ดังนั้นให้ใช้สิ่งนี้:

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

4

ใช้:

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

ยังสามารถรับหมายเลขรุ่นโดยใช้สิ่งนี้: Get-WmiObject -class win32_operatingsystem | เลือกรุ่น
KERR

คุณสามารถปรับปรุงคำตอบนี้โดยแสดงผลลัพธ์
james.garriss

4

หากคุณกำลังพยายามถอดรหัสข้อมูล MS วางอยู่บนไซต์การปะแก้เช่นhttps://technet.microsoft.com/en-us/library/security/ms17-010.aspx

คุณจะต้องคอมโบเช่น:

$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


2

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
}

สำหรับจอแสดงผล (ทั้งสองเวอร์ชัน):

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

2

ในการผลิตผลลัพธ์ที่เหมือนกันให้เป็น winver.exe ใน PowerShell v5 บน Windows 10 1809:

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

นอกจากนี้ยังตรงกับรุ่นใน "การตั้งค่า> ระบบ> เกี่ยวกับ" ใน Windows 10 และได้รับการอัปเดตการสร้างการแก้ไขซึ่งโซลูชันจำนวนมากไม่ได้อยู่ในเครื่องของฉัน👍
Vimes


1

นี่เป็นเธรดที่ยาวมากและอาจเป็นเพราะคำตอบที่ถูกต้องแม้ว่าจะไม่สามารถแก้ไขคำถามพื้นฐานได้ ฉันเจอเว็บไซต์นี้: หมายเลขรุ่นและสร้างที่ให้ภาพรวมที่ชัดเจนว่าอะไรคือสิ่งที่อยู่ในโลกของ Microsoft Windows

เนื่องจากความสนใจของฉันคือการทราบว่าฉันใช้ Windows OS ตัวใดฉันจึงทิ้งสายรุ้งทั้งเวอร์ชันและมุ่งเน้นไปที่ BuildNumber แทน หมายเลขบิลด์อาจได้รับโดย:

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

หรือโดย:

(Get-CimInstance Win32_OperatingSystem).buildNumber

ตัวเลือกเป็นของคุณในแบบที่คุณชอบ ดังนั้นจากที่นั่นฉันสามารถทำบางสิ่งตามแนวของ:

    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

หมายเหตุ: อย่างที่คุณเห็นฉันใช้สิ่งที่กล่าวมาข้างต้นสำหรับระบบเซิร์ฟเวอร์อย่างไรก็ตามมันสามารถนำไปใช้กับเวิร์กสเตชันได้อย่างง่ายดายหรือแม้กระทั่งขยายอย่างชาญฉลาดเพื่อรองรับทั้ง ... แต่ฉันจะทิ้งคุณไว้

สนุกและสนุก!


0

สิ่งนี้จะทำให้คุณได้รับเวอร์ชันเต็มและถูกต้อง (หมายเลขเวอร์ชันเดียวกับที่คุณพบเมื่อคุณเรียกใช้ winver.exe) เวอร์ชั่น Windows (รวมถึงรุ่นที่แก้ไข / สร้างหมายเลข) ระยะไกลต่างจากโซลูชันอื่น ๆ ทั้งหมด (ทดสอบบน 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"
    }
}

ฉันพบข้อผิดพลาดในการใช้งาน 'localhost' และใช้ชื่อคอมพิวเตอร์จริง (ตามที่ส่งคืนโดย 'ชื่อโฮสต์') บน localhost ของฉัน - เป็นไปได้ที่จะปรับแต่งโซลูชันนี้เพื่อให้ได้รับข้อมูลจากเครื่องท้องถิ่นโดยไม่ต้องเปิดใช้บริการ ฯลฯ
monojohnny

[xxxxxx] การเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล xxxxxx ล้มเหลวด้วยข้อความแสดงข้อผิดพลาดต่อไปนี้: ไคลเอ็นต์ไม่สามารถเชื่อมต่อไปยังปลายทางที่ระบุในคำขอ ตรวจสอบว่าบริการบนปลายทางกำลังทำงานอยู่และกำลังรับคำขอ ศึกษาบันทึกและเอกสารประกอบสำหรับบริการ WS-Management ที่ทำงานบนปลายทางโดยทั่วไปคือ IIS หรือ WinRM หากปลายทางคือบริการ WinRM ให้เรียกใช้คำสั่งต่อไปนี้บนปลายทางเพื่อวิเคราะห์และกำหนดค่าบริการ WinRM: "winrm quickconfig" สำหรับข้อมูลเพิ่มเติม [... ]
monojohnny

ทำงานให้ฉัน upvoted นั่นจะเป็นสคริปต์ที่สมบูรณ์แบบถ้ามันจะรวม windows id 10 release - 1507, 1511, 1607 เป็นต้น
Anton Krouglov

0

ฉันค้นหามากเพื่อค้นหารุ่นที่แน่นอนเนื่องจากเซิร์ฟเวอร์ WSUS แสดงรุ่นที่ไม่ถูกต้อง ที่ดีที่สุดคือการได้รับการแก้ไขจากรีจิสทรีคีย์ 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

0

การใช้ Windows Powershell เป็นไปได้ที่จะได้รับข้อมูลที่คุณต้องการในวิธีต่อไปนี้

คำบรรยายภาพ:

(Get-WmiObject -class Win32_OperatingSystem).Caption

ReleaseId:

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

รุ่น:

(Get-CimInstance Win32_OperatingSystem).version

0

[แก้ไข]

#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-----------------#

ยินดีต้อนรับสู่ SO! เมื่อคุณตอบคำถามโปรดพยายามอธิบายเล็กน้อย ในกรณีนี้มีคำตอบเพิ่มอีก 20 คำตอบดังนั้นให้พิจารณาข้อดีของคุณ
David García Bodego

0

คุณสามารถใช้บางอย่างเช่นนี้ได้โดยตรวจสอบ 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"}

-2

คุณสามารถใช้ python เพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้น (ใช้ได้กับ Windows ทุกรุ่นและทุกแพลตฟอร์มอื่น ๆ ):

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

คำถามคือ "วิธีค้นหารุ่น Windows จากบรรทัดคำสั่ง PowerShell " นี่ไม่ใช่คำตอบสำหรับคำถามนั้นและคุณควรพิจารณาลบมัน
Alain O'Dea

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

บน Windows 10 ส่งคืน: 10.0.10586.420

จากนั้นคุณสามารถใช้ตัวแปรเพื่อเข้าถึงคุณสมบัติสำหรับการเปรียบเทียบแบบละเอียด

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

นอกจากนี้คุณสามารถเปรียบเทียบรุ่นของระบบปฏิบัติการโดยใช้สิ่งต่อไปนี้

If ([Version]$OSVersion -ge [Version]"6.1")
   {
       #Do Something
   }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.