获取Windows版本的方法是什么?

4
我需要在PowerShell中创建一个脚本,以验证操作系统版本(Pro、Enterprise、Home等)。我已经找到了许多关于如何使用ID号验证操作系统版本(Vista,7,8,8.1等)的信息,但是我找不到任何关于版本代码的信息。我的问题是:
  1. Windows版本有代码吗?
  2. 如果没有代码,而唯一的方法是 Get-WmiObject -Class Win32_OperatingSystem | % Caption,那么如何格式化它以选择任何Windows操作系统上的版本?
  3. 是否有其他方法可以做到这一点?

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724833(v=vs.85).aspx

4个回答

9
那些信息被编码在Win32_OperatingSystem类的OperatingSystemSKU属性中:
数值  含义
-----  -------
    0  未定义
    1  终极版
    2  家庭基础版
    3  家庭高级版
    4  企业版
    5  家庭基础版 N 版本
    6  商业版
    7  标准服务器版
    8  数据中心服务器版
    9  小型商务服务器版
   10  企业服务器版
   11  入门版
   12  数据中心服务器核心版
   13  标准服务器核心版
   14  企业服务器核心版
   15  基于 Itanium 的企业服务器版
   16  商业版 N 版本
   17  Web 服务器版
   18  集群服务器版
   19  家庭服务器版
   20  存储 Express 服务器版
   21  存储标准服务器版
   22  存储工作组服务器版
   23  存储企业服务器版
   24  适用于小型企业的服务器版
   25  小型商务服务器高级版
   29  Web 服务器,服务器核心版
   39  不带 Hyper-V 的数据中心版,服务器核心版
   40  不带 Hyper-V 的标准版,服务器核心版
   41  不带 Hyper-V 的企业版,服务器核心版
   42  Hyper-V 服务器
将上述列表放入哈希表中,将整数值映射到描述。
$editions = @{
  0  = 'Undefined'
  1  = 'Ultimate Edition'
  2  = 'Home Basic Edition'
  ...
  41 = 'Enterprise Edition without Hyper-V, Server Core'
  42 = 'Hyper-V Server'
}

$sku = (Get-WmiObject Win32_OperatingSystem).OperatingSystemSKU

'Edition is {0}.' -f $editions[$sku]

请注意,OperatingSystemSKU在Server 2003及更早版本中不可用。在这些系统上,您将需要检查Caption和/或OSProductSuite属性。

这不会起作用,例如我有Windows 10 Pro(编号48),它不在列表中。甚至在这里也找不到:https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-operatingsystem?redirectedfrom=MSDN - metablaster
是的,那么这些哈希表在Windows操作系统中真正定义在哪里?肯定有一种不同的方法来访问它们。显然,在生成“操作系统名称”的代码中某个地方。 - not2qubit
你需要使用 CIM 并与 (Get-CimInstance Win32_OperatingSystem).Caption 一起使用,或者查看是否有其他更有用的内容:(Get-CimInstance Win32_OperatingSystem) | select * - not2qubit

3

不幸的是,这只能作为管理员使用,否则您会收到权限错误:Get-WindowsEdition: The requested operation requires elevation. 此外,它并没有真正告诉您所期望的公共版本,相反对于Windows Home版,它显示为Core,这是一个完全无用的结果。 - not2qubit
虽然我没有在家庭版的Windows上尝试过,但我的Windows 11专业版确实返回了“版本:专业版”。 - Will I Am

0

只需使用:

Get-ComputerInfo | select WindowsProductName, OsOperatingSystemSKU, OsName | fl

# <output>
# WindowsProductName   : Windows 10 Home
# OsOperatingSystemSKU : WindowsHome
# OsName               : Microsoft Windows 10 Home

如果你想要其他的项目,请查看以下列表:
# (Get-CimInstance Win32_OperatingSystem) | select *

Status                                    : OK
Name                                      : <rest is redacted>
FreePhysicalMemory                        :
FreeSpaceInPagingFiles                    :
FreeVirtualMemory                         :
Caption                                   :
Description                               :
InstallDate                               :
CreationClassName                         :
CSCreationClassName                       :
CSName                                    :
CurrentTimeZone                           :
Distributed                               :
LastBootUpTime                            :
LocalDateTime                             :
MaxNumberOfProcesses                      :
MaxProcessMemorySize                      :
NumberOfLicensedUsers                     :
NumberOfProcesses                         :
NumberOfUsers                             :
OSType                                    :
OtherTypeDescription                      :
SizeStoredInPagingFiles                   :
TotalSwapSpaceSize                        :
TotalVirtualMemorySize                    :
TotalVisibleMemorySize                    :
Version                                   :
BootDevice                                :
BuildNumber                               :
BuildType                                 :
CodeSet                                   :
CountryCode                               :
CSDVersion                                :
DataExecutionPrevention_32BitApplications :
DataExecutionPrevention_Available         :
DataExecutionPrevention_Drivers           :
DataExecutionPrevention_SupportPolicy     :
Debug                                     :
EncryptionLevel                           :
ForegroundApplicationBoost                :
LargeSystemCache                          :
Locale                                    :
Manufacturer                              :
MUILanguages                              :
OperatingSystemSKU                        :
Organization                              :
OSArchitecture                            :
OSLanguage                                :
OSProductSuite                            :
PAEEnabled                                :
PlusProductID                             :
PlusVersionNumber                         :
PortableOperatingSystem                   :
Primary                                   :
ProductType                               :
RegisteredUser                            :
SerialNumber                              :
ServicePackMajorVersion                   :
ServicePackMinorVersion                   :
SuiteMask                                 :
SystemDevice                              :
SystemDirectory                           :
SystemDrive                               :
WindowsDirectory                          :
PSComputerName                            :
CimClass                                  :
CimInstanceProperties                     :
CimSystemProperties                       :

0

我通常在Windows 10上运行类似这样的东西。您还可以从ubr中查看您所处的月度更新。

# vercheck.ps1
$reg = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
$releaseid = $reg.releaseid
$ubr = $reg.ubr
$displayversion = $reg.displayversion

[pscustomobject]@{
  releaseid = $releaseid
  displayversion = $displayversion
  ubr = $ubr
}

releaseid displayversion  ubr
--------- --------------  ---
2009      21H2           2251

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接