在 PowerShell 中查找独立于 OS 的处理器架构
Find architecture of processor independent of OS in PowerShell
我正在尝试检测设备的处理器是否会 支持 64 位 Windows 操作系统安装,而不考虑 [=45] 的位数=] 检查时安装在其上的操作系统。我希望通过 PowerShell(最低 3.0)执行此操作,但我也可以通过分别调用 cmd
和 cscript
来使用 Batch 或 VBScript。代码必须可通过非交互式脚本执行,并且无需用户交互即可 return 编辑值。
以下方法在我的测试设备上不起作用,这是一个 32 位 Windows 10 VM,Settings 应用将其识别为包含基于 x64 的处理器:
- WMI: Win32_ComputerSystem/SystemType – returns "X86-based PC"
- WMI: Win32_Processor/CPU0/AddressWidth – returns 32
- PowerShell: [intPtr]::size – returns 4(64 位设备 return 8)
- PowerShell: $env:PROCESSOR_ARCHITECTURE & 标识符 – return x86
- 注册表:HKLM\Hardware\Description\System\CentralProcessor[=43=] - 不return任何可以搜索的内容运行确定 64 位指令能力
我在上面提到 设置 应用程序可以收集此信息来告诉用户他们的设备理论上支持安装 64 位 Windows 操作系统。知道这一点让我不愿意使用第三方命令行工具(尽管它仍然是一个可行的最后手段)。
用例将执行此检查,然后使用该信息衍生出一个 if
子句。
Win32_Processor
WMI class 有一个 属性 Architecture
。根据处理器类型,这采用以下值:
- x86 为 0
- 1 个用于 MIPS
- 阿尔法 2
- 3 用于 PowerPC
- 6 用于 ia64
- x64 为 9
因此,在配备 Core i7 处理器的计算机上,(Get-WMIObject -Class Win32_Processor).Architecture
将 return 9
告诉您它是 x64 处理器 - 即使您安装了 32-位 Windows 就可以了。
使用 VB 脚本,您可以检查 OS 类型的地址宽度和 CPU 类型的数据宽度。将以下内容放入 .vbs 文件中:
address_width= GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth
data_width= GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").DataWidth
WScript.Echo "Running " & address_width _
& " Bit Windows on " & data_width & " Bit processor."
有很多方法可以确定 Windows 是 32 位还是 64 位 - 但这是我发现的检查处理器类型的最佳方法。我花了一些时间才找到它,所以我想我会分享以防其他人在看:-)
我正在尝试检测设备的处理器是否会 支持 64 位 Windows 操作系统安装,而不考虑 [=45] 的位数=] 检查时安装在其上的操作系统。我希望通过 PowerShell(最低 3.0)执行此操作,但我也可以通过分别调用 cmd
和 cscript
来使用 Batch 或 VBScript。代码必须可通过非交互式脚本执行,并且无需用户交互即可 return 编辑值。
以下方法在我的测试设备上不起作用,这是一个 32 位 Windows 10 VM,Settings 应用将其识别为包含基于 x64 的处理器:
- WMI: Win32_ComputerSystem/SystemType – returns "X86-based PC"
- WMI: Win32_Processor/CPU0/AddressWidth – returns 32
- PowerShell: [intPtr]::size – returns 4(64 位设备 return 8)
- PowerShell: $env:PROCESSOR_ARCHITECTURE & 标识符 – return x86
- 注册表:HKLM\Hardware\Description\System\CentralProcessor[=43=] - 不return任何可以搜索的内容运行确定 64 位指令能力
我在上面提到 设置 应用程序可以收集此信息来告诉用户他们的设备理论上支持安装 64 位 Windows 操作系统。知道这一点让我不愿意使用第三方命令行工具(尽管它仍然是一个可行的最后手段)。
用例将执行此检查,然后使用该信息衍生出一个 if
子句。
Win32_Processor
WMI class 有一个 属性 Architecture
。根据处理器类型,这采用以下值:
- x86 为 0
- 1 个用于 MIPS
- 阿尔法 2
- 3 用于 PowerPC
- 6 用于 ia64
- x64 为 9
因此,在配备 Core i7 处理器的计算机上,(Get-WMIObject -Class Win32_Processor).Architecture
将 return 9
告诉您它是 x64 处理器 - 即使您安装了 32-位 Windows 就可以了。
使用 VB 脚本,您可以检查 OS 类型的地址宽度和 CPU 类型的数据宽度。将以下内容放入 .vbs 文件中:
address_width= GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth
data_width= GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").DataWidth
WScript.Echo "Running " & address_width _
& " Bit Windows on " & data_width & " Bit processor."
有很多方法可以确定 Windows 是 32 位还是 64 位 - 但这是我发现的检查处理器类型的最佳方法。我花了一些时间才找到它,所以我想我会分享以防其他人在看:-)