在PowerShell

时间:2018-02-02 16:43:07

标签: windows powershell architecture processor

我正在尝试检测设备的处理器是否支持 64位Windows操作系统安装,而不关注安装在其上的Windows操作系统的位数。检查时间。我希望通过PowerShell(最低3.0)来实现这一点,但我也可以通过分别调用cmdcscript来使用Batch或VBScript。代码必须通过非交互式脚本执行,返回值时无需用户交互。

以下方法不适用于我的测试设备,设置应用程序识别为包含基于x64的处理器的32位Windows 10 VM:

  • WMI:Win32_ComputerSystem / SystemType - 返回"基于X86的PC"
  • WMI:Win32_Processor / CPU0 / AddressWidth - 返回32
  • PowerShell:[intPtr] :: size - 返回4(64位设备返回8)
  • PowerShell:$ env:PROCESSOR_ARCHITECTURE& IDENTIFIER - 返回x86
  • 注册表:HKLM \ Hardware \ Description \ System \ CentralProcessor \ 0 - 不返回可以运行搜索以确定64位指令功能的任何内容

我在上面指出,设置应用程序可以收集此信息,告诉用户他们的设备理论上支持安装64位Windows操作系统。知道这一点使我不喜欢使用第三方命令行工具(尽管它仍然是可行的最后手段)。

用例将执行此检查,然后使用该信息剥离if子句。

2 个答案:

答案 0 :(得分:4)

Win32_Processor WMI类具有属性Architecture。根据处理器类型,它采用以下值:

  • 0表示x86
  • 1表示MIPS
  • 2 for Alpha
  • 3 for PowerPC
  • 6 for ia64
  • 9 for x64

因此,在具有Core i7处理器的计算机上,(Get-WMIObject -Class Win32_Processor).Architecture将返回9,告诉您它是x64处理器 - 即使您已在其上安装了32位Windows。 / p>

答案 1 :(得分:1)

使用VB脚本,可以检查AddressWidth的OS类型和DataWidth的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位-但这是我发现检查处理器类型的最佳方法。花了我一些时间找到它,所以我想我可以分享一下,以防其他人正在寻找:-)