OS architecture detection script

烂漫一生 提交于 2021-01-05 09:28:09

问题


I have just downloaded the two .msi installers for 7zip (x86 and x64). Does anyone have a simple script I can use to detect the OS architecture and launch the appropriate .msi file?


回答1:


this might help

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:


I found a great vbscript, written by Monimoy Sanyal, posted on Microsoft Technet. It also gives information about system architecture, if 32-bit system run on the 64-bit hardware. 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:


You said simple, but didn't specify a language ...

Batch (.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:


Probably crude and not very ... "safe" ...

Just check for the existence of C:\Program Files (x86) which is only present on a 64-bit system.



来源:https://stackoverflow.com/questions/11300916/os-architecture-detection-script

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!