【问题标题】:OS architecture detection script操作系统架构检测脚本
【发布时间】:2020-12-21 22:02:56
【问题描述】:

我刚刚下载了 7zip(x86 和 x64)的两个 .msi 安装程序。有没有人有一个简单的脚本可以用来检测操作系统架构并启动适当的 .msi 文件?

【问题讨论】:

    标签: vbscript operating-system


    【解决方案1】:

    这可能会有所帮助

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    Set colProcessors = objWMIService.ExecQuery _
      ("Select * From Win32_Processor")
    
    For Each objProcessor in colProcessors
      If objProcessor.Architecture = 0 Then
        Wscript.Echo "This is an x86 computer."
      ElseIf objProcessor.Architecture = 1 Then
        Wscript.Echo "This is a MIPS computer."
      ElseIf objProcessor.Architecture = 2 Then
        Wscript.Echo "This is an Alpha computer."
      ElseIf objProcessor.Architecture = 3 Then
        Wscript.Echo "This is a PowerPC computer."
      ElseIf objProcessor.Architecture = 5 Then
        Wscript.Echo "This is a ARM computer."
      ElseIf objProcessor.Architecture = 6 Then
        Wscript.Echo "This is an ia64 computer."
      ElseIf objProcessor.Architecture = 9 Then
        Wscript.Echo "This is an x64 computer."
      Else
        Wscript.Echo "The computer type could not be determined."
      End If
    Next
    

    【讨论】:

      【解决方案2】:

      我发现了一个很棒的 vbscript,由 Monimoy Sanyal 编写,发布在 Microsoft Technet 上。 如果 32 位系统在 64 位硬件上运行,它还提供有关系统架构的信息。 https://gallery.technet.microsoft.com/scriptcenter/Determine-If-Your-System-969670e3

      Option Explicit 
      Dim ObjWMI, ColSettings, ObjProcessor 
      Dim StrComputer, ObjNetwork 
      Set ObjNetwork = WScript.CreateObject("WScript.Network") 
      StrComputer = Trim(ObjNetwork.ComputerName) 
      Set ObjNetwork = Nothing 
      WScript.Echo VbCrLf & "Computer Name: " & StrComputer 
      WScript.Echo vbNullString 
      Set ObjWMI = GetObject("WINMGMTS:" & "{ImpersonationLevel=Impersonate,AuthenticationLevel=Pkt}!\\" & StrComputer & "\Root\CIMV2") 
      Set ColSettings = ObjWMI.ExecQuery ("SELECT * FROM Win32_Processor") 
      For Each ObjProcessor In ColSettings 
      Select Case ObjProcessor.Architecture 
          Case 0 
              WScript.Echo "Processor Architecture Used by the Platform: x86" 
          Case 6 
              WScript.Echo "Processor Architecture Used by the Platform: Itanium-Based System" 
          Case 9 
              WScript.Echo "Processor Architecture Used by the Platform: x64" 
      End Select 
      Select Case ObjProcessor.ProcessorType 
          Case 1 
              WScript.Echo "Processor Type: Other. Not in the Known List"     
          Case 2 
              WScript.Echo "Processor Type: Unknown Type" 
          Case 3 
              WScript.Echo "Processor Type: Central Processor (CPU)" 
          Case 4 
              WScript.Echo "Processor Type: Math Processor" 
          Case 5 
              WScript.Echo "Processor Type: DSP Processor" 
          Case 6 
              WScript.Echo "Processor Type: Video Processor" 
      End Select 
      WScript.Echo "Processor: " & ObjProcessor.DataWidth & "-Bit" 
      WScript.Echo "Operating System: " & ObjProcessor.AddressWidth & "-Bit" 
      WScript.Echo vbNullString     
      If ObjProcessor.Architecture = 0 AND ObjProcessor.AddressWidth = 32 Then 
          WScript.Echo "This Machine has 32 Bit Processor and Running 32 Bit OS" 
      End If 
      If (ObjProcessor.Architecture = 6 OR ObjProcessor.Architecture = 9) AND ObjProcessor.DataWidth = 64 AND ObjProcessor.AddressWidth = 32 Then 
          WScript.Echo "This Machine has 64-Bit Processor and Running 32-Bit OS" 
      End If 
      If (ObjProcessor.Architecture = 6 OR ObjProcessor.Architecture = 9) AND ObjProcessor.DataWidth = 64 AND ObjProcessor.AddressWidth = 64 Then 
          WScript.Echo "This Machine has 64-Bit Processor and Running 64-Bit OS" 
      End If 
      Next 
      Set ObjProcessor = Nothing:    Set ColSettings = Nothing:    Set ObjWMI = Nothing:    StrComputer = vbNullstring
      

      【讨论】:

        【解决方案3】:

        你说的很简单,但没有指定语言...

        批处理 (.cmd):

        IF /I %PROCESSOR_ARCHITECTURE% EQU x86 (
            msiexec /qn /i 7zip_x86.msi
        ) ELSE (
            msiexec /qn /i 7zip_x64.msi
        )
        

        VBScript (.vbs):

        Set oShell = WScript.CreateObject("WScript.Shell")
        proc_arch = oShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")
        
        If proc_arch = 'x86' Then
            oShell.Run("msiexec /qn /i 7zip_x86.msi"), 0, true 
        Else
            oShell.Run("msiexec /qn /i 7zip_x64.msi"), 0, true
        End If
        

        PowerShell (.ps1):

        if ($env:PROCESSOR_ARCHITECTURE -eq "x86") {
            & msiexec /qn /i 7zip_x86.msi
        } else {
            & msiexec /qn /i 7zip_x64.msi
        }
        # or ...
        if ([Environment]::Is64BitOperatingSystem) {
            & msiexec /qn /i 7zip_x86.msi
        } else {
            & msiexec /qn /i 7zip_x64.msi
        }
        

        【讨论】:

          【解决方案4】:

          可能很粗糙而且不是很……“安全”……

          只需检查 C:\Program Files (x86) 是否存在,它只存在于 64 位系统上。

          【讨论】:

            猜你喜欢
            • 2012-02-05
            • 2012-03-29
            • 2010-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多