1

次のコードがあります。接続しているリモート コンピュータが 32 ビットか 64 ビットかに関する情報を取得しようとしています。このコードの最後のスニペットで試してみましたが、うまくいきませんでした。これがエラーです(リモートシステム名を変更しました):

WshShell.RegRead: レジストリ キー "\*remotesystem*\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE" のルートが無効です。

Option Explicit

Dim objWMISrvc,strRemoteComputer,colOSItems,objItem,args,OsType

'String variables
Dim strName,strCaption,strVersion,strCSDVer,strSerial,WshShell

'Adding this in to transfer FQDN variable to this script from ASP.net
Set args = WScript.Arguments
strRemoteComputer = args.Item(0)

Set objWMISrvc = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strRemoteComputer & "\root\cimv2")


CheckOSType objWMISrvc


Sub CheckOSType( objWMISrvc )
        Set colOSItems = objWMISrvc.ExecQuery("Select * from Win32_OperatingSystem",,48)
        For Each objItem in colOSItems
            strName = objItem.CSName 
            'strDesc = objItem.Description 
            'strManufac = objItem.Manufacturer 
            strCaption = objItem.Caption 
            strVersion = objItem.Version 
            strCSDVer = objItem.CSDVersion 
            strSerial = objItem.SerialNumber 
        Next


        Set WshShell = CreateObject("WScript.Shell")
        OsType = WshShell.RegRead("\\" & strRemoteComputer & "\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")
        If OsType = "x86" then
            WScript.Echo "Windows 32bit system detected"
        elseif OsType = "AMD64" then
            WScript.Echo "Windows 64bit system detected"
        end if

End Sub
4

2 に答える 2

3

レジストリを読み取らずに、WMIから直接これを行うことができます。このスクリプトを使用して、コンピューター名をループするだけです。「32」または「64」のいずれかを返します。

strComputer = "."

Set objWMIService = GetObject("winmgmt:\\" & strComputer & "\root\cimv2")

Set colProcessors = objWMIService.ExecQuery("Select * from Win32_Processor")

For Each objProcessor in colProcessors
    WScript.Echo objProcessor.AddressWidth     'or  objProcessor.DataWidth
    Exit For
Next
于 2012-08-08T17:10:42.867 に答える
1

StdRegProvのレジストリをリモート マシンとして読み取るには、 WMI クラス を使用する必要があります。

このサンプルを確認してください

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set oReg=GetObject( _
   "winmgmts:{impersonationLevel=impersonate}!\\" &_
    strComputer & "\root\default:StdRegProv")
strKeyPath = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
strValueName = "PROCESSOR_ARCHITECTURE"
oReg.GetStringValue _
   HKEY_LOCAL_MACHINE,strKeyPath,strValueName,OsType
WScript.Echo  OsType
于 2012-08-08T16:41:18.087 に答える