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).
Kris
Posts: 375 Joined: Wed May 12, 2010 3:22 am
Post
by Kris » Mon Jul 03, 2017 1:06 am
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 » Mon Jul 03, 2017 4:45 am
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 » Mon Jul 03, 2017 9:07 am
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 » Mon Jul 03, 2017 1:44 pm
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 » Tue Jul 04, 2017 12:44 am
Works like a charm!
Thanks a lot!