ShellScript VBScript returns nothing

All questions related to installations, configurations and maintenance of Advanced Host Monitor (including additional tools such as RMA for Windows, RMA Manager, Web Servie, RCC).
Post Reply
Kris
Posts: 375
Joined: Wed May 12, 2010 3:22 am

ShellScript VBScript returns nothing

Post by Kris »

Hi guys,

I have created a vbscript that reads the date of the last installed Windows update.
The code runs fine from the prompt or from a compiler.
However, when run from HostMonitor it comes up empty.

Start Command:

Code: Select all

cmd /c cscript /B /E:VBScript %Script%
VBCode

Code: Select all

HKEY_LOCAL_MACHINE   = &H80000002
strComputer          = "<target host>"
strUser              = "<domain>\<username>"
strPassword          = "<password>"
Set objSWbemLocator  = CreateObject("wbemScripting.SwbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, "root\default", strUser, strPassword)
Set objReg           = objSWbemServices.Get("StdRegProv")
strKeyPath           = "SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install"
strEntryName         = "LastSuccessTime"
objReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strDate
WScript.StdOut.Write "scriptRes:Ok:" & strDate
Any ideas?

HM version: 10.64 running on W2K8R2
KS-Soft
Posts: 12825
Joined: Wed Apr 03, 2002 6:00 pm
Location: USA
Contact:

Post by KS-Soft »

Add some checks into script, e.g.

Code: Select all

HKEY_LOCAL_MACHINE   = &H80000002
strComputer          = "<target host>"
strUser              = "<domain>\<username>"
strPassword          = "<password>"

On Error Resume Next

Set objSWbemLocator  = CreateObject("wbemScripting.SwbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, "root\default", strUser, strPassword)

If Err <> 0 Then
  WScript.StdOut.Write statusUnknown & "connect error: " & Err.Description
  WScript.Quit
End If

Set objReg           = objSWbemServices.Get("StdRegProv")

If Err <> 0 Then
  WScript.StdOut.Write statusUnknown & "StdRegProv error: " & Err.Description
  WScript.Quit
End If

strKeyPath           = "SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install"
strEntryName         = "LastSuccessTime"
objReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strDate

If Err <> 0 Then
  WScript.StdOut.Write statusUnknown & "GetString error: " & Err.Description
  WScript.Quit
End If

WScript.StdOut.Write "scriptRes:Ok:" & strDate 
Regards
Alex
Kris
Posts: 375
Joined: Wed May 12, 2010 3:22 am

Post by Kris »

Added some missing variables and more debugging.
Still the script runs through, resulting in status OK and an empty value for 'strDate'.
And it still runs from the prompt or any compiler and returns a date and time, no problem there.

Code: Select all

On Error Resume Next 

strComputer          = "<target host>" 
strUser              = "<domain>\<username>" 
strPassword          = "<password>" 
HKEY_LOCAL_MACHINE   = &H80000002 
strKeyPath           = "SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install" 
strEntryName         = "LastSuccessTime" 
statusOk             = "scriptRes:Ok:" 
statusBad            = "scriptRes:Bad:" 
statusUnknown        = "scriptRes:Unknown:" 

Set objSWbemLocator  = CreateObject("wbemScripting.SwbemLocator") 
If Err <> 0 Then 
   WScript.StdOut.Write statusUnknown & "Create Object Error: " & Err.Description 
   WScript.Quit 
End If 

Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, "root\default", strUser, strPassword) 
If Err <> 0 Then 
   WScript.StdOut.Write statusUnknown & "connect error: " & Err.Description 
   WScript.Quit 
End If 

Set objReg           = objSWbemServices.Get("StdRegProv") 
If Err <> 0 Then 
   WScript.StdOut.Write statusUnknown & "StdRegProv error: " & Err.Description 
   WScript.Quit 
End If 

objReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strEntryName, strDate 
If Err <> 0 Then 
   WScript.StdOut.Write statusUnknown & "GetString error: " & Err.Description 
   WScript.Quit 
End If 

WScript.StdOut.Write "scriptRes:Ok:" & strDate
KS-Soft Europe
Posts: 2832
Joined: Tue May 16, 2006 4:41 am
Contact:

Post by KS-Soft Europe »

Looks like your value is accessible only for 64 bit applications.

32 and 64 bit applications may retrieve 2 different values from the same registry key/value path.
You may test your key/value path using "Registry" test method (choose "use Win32 reg" then "use Win64 reg").

Another option for checking 32/64bit values is running script from 32/64bit command prompt (to start 32bit command prompt start %windir%\SysWoW64\cmd.exe)

If that's the case, you may modify your script to check 64bit registry values:

You need to replace

Code: Select all

Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, "root\default", strUser, strPassword)
with:

Code: Select all

Set arch = CreateObject("WbemScripting.SWbemNamedValueSet")
arch.Add "__ProviderArchitecture", 64
arch.Add "__RequiredArchitecture", True
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, "root\default", strUser, strPassword,,,,arch)
Kris
Posts: 375
Joined: Wed May 12, 2010 3:22 am

Post by Kris »

Works like a charm!

Thanks a lot!
KS-Soft Europe
Posts: 2832
Joined: Tue May 16, 2006 4:41 am
Contact:

Post by KS-Soft Europe »

You are welcome!
Post Reply