80
Const ScriptVersion = "4.19" '=============== Info ======================================= ' USEAGE: CLIENT HEALTH REPAIR ' Based on source at: Dude Works http://wwww.dudeworks.com/Support/SupportForum/tabid/83/mid/475/groupi d/6/Default.aspx ' Based on source at: www.1e.com ' Based on source at: Shaun Cassells at http://myitforum.com/cs2/blogs/scassells/default.aspx '============================================================ ' Requirements ' Requires sc.exe either present in run directory, %systemroot%\ system32\, or %systemroot%\system32\dllcache ' Requires regsrv32.exe to be in %systemroot%\system32\ or accessible in path '============================================================ ' Overview ' The following script fixes generic workstation issues in a networked corporate environment ' not designed to run on servers '============================================================ ' UPDATES ' 4.19 ' Fixed %Temp% not existing ' Fixed error log reporting to be consistant ' Fixed CLIENTSTATE to be less sensetive ' (including not caring where sc.exe is found as long as it is found) ' Other random bug fixes

Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Embed Size (px)

Citation preview

Page 1: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Const ScriptVersion = "4.19"

'=============== Info =======================================

' USEAGE: CLIENT HEALTH REPAIR

' Based on source at: Dude Works http://wwww.dudeworks.com/Support/SupportForum/tabid/83/mid/475/groupid/6/Default.aspx

' Based on source at: www.1e.com

' Based on source at: Shaun Cassells at http://myitforum.com/cs2/blogs/scassells/default.aspx

'============================================================

' Requirements

' Requires sc.exe either present in run directory, %systemroot%\system32\, or %systemroot%\system32\dllcache

' Requires regsrv32.exe to be in %systemroot%\system32\ or accessible in path

'============================================================

' Overview

' The following script fixes generic workstation issues in a networked corporate environment

' not designed to run on servers

'============================================================

' UPDATES

' 4.19

' Fixed %Temp% not existing

' Fixed error log reporting to be consistant

' Fixed CLIENTSTATE to be less sensetive

' (including not caring where sc.exe is found as long as it is found)

' Other random bug fixes

' ToDo

' Test with ConfigMgr 2007

'============================================================

On ERROR Resume Next

Page 2: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Dim objWMIService, oWMIService, oServices

Dim ADSiteName

Dim oUIResManager

Dim oCache, CacheSize

Dim SiteName,SiteCode,GUID,Version,strComputerRole

Dim dd,strLogFile,tempPath,CCM_DIR,ddr

Dim CLIENTSTATE,StrERRType

Dim strValue,strValues

Dim GoodLogPath,BadLogPath,logGood,LogBad,doRunCheck,eventlog

Dim StrCCRServer,strCCRSiteCode,strLOGServer

Dim LocalAdminGroup,admACCT

Dim do_CHK_LOCALADMIN,do_CHK_ADMSHARE,do_CHK_RemoteReg,do_CHK_WMI_SERVICE,do_CHK_BITS_SERVICE,do_REG_XML

Dim do_CHK_AdvClient,do_SEND_CCR,do_RUN_CCMSetUP,do_REBUILD,do_REPAIR,do_CHK_DCOM,do_StartSeriviceViaSC,SCEXELocation

Dim intEventType,strEventDescription

Dim bClientExist

Dim iniResult

Dim sOStype,isOS,OS, sOSversion

Dim strEnvLog, strEnvVal

Dim SMSCLIENTLASTERROR

Dim oSmsversion,SMSVersion,ConfigMgrVersion

'===========File System Constants=====================================

Const ForReading = 1, TemporaryFolder = 2, ForAppending = 8

Const OverwriteExisting = True

Page 3: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

'===========Registry Constants=====================================

Const HKeyName_LOCAL_MACHINE = &H80000002

'Const HKeyName_CURRENT_USER = &H80000001

'===========Event Log Constants=====================================

Const EVENT_SUCCESS = 0

Const EVENT_ERROR = 1

Const EVENT_WARNING = 2

Const EVENT_INFORMATION = 4

Const AUDIT_SUCCESS = 8

Const AUDIT_FAILURE = 16

'=============== Load/Create Objects =====================================

On ERROR Resume Next

Dim WSHShell: Set WSHShell = CreateObject("WScript.Shell")

If err <> 0 Then WSHShell.LogEvent EVENT_ERROR, "SMS STARTUP SCRIPT - WScript.Shell is broken" : CleanUp(err) 'Windows Scripting Host is busted!

WSHShell.LogEvent EVENT_INFORMATION, "SMS STARTUP SCRIPT - Last Run @ " & now

Dim objSysInfo: Set objSysInfo = CreateObject("ADSystemInfo")

If err <> 0 Then WSHShell.LogEvent EVENT_ERROR, "SMS STARTUP SCRIPT - ADSystemInfo is broken" : CleanUp(err)

Dim objFSO: Set objFSO = CreateObject("Scripting.FileSystemObject")

If err <> 0 Then WSHShell.LogEvent EVENT_ERROR, "SMS STARTUP SCRIPT - Scripting.FileSystemObject is broken" : CleanUp(err)

Page 4: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Dim oLocator: Set oLocator = CreateObject("WbemScripting.SWbemLocator")

If err <> 0 Then WSHShell.LogEvent EVENT_ERROR, "SMS STARTUP SCRIPT - WbemScripting.SWbemLocator is broken" : CleanUp(err)

' Dim objNetwork: Set objNetwork = WScript.CreateObject("WScript.Network")

'=============== GET ENVIRONMENT and LOGGING DETAILS ==============

'Set Current Directory

wshshell.CurrentDirectory = WScript.ScriptFullName & "\.."

Dim strCurrentDir: strCurrentDir = wshSHELL.CurrentDirectory

Dim Computer: Computer = WSHShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

If Computer = "%COMPUTERNAME%" Then WSHShell.LogEvent EVENT_ERROR, "SMS STARTUP SCRIPT - COMPUTERNAME value is empty" : CleanUp(err)

Dim windir: windir = WSHShell.ExpandEnvironmentStrings("%WINDIR%")

If windir = "%WINDIR%" Then WSHShell.LogEvent EVENT_ERROR, "SMS STARTUP SCRIPT - WINDIR value is empty" : CleanUp(err)

Dim SysDrive: SysDrive = WSHShell.ExpandEnvironmentStrings("%SystemDrive%")

If SysDrive = "%SystemDrive%" Then WSHShell.LogEvent EVENT_ERROR, "SMS STARTUP SCRIPT - SysDrive value is empty" : CleanUp(err)

Dim UserTempPath: UserTempPath = WSHShell.ExpandEnvironmentStrings("%TEMP%")

If err <> 0 Then WSHShell.LogEvent EVENT_ERROR, "SMS STARTUP SCRIPT - ExpandEnvironmentStrings is broken" : CleanUp(err)

'Set Logfile location

StrERRType = ""

strFileName = "sms_chk_" & computer & ".log"

Page 5: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

'Issue with this variable

'Some machines do not have a %temp% defined.

'Default seems to be %windir%\temp. However some machines have c:\temp. Oppurtunity to classify. I just go with the flow.

'If a machine does not have a %temp% defined then I write an ERROR and set path to %windir%\temp

'Check if Directory exists

If objFSO.FolderExists(UserTempPath) Then

'Check to see if last char is a \. if so remove it.

If Right(UserTempPath,1) = "\" Then

UserTempPath = Left(UserTempPath,Len(UserTempPath) - 1)

End If

strLogFile = UserTempPath & "\" & strFileName

If InStr(UserTempPath,windir) Then

strDirectory = "\Admin$" & Right(UserTempPath,Len(UserTempPath)- Len(windir))

Else

strDirectory = "\C$" & Right(UserTempPath,Len(UserTempPath)- Len(SysDrive))

End If

strUNCLogFile = "\\" & Computer & strDirectory & "\" & strFileName

Else

'Houston we have a problem

WSHShell.LogEvent EVENT_ERROR, "SMS STARTUP SCRIPT - TEMP value is empty"

UserTempPath = windir & "\temp"

strLogFile = UserTempPath & "\" & strFileName

'Ran into machines without the %windir%\temp directory for system account

'lenWinDir = Len(windir)

Page 6: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

'strUNCLogFile = "\\" & Computer & "\admin$" & Right(UserTempPath,Len(UserTempPath)- lenWinDir) & "\" & strFileName

'****Fixed write to %windir%\temp directory

strUNCLogFile = "\\" & Computer & "\admin$\Temp\" & strFileName

End If

'Check to see what state of client is in

'Errors are incremented

CLIENTSTATE=0

' ==========CONFIG SETTINGS=========================================

'/// Check System role, If role =0 or 1 Then WKS, 2 3 4 & 5 are Server roles

SMSVersion="4.00.6221.1000"

ConfigMgrVersion="4.00.6221.1000" 'SP1

CompanyName="Astellas"

bClientExist = False

'AUTO because AD is extended with servers published

WKS_ASSIGNSITECODE = "AUTO"

WKS_CacheSize = 5120 'Plenty large enough for service packs

WKS_PortNumber = 80 'We use a non 80 port number so the network monitors wont give false positives.

'WKS_LocalAdminGroup = "Administrators" 'SpecIfy Local Admin group to add SMS Admin Acount to (DEFAULT=Administrators)

'WKS_admACCT = "Domain\Group" 'SpecIfy SMS Admin account (group)

'//Registry for counts

RegPath = "HKLM\SYSTEM\Setup\ClientHealthStartup"

'// CCR's

StrCCRServer = "USDADASSCPW01" 'SpecIfy Site server to send CCR's to

strCCRSiteCode = "AST"

Page 7: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

' ===================================================================

' ==========Logging SETTINGS=========================================

' ===================================================================

'// LOGGING

logToEventsSummary=True 'Post single event log item that includes all events(DEFAULT=True) '

LogToConsoleVerbose=False 'wscript.echo the log file to the console (DEFAULT=False)

LogToConsoleDebug=False 'Wscript.echo for debugging (DEFAULT=False)

LogEnvironment=True 'Log environment, will aid in troubleshooting client, includes: system,user,process, volatile

Do_WebSubmit = False 'Submits to a website for centralized reporting

iHoursBetweenRun = 12 ' Number of hours that must have elapsed before next run

doRunCheck=False ' Will only allow the script to fully run on a system once within iHoursBetweenRun hours

LogGood=True 'Renames the front of the file to represent a good file prefix

LogBad=True 'Add prefix for type of ERROR

'If you use this method you need to grant

'DOMAIN\DOMAIN COMPUTERS write permissions (NFTS) to that share since the script runs under local system

GoodLogPath ="\\Usdadasscpw01\Logs\HealthCheck\Good" 'SpecIfy Site server to send good/success logs (DEFAULT)

BadLogPath ="\\Usdadasscpw01\Logs\HealthCheck\Bad" 'SpecIfy Site server to send bad/fail logs

' Always capture your bad client logs so you can see who and where you have bad systems.

' ===================================================================

' ==========SMS Install SETTINGS=====================================

' ===================================================================

'//CCMSetUP LOCATION

CCMSetUP = "\\USDADASSCPW01\SMSClient\i386\ccmSetup.exe" 'Path to CCMSetup.exe

Page 8: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

CCM_DIR = windir & "\system32\CCM\"

' ===================================================================

' ==========WMI SETTINGS=============================================

' ===================================================================

'// WMI REPAIR OPTIONS - WARNING - ONLY SELECT ONE OPTION TO REPAIR WMI

do_REBUILD = False '(DEFAULT=False)this option uses a BRUTE FORCE and renames the repository to repository_old and allows WMI to rebuild a new repository

'this wil also wipe out any custom data you have stored in WMI- so beware - however this the MOST EFFECTIVE

do_REPAIR = True 'this option uses the repair upgrade option of WMI to attempt a gentle recovery without losing any custom data

'If BOTH options are Set to False we will only log the WMI issue and you'll be able to manually deal with the WMI issues

' however the script will NOT repair anything Else until WMI is fixed.

' ===================================================================

' ==========WMI SETTINGS=============================================

' ===================================================================

'// enable True / False tasks you wish to run

do_CHK_CheckLogFileModifyDate = True 'Check to see if log file is updating recently

do_CHK_CCMEXEC = True ' CHK_CCMEXEC should ALWAYS RUN - LEAVE at TRUE

do_CHK_AdvClient = True ' Checks Advanced client state

do_SEND_CCR = True ' Sends a CCR to your site server( only use If you dont use RUN_CCMSetUP )

do_RUN_CCMSetUP = True ' Runs CCMSetUP from specified server share location in order to reinstall the client

'Requires that Domain\Domain Computers account have access to share to run the setup file. Must be explicitly set on server share

Page 9: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

' only use one install method CCR or CCMSetUP.. option is for enviroments where clients dont haven rights to write a CCR to the server but can pull CCMSetUP

' Running CCMSetUP can be a little brutal but it should only happen once and its a much surer way to make sure that client gets installed correctly and right away

do_CHK_SMSUPDATECLIENT = True ' CHECK latest SMS client version and install updated client If needed.

do_CHK_CACHESIZE = True ' checks/Sets the cache size

'Checks

do_CHK_SYSTEMPATH = True ' Cleans up the System PATH statement environment by ensuring the wbem is near the front of and that there are no duplicates in the path

do_CHK_DCOM = True ' Forces DCOM security premissions for SMS client access

'May not work currently

do_CHK_LOCALADMIN = False ' Adds your SMS Account to the local admins group

do_CHK_ADMSHARE = True ' checks and repairs Admin$

'Services

do_CHK_RPC_SERVICE = True 'Turns on RPC before everything

do_CHK_WMI_SERVICE = True ' Checks WMI service

do_CHK_FIREWALL_ICS_SERVICE = True 'Truns on ICS after WMI

do_CHK_SERVER_SERVICE = True ' Checks Server Service

do_CHK_RemoteReg = True ' Enables remote registry

do_CHK_BITS_SERVICE = True ' Checks BITS service

do_CHK_WUS_SERVICE = True ' Checks Automatic service

do_CHK_TERMSERVICE_SERVICE = True ' Checks Terminal service

do_CHK_MSI_SERVICE = True ' Checks Windows Installer service

'Register

do_REG_XML = True ' Registers XML

Page 10: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

do_REG_BITS = True ' Registers two Bits files - if True service will be reset too

do_REG_OLEAut32 = True ' Registers OLEAut32

do_REG_Msiexec = True ' Registers msiexec /regserver

Debug("********** Start ***********")

'===================================================================

'===================================================================

'=================== START =========================================

'===================================================================

'===================================================================

'check to see when last time script was run based on last log date

' dont run more than once in 12 hrs

' this prevents a client that is really hosed to not keep reinstalling everytime the user logs in

' but rather attempts more fixes once a day

On ERROR Resume Next

If doRunCheck=True Then

If objFSO.FileExists(strLogFile) Then

Set ofile =objFSO.GetFile(strLogFile)

'Debug("Date diff = " & DateDIff("h", ofile.DateLastModified , Now))

'Debug("iHoursBetweenRun = " & iHoursBetweenRun)

If DateDIff("h", ofile.DateLastModified , Now) < iHoursBetweenRun Then

Debug("ran recently")

WSHShell.LogEvent EVENT_WARNING, "SMS STARTUP SCRIPT - Ran less than " & iHoursBetweenRun & " hours ago " & Now

CleanUp("doRunCheck")

End If

End If

End If

Page 11: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

'Deletes the previous log file

If objFSO.FileExists(strLogFile) Then

objFSO.DeleteFile(strLogFile)

End If

'Creates new log file

err.clear

Set oFile = objFSO.CreateTextFile(strLogFile)

If err <> 0 Then WSHShell.LogEvent EVENT_ERROR, "SMS STARTUP SCRIPT - Unable to create log file: " & strLogFile : CleanUp(err)

oFile.Close

err.clear

'Grab OS version

GetOs

If isOS="workstation" Then

If InStr(UCase(WScript.ScriptName),"SRV") Then CleanUp(err)

LocalAdminGroup = WKS_LocalAdminGroup

admACCT = WKS_admACCT

ASSIGNSITECODE = WKS_ASSIGNSITECODE

CacheSize = WKS_CacheSize

PortNumber = WKS_PortNumber

Else

'Disabled as this will not run on servers

COLLECTMSG "isOS","ERROR","Non workstation computer type"

Page 12: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

WSHShell.LogEvent EVENT_FAILURE, "SMS STARTUP SCRIPT - Ran less than " & iHoursBetweenRun & " hours ago " & Now

CleanUp(err)

End If

WSHShell.LogEvent EVENT_INFORMATION, "SMS STARTUP SCRIPT - Last Full Run @ " & now

ADSiteName = objSysInfo.SiteName

Debug("********** Begin System_Info ***********")

COLLECTMSG "SYSTEM_INFO","SCRIPT_SOURCE","WKS"

COLLECTMSG "SYSTEM_INFO","SCRIPT_VERSION",ScriptVersion

COLLECTMSG "SYSTEM_INFO","SCRIPT_LOCATION",strCurrentDir

COLLECTMSG "SYSTEM_INFO","SYSTEMNAME", Computer

COLLECTMSG "SYSTEM_INFO","OPERATING_SYSTEM",OS & " " & sOSversion

'Disabled because this check uses WMI. Also this script is designed to only run on workstations

'COLLECTMSG "SYSTEM_INFO","SYSTEMROLE",strComputerRole

COLLECTMSG "SYSTEM_INFO","LOGFILE", strLogFile

COLLECTMSG "SYSTEM_INFO","AD_USERNAME", objSysInfo.UserName

COLLECTMSG "SYSTEM_INFO","AD_COMPUTERNAME", objSysInfo.ComputerName

COLLECTMSG "SYSTEM_INFO","AD_SITENAME", objSysInfo.SiteName

' =============================================================================

' RunTasks

' Description: CONNECT TO MGMT SERVICE

' =============================================================================

Err.clear

Debug("********** Chk DCOM & System Path & Local Admin Group ***********")

If do_CHK_DCOM = True Then CHK_DCOM

Page 13: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

If do_CHK_SYSTEMPATH = True Then CHK_SYSTEMPATH ' This will ensure that the wbem path is near the front or the environment.

SCFileExist

' True if sc.exe file is found; False if not

' Checks current path and %systemroot%\system32

' SC.exe attempts to start a service

If do_CHK_LOCALADMIN = True Then CHK_SMSLOCALADMIN

Debug("********** Check WMI Service Mode ***********")

COLLECTMSG "WMI Service",">",null

'Check to see if Service is disabled

WMIRegValue = wshshell.regread("HKLM\SYSTEM\CurrentControlSet\Services\winmgmt\Start")

Select Case WMIRegValue

Case 2

'Auto setting - GOOD

COLLECTMSG "WMI","Service in Reg is set to Auto",null

Debug("WMI is set to auto")

Case 3

'Manual setting - Connecting will start

'Make service set to Automatic

COLLECTMSG "WMI","WARNING","Service in Reg is set to Manual"

Debug("WMI is set to Manual")

Debug("do_StartSeriviceViaSC = " & do_StartSeriviceViaSC)

If do_StartSeriviceViaSC Then StartSeriviceViaSC "winmgmt","auto"

StrERRType=StrERRType & "WMIManual_"

RegCounter "WMI",1

CLIENTSTATE = CLIENTSTATE + 1

Page 14: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Case 4

'Attempts to use sc.exe to start the service

COLLECTMSG "WMI","WARNING","Service in Reg is set to Disabled"

Debug("WMI Service is not set to AUTO")

Debug("do_StartSeriviceViaSC = " & do_StartSeriviceViaSC)

If do_StartSeriviceViaSC Then StartSeriviceViaSC "winmgmt","auto"

StrERRType=StrERRType & "WMIDisabled_"

RegCounter "WMI",1

CLIENTSTATE = CLIENTSTATE + 1

Case Else

'UNKNOWN Service State

COLLECTMSG "WMI","ERROR","Service in Reg is set to " & WMIRegValue & " Unknown value"

Debug("WMI Service is not set to " & WMIRegValue & " Unkown")

Debug("do_StartSeriviceViaSC = " & do_StartSeriviceViaSC)

If do_StartSeriviceViaSC Then StartSeriviceViaSC "winmgmt","auto"

StrERRType=StrERRType & "WMIUnknown_"

RegCounter "WMI",1

CLIENTSTATE = CLIENTSTATE + 1

End Select

' =============================================================================

'CHECK If WMI IS ACCESSIBLE and CONNECT

' =============================================================================

Debug("********** Check WMI Connection ***********")

On ERROR Resume Next

err.clear

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2")

Page 15: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

If Err <> 0 Then

COLLECTMSG "WMI_CONNECT","ERROR",err & " " & err.description

Debug("********** WMI Connection FAIL ***********")

RegCounter "WMI",1

StrERRType=StrERRType & "WMIConnect_"

'//CANNOT CONNECT TO WMI

Debug("Registry WMIStatus = " & WSHShell.Regread(RegPath & "\WMIStatus"))

Select Case WSHShell.Regread(RegPath & "\WMIStatus")

Case ""

Debug("WMIStatus = no prior break")

RegCounter "WMIFail",1

CLIENTSTATE = CLIENTSTATE + 50

If do_REPAIR = True Then

REPAIR_WMI_XP : RegCounter "WMIStatus","REPAIRED"

COLLECTMSG "WMI Repair","Waring","Doing the first repair on WMI"

StrERRType=StrERRType & "WMIRepair_"

End If

Case "REPAIRED"

Debug("WMIStatus = REPAIRED")

RegCounter "WMIFail",1

CLIENTSTATE = CLIENTSTATE + 100

If do_REBUILD = True Then

REBUILD_WMI_BRUTE_FORCE : RegCounter "WMIStatus","REPAIRED"

COLLECTMSG "WMI BRUTE FORCE","ERROR","This machine has gone through Repair - still failing"

StrERRType=StrERRType & "WMIRebuild_"

End If

Case "REBUILT"

Debug("WMIStatus = REBUILT")

Page 16: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

RegCounter "WMIFail",1

CLIENTSTATE = CLIENTSTATE + 1000

StrERRType=StrERRType & "WMIFAIL_"

COLLECTMSG "WMI REBUILT","ERROR","This machine has gone through Repair and Rebuild - still failing"

End Select

err.clear

WSHShell.LogEvent EVENT_INFORMATION, "SMS STARTUP SCRIPT - WMI " & WSHShell.Regread(RegPath & "\WMIStatus") & " " & Now

Debug("ClientState = " & CLIENTSTATE)

CleanUp(err)

End If

'***Repleace with Registry counter

RegCounter "WMIStatus",""

'WriteEnvVar "SMSCLIENT_CHK_WMI_CONNECT","","system","0"

'WriteEnvVar "SMSCLIENT_CHK_WMI_LAST","","system","0"

' =============================================================================

' RunTasks

' Description: Generic Health Tasks

' =============================================================================

Err.clear

Debug("********** Begin Checks ***********")

If do_CHK_ADMSHARE = True Then CHK_ADMSHARE

If do_REG_XML = True Then REG_XML

If do_REG_BITS = True Then REG_SVR32 "REG_BITS", "Qmgr.dll" : REG_SVR32 "REG_BITS", "qmgrprxy.dll"

Page 17: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

If do_REG_OLEAut32 = True Then REG_SVR32 "REG_OLEAut32", "OLEaut32.dll"

If do_REG_Msiexec = True Then REG_Msiexec

Debug("********** Begin Services ***********")

If do_CHK_RPC_SERVICE = True Then Fix_Service "CHK_RPC_SERVICE","RpcSs","auto","Running"

If do_CHK_WMI_SERVICE = True Then Fix_Service "CHK_WMI_SERVICE","winmgmt","auto","Running"

If do_CHK_FIREWALL_ICS_SERVICE = True Then Fix_Service "CHK_FIREWALL_ICS_SERVICE","SharedAccess","auto","Running"

If do_CHK_SERVER_SERVICE = True Then Fix_Service "CHK_SERVER_SERVICE","lanmanserver","auto","Running"

If do_CHK_RemoteReg = True Then Fix_Service "CHK_RemoteReg","RemoteRegistry","auto","Running"

If do_CHK_BITS_SERVICE = True Then Fix_Service "CHK_BITS_SERVICE","BITS","NotDisabled","unimportant"

If do_CHK_WUS_SERVICE = True Then Fix_Service "CHK_WUS_SERVICE","wuauserv","auto","Running"

If do_CHK_TERMSERVICE_SERVICE = True Then Fix_Service "TERMSERVICE_SERVICE","TermService","Manual","unimportant"

If do_CHK_MSI_SERVICE = True Then Fix_Service "MSI_SERVICE","MSIServer","Manual","unimportant"

Debug("********** Begin SMS ***********")

CHK_SMSVERSION

If do_CHK_CCMEXEC = True Then bClientExist = Fix_Service("CHK_CCMEXEC","CcmExec","auto","Running")

If do_CHK_SMSUPDATECLIENT = True Then CHK_SMSUPDATECLIENT

COLLECTMSG "SYSTEM_INFO","CLIENTSTATE",CLIENTSTATE

Debug("Client State = " & CLIENTSTATE)

If CLIENTSTATE = 0 Then

' =============================================================================

' RunTasks

' Description: Run Healthy Client

' =============================================================================

Page 18: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Debug("********** Healthy last SMS ***********")

If do_CHK_CheckLogFileModifyDate = True Then CheckLogFileModifyDate("PolicyEvaluator.log")

CHK_ASSIGNMENT ' now that everything is fixed we check that the client is assigned and If not we'll

' force a new client install and since everything Else has now been fixed this new

' install should take care of any last client hang ups, If your client still does not

' function after this Then you need to reimage the computer because nothing Else is going to help

WSHShell.LogEvent EVENT_INFORMATION, now & " SMS STARTUP SCRIPT/CLIENT STATE= HEALTHY"

Else

' =============================================================================

' RunTasks

' Description: Run Client Stupid Healing Tasks

' =============================================================================

Debug("********** NOT Healthy last SMS ***********")

If do_CHK_AdvClient = True Then CHK_ADVCLIENT

If do_CHK_CACHESIZE = True Then CHK_CACHESIZE

If bClientExist = False Then

If do_SEND_CCR = True Then SEND_CCR

If do_RUN_CCMSetUP = True Then RUN_CCMSetUP

End If

If LogEnvironment = True Then

GetLogEnvironment

End If

Page 19: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

'Added now to Next line - not sure If that works with Event_Warning

If logToEventsSummary=True Then WSHShell.LogEvent EVENT_WARNING, Now & vbCRLF & eventlog & vbCrLf & strEnvLog

End If

'Clean up

CleanUp(err)

Page 20: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

'***********************************************************************************************

'***********************************************************************************************

'************* Start SMS Client SECTION

'***********************************************************************************************

'***********************************************************************************************

' =============================================================================

' Method: CHK_SMSVERSION

' Description: checks ccmexec file version, If no match latest version

' reinstall latest client

' =============================================================================

Sub CHK_SMSVERSION()

Dim objWMIServiceCLI,colCLIPropsList,colCLIProps

On ERROR Resume Next

COLLECTMSG "CHK_SMSVERSION","SMSVERSION_SITE",SMSVersion

Set objWMIServiceCLI = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & Computer & "\root\ccm")

If Err <> 0 Then

CLIENTSTATE = CLIENTSTATE + 1

StrERRType=StrERRType & "SMSVERSION_"

Page 21: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

COLLECTMSG "CHK_SMSVERSION","ERROR","Cannot connect to \ROOT\CCM client may not exist"

bClientExist = False

Exit Sub

End If

Set colCLIPropsList = objWMIServiceCLI.ExecQuery("Select * from SMS_Client")

For Each colCLIProps In colCLIPropsList

COLLECTMSG "CHK_SMSVERSION","VERSION", colCLIProps.ClientVersion

oSmsversion=colCLIProps.ClientVersion

Debug("Client Version " & oSmsversion)

bClientExist = True

Next

End Sub

' =============================================================================

' Method: CHK_SMSUPDATECLIENT

' Description: checks SMS Client Version

' =============================================================================

Sub CHK_SMSUPDATECLIENT()

If oSmsversion < SMSVersion Then

CLIENTSTATUS=1

COLLECTMSG "CHK_SMSVERSION","UPDATE_SMSCLIENT","This system in not running the latest version SMS Client, reinstalling new client"

RUN_CCMSETUP

COLLECTMSG "CHK_SMSVERSION","UPDATE_SMSCLIENT","Completed"

End if

Page 22: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

End Sub

'Sub CHK_SMSUPDATECLIENT()

'

' If oSmsversion < SMSVersion Then

' CLIENTSTATE = CLIENTSTATE + 1

' RegCounter "CHK_SMSUPDATECLIENT",1

' COLLECTMSG "CHK_SMSVERSION","UPDATE_SMSCLIENT","This system in not running the latest version SMS Client, reinstalling new client"

' If Do_RUN_CCMSetUP Then RUN_CCMSetUP

' ElseIf do_SEND_CCR = True Then SEND_CCR

' End If

' COLLECTMSG "CHK_SMSVERSION","UPDATE_SMSCLIENT","Completed"

' End If

'

'End Sub

' =============================================================================

' Method: CHK_AdvClient

' Description: Checks CHK_AdvClient components

' =============================================================================

Sub CHK_ADVCLIENT()

On ERROR Resume Next

COLLECTMSG "CHK_ADVCLIENT",">", Null

Dim oCPAppletMgr 'Control Applet manager object.

Page 23: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Dim oClientComponent 'Individual client components.

Dim oClientComponents 'A collection of client components.

'Get the Control Panel applet manager object.

Set oCPAppletMgr = CreateObject("CPApplet.CPAppletMgr")

If oCPAppletMgr Is Nothing Then

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_ADVCLIENT",1

Debug("Cannot connect to CPApplet.CPAppletMgr")

StrERRType=StrERRType & "CPAppletMgr_"

Exit Sub

End If

'Get a collection of components.

Set oClientComponents = oCPAppletMgr.GetClientComponents

If oClientComponents Is Nothing Then

Set oCPAppletMgr = Nothing

Debug("No ADV Client Components")

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_ADVCLIENT",1

StrERRType=StrERRType & "ADVCLIENT_"

Exit Sub

End If

For Each oClientComponent In oClientComponents

Debug(oClientComponent.DisplayName)

Select Case oClientComponent.State

Case 0

cmsg= "installed"

Page 24: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Case 1

cmsg= "enabled"

Case 2

cmsg= "disabled"

End Select

'If oClientComponent.DisplayName = "SMS Client Core Components" Then

'CLIENTSTATE = oClientComponent.State

'COLLECTMSG oClientComponent.DisplayName, oClientComponent.State, Null

'End If

DisplayName=oClientComponent.DisplayName

COLLECTMSG "CHK_ADVCLIENT",DisplayName,cmsg

Next

Set oClientComponents = Nothing

Set oCPAppletMgr = Nothing

If Err <> 0 Then COLLECTMSG "CHK_ADVCLIENT", "ERROR", Null

End Sub

' =============================================================================

' Method: CHK_ASSIGNMENT

' Description: Checks Client Site Assignment

' =============================================================================

Sub CHK_ASSIGNMENT

On ERROR Resume Next

Page 25: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Err.clear

COLLECTMSG "CHK_ASSIGNMENT",">",NULL

Dim oSMSClient

Set oSMSClient = CreateObject ("Microsoft.SMS.Client")

If err.Number<>0 Then

COLLECTMSG "CHK_ASSIGNMENT","ERROR", Err.description

COLLECTMSG "CHK_ASSIGNMENT","Could not create SMS Client Object - Quitting", Null

Else

If Len(oSMSClient.GetAssignedSite) = 0 Then

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_ASSIGNMENT",1

'oSMSClient.SetAssignedSite("CRV")

'have the client determine from AD or SLP appropraite site code

oSMSClient.ReAssignSite

COLLECTMSG "CHK_ASSIGNMENT", "Error - Client not installed correctly - Setting AUTO", Null

StrERRType=StrERRType & "ASSIGNMENT_"

Else

COLLECTMSG "CHK_ASSIGNMENT",">", "Assigned Site = " & oSMSClient.GetAssignedSite

End If

End If

Set oSMSClient=Nothing

End Sub

' =============================================================================

' Method: CHK_CACHESIZE

' Description: Checks Client Cache Size

Page 26: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

' =============================================================================

Sub CHK_CACHESIZE

On ERROR Resume Next

COLLECTMSG "CHK_CACHESIZE",">",NULL

Set oUIResManager = createobject("UIResource.UIResourceMgr")

If oUIResManager Is Nothing Then

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_CACHESIZE",1

COLLECTMSG "CHK_CACHESIZE","ERROR", Err.description

COLLECTMSG "CHK_CACHESIZE","ERROR","Could not create Resource Manager - Quitting"

StrERRType=StrERRType & "UIResourceMgr_"

Exit Sub

End If

Set oCache=oUIResManager.GetCacheInfo()

If oCache Is Nothing Then

Set oUIResManager=Nothing

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_CACHESIZE",1

COLLECTMSG "CHK_CACHESIZE","ERROR","Could not get cache info - Quitting"

StrERRType=StrERRType & "CACHESIZE_"

Exit Sub

End If

oCache.TotalSize=CacheSize

COLLECTMSG "CHK_CACHESIZE","CACHE SIZE", CacheSize

If Err <> 0 Then COLLECTMSG "CHK_CACHESIZE", "ERROR", Null

Page 27: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

End Sub

' =============================================================================

' Method: SEND_CCR

' Description: Sends a CCR

' =============================================================================

Sub SEND_CCR()

COLLECTMSG "SEND_CCR",">", Null

CCRPathFile = "\\"& StrCCRServer& "\SMS_" & strCCRSiteCode & "\inboxes\CCR.BOX\" & Computer & ".CCR"

Set fsCCR = objFSO.CreateTextFile(CCRPathFile, True)

fsCCR.writeline ("[NT Client Configuration Request]")

fsCCR.writeline ("Machine Name=" & Computer)

fsCCR.Close

COLLECTMSG "SEND_CCR","SENT|" & CCRPathFile, Null

End Sub

' =============================================================================

' Method: RUN_CCMSetUP

' Description: Runs CCMSetUP to install SMS Client

' =============================================================================

Sub RUN_CCMSetUP()

On ERROR Resume Next

COLLECTMSG "RUN_CCMSetUP",">", Null

Set oWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2:Win32_Process")

Page 28: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

result = oWMIService.Create(CCMSetUP & " SMSSITECODE=" & ASSIGNSITECODE & " SMSCACHESIZE=" & CacheSize & " DISABLECACHEOPT=TRUE DISABLESITEOPT=TRUE CCMHTTPPORT=" & PortNumber , Null, Null, intProcessID)

COLLECTMSG "RUN_CCMSetUP","Path | " & CCMSetUP, Null

COLLECTMSG "RUN_CCMSetUP","SMSSITECODE | " & ASSIGNSITECODE, Null

COLLECTMSG "RUN_CCMSetUP","SMSCACHESIZE | " & CacheSize, Null

COLLECTMSG "RUN_CCMSetUP","ProcessID | " & intProcessID, Null

COLLECTMSG "RUN_CCMSetUP","Result | " & result, Null

Set oWMIService = Nothing

If Err <> 0 Then COLLECTMSG "RUN_CCMSetUP", "ERROR", Null : CLIENTSTATE = CLIENTSTATE + 1 : RegCounter "RUN_CCMSetUP",1 : StrERRType=StrERRType & "RUN_CCMSetUP_"

End Sub

'***********************************************************************************************

'***********************************************************************************************

'************* End SMS Client SECTION

'***********************************************************************************************

'***********************************************************************************************

'************* Start WMI SECTION

'***********************************************************************************************

'***********************************************************************************************

' =============================================================================

' Method: REPAIR_WMI_XP

' =============================================================================

Page 29: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Sub REPAIR_WMI_XP()

On ERROR Resume Next

COLLECTMSG "REPAIR_WMI_XP",">", Null

REPAIR_WMI_REGISTER

If do_StartSeriviceViaSC Then StartSeriviceViaSC "winmgmt","auto"

COLLECTMSG "REPAIR_WMI_XP","CMD","rundll32 wbemupgd, UpgradeRepository"

wshshell.run "rundll32 wbemupgd, UpgradeRepository",0,1

StrERRType=StrERRType & "RepairWMI_"

'WriteEnvVar "SMSCLIENT_CHK_WMI_LAST","REPAIRED","system","1"

If Err <> 0 Then COLLECTMSG "REPAIR_WMI_XP","ERROR", Null

End Sub

' =============================================================================

' Method: REBUILD_WMI_BRUTE_FORCE

' Description: Rebuilds WMI repository

' =============================================================================

Sub REBUILD_WMI_BRUTE_FORCE()

On ERROR Resume Next

COLLECTMSG "REBUILD_WMI_BRUTE_FORCE",">", Null

REPAIR_WMI_REGISTER

StrERRType=StrERRType & "BruteWMI_"

Page 30: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

wshshell.run "net stop winmgmt /y",0,1

WbemPath = windir & "\system32\wbem\Repository"

objFSO.MoveFolder WbemPath, WbemPath & "_Old"

'Repalced the following line with StartSeriviceViaSC sub (6 lines lower)

'wshshell.run "net start winmgmt",0,1

If do_StartSeriviceViaSC Then StartSeriviceViaSC "winmgmt","auto"

REPAIR_WMI_MOF

REPAIR_SMS_MOF

StrERRType=StrERRType & "RebuildWMI_"

COLLECTMSG "REBUILD_WMI_BRUTE_FORCE","Finished", Null

'WriteEnvVar "SMSCLIENT_CHK_WMI_LAST","REBUILT","system","1"

If Err <> 0 Then COLLECTMSG "REBUILD_WMI_BRUTE_FORCE","ERROR", Err.Description

End Sub

' =============================================================================

' Method: REPAIR_WMI_REGISTER

' Description: Re-register WMI components

' =============================================================================

Sub REPAIR_WMI_REGISTER()

On ERROR Resume Next

COLLECTMSG "REGISTER_WMI",">", Null

Page 31: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

'ClearADAP

wshshell.run windir &"\system32\wbem\winmgmt.exe /CLEARADAP"

'ReSynchPref

wshshell.run windir &"\system32\wbem\winmgmt.exe /RESYNCPERF"

Set objFolder = objFSO.GetFolder(windir &"\system32\wbem")

Set colFiles = objFolder.Files

For Each objFile in colFiles

If InStr(objFile.Name,".dll") Then

wshshell.run "RegSvr32 /s " & objFile.Path,0,1

End If

If InStr(objFile.Name,".exe") Then

If InStr(objFile.Name,"wbemtest.exe") Then

Else

wshshell.run objFile.Path & " /RegServer",0,1

End If

End If

COLLECTMSG "REGISTER_WMI",objFile.Path, Null

Next

COLLECTMSG "REGISTER_WMI","Finished", Null

If Err <> 0 Then COLLECTMSG "REGISTER_WMI", "ERROR", Null : StrERRType=StrERRType & "REGISTER_WMI_"

End Sub

Page 32: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

' =============================================================================

' Method: REPAIR_WMI_MOF

' Description: MofComp WMI MOF's

' =============================================================================

Sub REPAIR_WMI_MOF()

On ERROR Resume Next

COLLECTMSG "REPAIR_WMI_MOF",">", Null

Set objFolder = objFSO.GetFolder(windir &"\system32\wbem")

Set colFiles = objFolder.Files

For Each objFile in colFiles

If InStr(objFile.Name,".mof") Then

wshshell.run "mofcomp " & objFile.Path,0,1

End If

If InStr(objFile.Name,".mfl") Then

wshshell.run "mofcomp " & objFile.Path,0,1

End If

COLLECTMSG "REPAIR_WMI_MOF",objFile.Path, Null

Next

COLLECTMSG "REPAIR_WMI_MOF","Finished", Null

If Err <> 0 Then COLLECTMSG "REPAIR_WMI_MOF", "ERROR", Null : StrERRType=StrERRType & "REPAIR_WMI_MOF_"

End Sub

' =============================================================================

' Method: REPAIR_SMS_MOF

Page 33: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

' Description: MofComp SMS MOF's

' =============================================================================

Sub REPAIR_SMS_MOF()

On ERROR Resume Next

COLLECTMSG "REPAIR_SMS_MOF",">", Null

Set objFolder = objFSO.GetFolder(windir &"\system32\ccm")

Set colFiles = objFolder.Files

For Each objFile in colFiles

If InStr(objFile.Name,".mof") Then

wshshell.run "mofcomp " & objFile.Path,0,1

End If

If InStr(objFile.Name,".mfl") Then

wshshell.run "mofcomp " & objFile.Path,0,1

End If

COLLECTMSG "REPAIR_SMS_MOF",objFile.Path, Null

Next

COLLECTMSG "REPAIR_SMS_MOF","Finished", Null

If Err <> 0 Then COLLECTMSG "REPAIR_SMS_MOF", "ERROR", Null : StrERRType=StrERRType & "REPAIR_SMS_MOF_"

End Sub

'***********************************************************************************************

'***********************************************************************************************

'************* END WMI SECTION

Page 34: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

'***********************************************************************************************

'***********************************************************************************************

' =============================================================================

' Method: REG_XML

' Description: Re-Registers XML DLL

' =============================================================================

Sub REG_XML()

On ERROR Resume Next

COLLECTMSG "REG_XML",">" , Null

'// Register XML

XMLREG = windir & "\system32\regsvr32.exe /s " & windir & "\system32\msxml3.dll"

COLLECTMSG "REG_XML","CMD | " & XMLREG, Null

Set oWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2:Win32_Process")

result = oWMIService.Create(XMLREG, Null, Null, intProcessID)

If Err <> 0 Then COLLECTMSG "REG_XML", "ERROR", Null : CLIENTSTATE = CLIENTSTATE + 1 : RegCounter "REG_XML",1 : StrERRType=StrERRType & "REGXML_"

COLLECTMSG "REG_XML","ProcessID | " & intProcessID, Null

COLLECTMSG "REG_XML","Result | " & result, Null

End Sub

' =============================================================================

' Method: REG_Msiexec

Page 35: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

' Description: Re-Registers msiexec

' =============================================================================

Sub REG_Msiexec()

On ERROR Resume Next

COLLECTMSG "REG_Msiexec",">" , Null

'// Register XML

XMLREG = windir & "\system32\msiexec.exe /regserver"

COLLECTMSG "REG_Msiexec","CMD | " & XMLREG, Null

Set oWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2:Win32_Process")

result = oWMIService.Create(XMLREG, Null, Null, intProcessID)

If Err <> 0 Then COLLECTMSG "REG_Msiexec", "ERROR", Null : CLIENTSTATE = CLIENTSTATE + 1 : RegCounter "REG_Msiexec",1 : StrERRType=StrERRType & "REGMsiexec_"

COLLECTMSG "REG_Msiexec","ProcessID | " & intProcessID, Null

COLLECTMSG "REG_Msiexec","Result | " & result, Null

End Sub

' =============================================================================

' Method: REG_SVR32

' Description: Re-Registers DLLs

' =============================================================================

Sub REG_SVR32(nCHK, nFile)

On ERROR Resume Next

COLLECTMSG nCHK,">" , Null

'// Register XML

REGsvr = windir & "\system32\regsvr32.exe /s " & windir & "\system32\" & nFile

Page 36: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

COLLECTMSG nCHK,"CMD | " & REGsvr, Null

Set oWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2:Win32_Process")

result = oWMIService.Create(REGsvr, Null, Null, intProcessID)

If Err <> 0 Then COLLECTMSG nCHK, "ERROR", Null : CLIENTSTATE = CLIENTSTATE + 1 : RegCounter nCHK,1 : StrERRType=StrERRType & "RegServ32_"

COLLECTMSG nCHK,"ProcessID | " & intProcessID, Null

COLLECTMSG nCHK,"Result | " & result, Null

End Sub

' =============================================================================

' Method: CHK_DCOM

' Description: Sets DCOM sercurity premissions

' =============================================================================

Sub CHK_DCOM()

COLLECTMSG "CHK_DCOM",">" , Null

'// Sets DCOM

If wshshell.regRead("HKLM\SOFTWARE\Microsoft\Ole\EnableDCOM") <> "Y" Then

COLLECTMSG "CHK_DCOM", "ERROR", "EnableDCOM | write reg Y"

wshshell.RegWrite "HKLM\SOFTWARE\Microsoft\Ole\EnableDCOM","Y","REG_SZ"

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_DCOM",1

StrERRType=StrERRType & "DCOME_"

End If

If wshshell.regRead("HKLM\SOFTWARE\Microsoft\Ole\EnableRemoteConnect") <> "Y" Then

COLLECTMSG "CHK_DCOM", "ERROR", "EnableRemoteConnect | write reg Y"

Page 37: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

wshshell.RegWrite "HKLM\SOFTWARE\Microsoft\Ole\EnableRemoteConnect","Y","REG_SZ"

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_DCOM",1

StrERRType=StrERRType & "DCOMERC_"

End If

If wshshell.regRead("HKLM\SOFTWARE\Microsoft\Ole\LegacyAuthenticationLevel") <> "2" Then

COLLECTMSG "CHK_DCOM", "ERROR", "LegacyAuthenticationLevel | write reg 2"

wshshell.RegWrite "HKLM\SOFTWARE\Microsoft\Ole\LegacyAuthenticationLevel","0x00000002","REG_DWORD"

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_DCOM",1

StrERRType=StrERRType & "DCOMLAL_"

End If

If wshshell.regRead("HKLM\SOFTWARE\Microsoft\Ole\LegacyImpersonationLevel") <> "2" Then

COLLECTMSG "CHK_DCOM", "ERROR", "LegacyImpersonationLevel | write reg 2"

wshshell.RegWrite "HKLM\SOFTWARE\Microsoft\Ole\LegacyImpersonationLevel","0x00000002","REG_DWORD"

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_DCOM",1

StrERRType=StrERRType & "DCOMLIL_"

End If

'Orginal Code

'wshshell.run ("REG ADD HKLM\SOFTWARE\Microsoft\Ole /v EnableDCOM /t REG_SZ /d Y /f",0,1)

'wshshell.run ("REG ADD HKLM\SOFTWARE\Microsoft\Ole /v EnableRemoteConnect /t REG_SZ /d Y /f",0,1)

'wshshell.run ("REG ADD HKLM\SOFTWARE\Microsoft\Ole /v LegacyAuthenticationLevel /t REG_DWORD /d 0x00000002 /f",0,1)

'wshshell.run ("REG ADD HKLM\SOFTWARE\Microsoft\Ole /v LegacyImpersonationLevel /t REG_DWORD /d 0x00000002 /f",0,1)

Page 38: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

End Sub

' =============================================================================

' Method: Fix_Service

' Description: Checks the status of a service

' =============================================================================

Function Fix_Service(nCHK, nService,nMode,nStatus)

On ERROR Resume Next

'Variable to identify when a service is missing

' Example Bits is not installed

Dim bServiceFound: bServiceFound = False

COLLECTMSG nCHK,">", Null

err.clear

Set colServiceList = objWMIService.ExecQuery _

("Select * from Win32_Service where Name = '" & nService &"'")

If Err<>0 Then

COLLECTMSG "Fix_Service","ERROR execQuery",err & " " & err.description

Debug("Err = " & err & " " & err.description)

If nMode = "NotDisabled" Then nMode = "Manual"

If do_StartSeriviceViaSC Then StartSeriviceViaSC nService, nMode

End If

err.clear

For Each objService In colServiceList

'Found a service

'Debug("objService Name = " & objService.name)

Page 39: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

'Debug("objService Caption = " & objService.Caption)

bServiceFound = True

'COLLECTMSG nCHK,"Mode | " & objService.StartMode, Null

'COLLECTMSG nCHK,"Status | " & objService.State, Null

'Added this check in for services that mode matters but not status

'If the status is unimportant then ignore the tests below

If nStatus = "unimportant" Then

tempStatus = objService.State

Else

tempStatus = nStatus

End If

'Debug("tempStatus = " & tempStatus)

'Added this check in for services that mode doesn't matter as long as it is not disabled

'Example being BITS

Debug("nMode = " & nMode)

If nMode = "NotDisabled" Then

If objService.StartMode <> "disabled" Then

tempMode = objService.StartMode

'Debug("1 tempMode = " & tempMode)

Else

'Service is set to disabled. Change to manual to allow it to start

tempMode = "Manual"

'Debug("2 tempMode = " & tempMode)

End If

Else

'Service is setting to some value

tempMode = nMode

'Debug("3 tempMode = " & tempMode)

Page 40: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

End If

If LCase(objService.StartMode) <> LCase(tempMode) Or LCase(objService.State) <> LCase(tempStatus) Then

'Debug(objService.StartMode & " <> " & nMode)

'Debug(objService.State & " <> " & tempStatus)

CLIENTSTATE = CLIENTSTATE + 1

RegCounter nCHK,1

COLLECTMSG nCHK, "ERROR","Current StartMode " & objService.StartMode

COLLECTMSG nCHK, "ERROR","Current State " & objService.State

COLLECTMSG nCHK, "ERROR","Changing StartMode to " & tempMode

err.clear

errReturnCode = 0

If tempMode = "auto" Then tempMode = "automatic"

errReturnCode = objService.ChangeStartMode(tempMode)

If errReturnCode <> 0 Then

'More detail here

' http://msdn.microsoft.com/en-us/library/aa384896(VS.85).aspx

Debug("err = " & err & " " & err.description & " return code = " & errReturnCode)

COLLECTMSG nCHK,"ChangedStartMode",errReturnCode

COLLECTMSG nCHK, "ERROR","Failed to Change StartMode | " & tempMode

CLIENTSTATE = CLIENTSTATE + 1

If do_StartSeriviceViaSC Then StartSeriviceViaSC nService, tempMode

End If

err.clear

If (tempStatus = "Running") And objService.State <> nStatus Then

CLIENTSTATE = CLIENTSTATE + 1

Page 41: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

RegCounter nCHK,1

err.clear

errReturnCode = objService.startservice

If errReturnCode <> 0 Then

Debug("err= " & err & " RC= " & errReturnCode & " " & err.description)

COLLECTMSG nCHK, "ERROR","Failed to Startservice | " & tempMode

CLIENTSTATE = CLIENTSTATE + 1

If do_StartSeriviceViaSC Then StartSeriviceViaSC nService, tempMode

End If

COLLECTMSG nCHK, "Info","Startservice | "& errReturnCode

End If

StrERRType=StrERRType & nService & "_"

End If

Next

If bServiceFound=False Then

COLLECTMSG nCHK,"ERROR", nService & " | Found | FALSE" : CLIENTSTATE = CLIENTSTATE + 1 : RegCounter nCHK,1

StrERRType=StrERRType & "NO" & nService & "_"

End If

Fix_Service = bServiceFound

If Err <> 0 Then COLLECTMSG nCHK, "ERROR", null : CLIENTSTATE = CLIENTSTATE + 1 : RegCounter nCHK,1

End Function

' =============================================================================

Page 42: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

' Method: CHK_SYSTEMPATH

' Description: checks that wbem is near the front of the sys path and cleans

' any duplicate statements from the path environment

' =============================================================================

Sub CHK_SYSTEMPATH()

WindirPath = LCase(windir)

System32path = LCase(windir & "\system32")

WBEMpath = LCase(windir & "\system32\wbem")

WindirPathFound = False

System32pathFound = False

WBEMpathFound = False

SystemRoot = False

strKeyNamePath = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

strValueName = "Path"

'// GET PATH STATEMENT

strValue = wshshell.regRead("HKLM\" & strKeyNamePath & "\" & strValueName)

strValue = LCase(strValue)

ARRpath = Split(LCase(strValue), ";")

For i = 0 To UBound(ARRpath)

'Repalce SystemRoot with actual value

If InStr(ARRpath(i), LCase("%systemroot%")) <> 0 Then

strValue = Replace(strValue, LCase("%systemroot%"), LCase(windir))

Page 43: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

SystemRoot = True

COLLECTMSG "CHK_SYSTEMPATH","Warning","Replaced %systemroot% " & SystemRoot

End If

If ARRpath(i) = WindirPath Then WindirPathFound = True

If ARRpath(i) = System32path Then System32pathFound = True

If ARRpath(i) = WBEMpath Then WBEMpathFound = True

Next

If (WBEMpathFound = True) And (System32pathFound = True) And (WindirPathFound = True) And (SystemRoot = False) Then COLLECTMSG "CHK_SYSTEMPATH","All Paths Found",WBEMpathFound: Exit Sub

COLLECTMSG "CHK_SYSTEMPATH","PATH",strValue

'// Log the results

logit=False

If WBEMpathFound = False Then strValue = WBEMpath & ";" & strValue : COLLECTMSG "CHK_SYSTEMPATH","ERROR","WBEMpathFound " & WBEMpathFound:logit=True : CLIENTSTATE = CLIENTSTATE + 1

If WindirPathFound = False Then strValue = WindirPath & ";" & strValue : COLLECTMSG "CHK_SYSTEMPATH","ERROR", "WindirPathFound " & WindirPathFound :logit=True : CLIENTSTATE = CLIENTSTATE + 1

If System32pathFound = False Then strValue = System32path & ";" & strValue : COLLECTMSG "CHK_SYSTEMPATH","ERROR", "System32pathFound " & System32pathFound:logit=True : CLIENTSTATE = CLIENTSTATE + 1

If logit = True Then StrERRType = StrERRType & "SYSTEMPATH_"

'//Take out duplicates

'Dictionary Object is Much faster

ARRpath = Split(LCase(strValue), ";")

Set PureString = CreateObject("Scripting.Dictionary")

Page 44: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

For i = 0 To UBound(ARRpath)

If Not PureString.Exists(ARRpath(i)) Then PureString.Add ARRpath(i), ARRpath(i) : Debug(ARRpath(i))

Next

strValues = ""

For Each strKeyName in PureString.Keys

strValues = strValues & strKeyName & ";"

Next

Set PureString = Nothing

'Remove duplicate semicolons

If InStr(strValues, ";;") <> 0 Then strValues = Replace(Replace(strValues, ";;", ";"), ";;", ";")

'Remove trailing semicolons

ln = Len(strValues)

If InStr(ln, strValues, ";") <> 0 Then strValues = Left(strValues, ln - 1)

'// Set PATH STATEMENT

'Set to current runtime path

Set oEnv = WshShell.Environment("System")

oEnv("Path")=strValues

Set oEnv = Nothing

'Set to Registry for next restart

wshshell.regwrite "HKLM\" & strKeyNamePath & "\" & strValueName,strValues,"REG_SZ"

RegCounter "CHK_SYSTEMPATH",1

COLLECTMSG "CHK_SYSTEMPATH","PATH_CLEAN", strValues

End Sub

' =============================================================================

' Method: CHK_SMSLOCALADMIN

' Description: Adds your SMS Admin Account to the local admininstrators group

' =============================================================================

Page 45: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Sub CHK_SMSLOCALADMIN()

COLLECTMSG "CHK_SMSLOCALADMIN",">", Null

On ERROR Resume Next

'>>> Add SMS ADMIN to Local Administrator group

If InStr(admACCT, "\") <> 0 Then admACCT = replace(admACCT, "\", "/")

Set objGroup = GetObject("WinNT://" & Computer & "/" & LocalAdminGroup & ",group")

If Not objGroup.IsMember("WinNT://" & admACCT) Then

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_SMSLOCALADMIN",1

'Change slash to allow adding

objGroup.Add ("WinNT://"& admACCT)

COLLECTMSG "CHK_SMSLOCALADMIN", "Added", Null

StrERRType=StrERRType & "LocalAdmin_"

Else

COLLECTMSG "CHK_SMSLOCALADMIN", "True" , Null

End If

If Err <> 0 Then COLLECTMSG "CHK_SMSLOCALADMIN","ERROR", Err & Err.Description

End Sub

' =============================================================================

' Method: CHK_ADMSHARE

' Description: Checks ADMIN SHARES ACCESS

'Value Data: (0 = disable shares, 1 = enable)

' =============================================================================

Sub CHK_ADMSHARE()

admShareFound = False

Set colshares = objWMIService.ExecQuery("Select * from Win32_Share where Name = 'ADMIN$'")

Page 46: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

For Each objShare In colshares

admShareFound = True

COLLECTMSG "CHK_ADMSHARE", "FOUND",admShareFound

Next

If admShareFound = False Then

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "CHK_ADMSHARE",1

StrERRType=StrERRType & "ADMSHARE_"

COLLECTMSG "CHK_ADMSHARE","FOUND",admShareFound

Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _

Computer & "\root\default:StdRegProv")

strKeyNamePath = "SYSTEM\CurrentControlSet\Services\LanManServer\Parameters"

'strValueNameSRV = "AutoShareServer" ' for servers

strValueNameWS = "AutoShareWks" ' for workstations

oReg.SetDWORDValue HKeyName_LOCAL_MACHINE, strKeyNamePath, strValueNameWS, 1

COLLECTMSG "CHK_ADMSHARE", "FIXED", Null

End If

End Sub

Page 47: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

' =============================================================================

' HELPERS

' =============================================================================

' =============================================================================

' Method: GetSystemRole

' Description: Checks System role

' Disabled as this check requires WMI and reporting of this info is before WMI check

' =============================================================================

Function GetSystemRole()

On ERROR Resume Next

COLLECTMSG "GetSystemRole",">", Null

Set objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2")

Set colComputers = objWMIService.ExecQuery _

("Select DomainRole from Win32_ComputerSystem")

For Each objComputer In colComputers

Select Case objComputer.DomainRole

Case 0

strComputerRole = "Standalone Workstation"

Case 1

strComputerRole = "Member Workstation"

Case 2

strComputerRole = "Standalone Server"

Case 3

strComputerRole = "Member Server"

Case 4

Page 48: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

strComputerRole = "Backup Domain Controller"

Case 5

strComputerRole = "Primary Domain Controller"

End Select

GetSystemRole=objComputer.DomainRole

COLLECTMSG "GetSystemRole","System Role", GetSystemRole

Next

End Function

' =============================================================================

' Determines OS by reading reg val & comparing to known values

' OS version number returned as number of type double:

' Windows Vista: 6

' Windows 2k: 5

' Windows XP: 5.1

' Windows Server 2003: 5.2

' Windows x: >5.2

'

' =============================================================================

Sub GetOs()

On ERROR Resume Next

COLLECTMSG "GetOs",">", Null

Err.clear

sOStype = WSHShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions\ProductType")

Page 49: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

sOSversion = WSHShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")

sOSType = Trim(sOSversion)

If Err <> 0 Then

CLIENTSTATE = CLIENTSTATE + 1

GetOsVersionNumber = "Unknown NTx"

' Could not determine NT version

Exit Sub ' >>>

End If

Select Case sOSversion

Case 6.1

Os = "Windows 7"

isOS="workstation"

Exit Sub

Case 6

Os = "Vista"

isOS="workstation"

Exit Sub

Case 5

Os= "2000"

isOS="workstation"

Case 5.1

Os = "XP"

isOS="workstation"

Exit Sub

Case 5.2

Os = "2003"

isOS="server"

Page 50: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

WSHShell.LogEvent EVENT_INFORMATION, "SMS STARTUP SCRIPT - Do not run on servers@ " & Now

COLLECTMSG "GetOs","ERROR", "Server OS Quiting"

CleanUp(err)

Exit Sub

End Select

If IsOS ="workstation" And sOStype="WinNT" Then IsOS ="workstation" Else IsOS ="server"

If Os= "2000" And sOStype="WinNT" Then IsOS ="workstation" Else IsOS ="server"

End Sub

' =============================================================================

' Method: StrDateTime

' Description: Converts WMI TIME tokens

' Not USED

' =============================================================================

Function StrDateTime(d)

Dim strDate

Dim strTime

Dim strVal

strVal = CStr(d)

strDate = DateSerial(Left(strVal, 4), _

Mid(strVal, 5, 2), _

Mid(strVal, 7, 2))

strTime = TimeSerial(Mid(strVal, 9, 2), _

Mid(strVal, 11, 2), _

Mid(strVal, 13, 2))

StrDateTime = strDate + strTime

Page 51: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

End Function

' =============================================================================

' Method: Set_LogFolder

' Description: Sets the logginf folder path

' =============================================================================

Sub Set_LOGFOLDER()

On ERROR Resume Next

If LogGood=True And ClientState=0 Then

LogPath = GoodLogPath

If objFSO.FolderExists(GoodLogPath) Then

Set objFolder = objFSO.GetFolder(LogPath)

Else

Set objFolder = objFSO.CreateFolder(LogPath)

End If

LogPath = GoodLogPath & "\" & StrERRType & computer & ".log"

COLLECTMSG "Set_LOGFOLDER","ClientState = " & ClientState,"LogPath = " & LogPath

Err.clear

objFSO.CopyFile strLogFile , LogPath , OverwriteExisting

If Err<>0 Then COLLECTMSG "Set_LOGFOLDER","ERROR","Write Log Folder File " & err & " " & err.description

ElseIf LogBad=True And ClientState<>0 Then

LogPath = BadLogPath

If objFSO.FolderExists(BadLogPath) Then

Set objFolder = objFSO.GetFolder(LogPath)

Else

Set objFolder = objFSO.CreateFolder(LogPath)

End If

Page 52: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

LogPath = BadLogPath & "\" & StrERRType & computer & ".log"

COLLECTMSG "Set_LOGFOLDER","ClientState = " & ClientState,"LogPath = " & LogPath

Err.clear

objFSO.CopyFile strLogFile , LogPath , OverwriteExisting

If Err<>0 Then COLLECTMSG "Set_LOGFOLDER","ERROR","Write Log Folder File " & err & " " & err.description

Else

COLLECTMSG "Set_LOGFOLDER","No Criteria Matched for Log Forwarding","ClientState = " & ClientState & " LogGood = " & LogGood & " LogBad = " & LogBad

End If

End Sub

' =============================================================================

' Method: COLLECTMSG

' Description: Collections Errors for logging to log file

' =============================================================================

Sub COLLECTMSG(Section,KeyName,value)

On ERROR Resume Next

Dim f

Const ForReading = 1, ForWriting = 2, ForAppending = 8

Set f = objFSO.OpenTextFile(strLogFile, ForAppending, True)

strmsg = now & " | " & Section & " | " & KeyName & " | "& value

If Err <> 0 Then

strmsg=strmsg & vbCrLf _

& "ERROR COLLECTMSG | " & Hex(Err.Number) & " h (" & CStr(Err.Number) & ") | Description |" & Err.Description

Page 53: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

End If

eventlog=eventlog & strmsg & vbCrLf

f.Writeline strmsg

VerboseCHK(strmsg)

f.Close

strmsg=""

Err.Clear

End Sub

' =============================================================================

' Method: ReadEnvVar

' Description: Read Environment Variables

' =============================================================================

Function ReadEnvVar(envField,envType)

On ERROR Resume Next

Select Case envType

Case "system"

Set oEnv = WshShell.Environment("System")

Case "user"

Set oEnv = WshShell.Environment("User")

Case "volatile"

Set oEnv = WshShell.Environment("Volatile")

Case "process"

Set oEnv = WshShell.Environment("Process")

End Select

ReadEnvVar = oEnv(envField)

Page 54: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

End Function

' =============================================================================

' Method: WriteEnvVar

' Description: WMI Write Environment Variables

' =============================================================================

Sub WriteEnvVar(envField,envValue,envType,envAddDel)

'Example Call

'WriteEnvVar "StartWMIbyADSI","Started","system","1"

On ERROR Resume Next

Select Case envType

Case "system"

Set oEnv = WshShell.Environment("System")

Case "user"

Set oEnv = WshShell.Environment("User")

Case "volatile"

Set oEnv = WshShell.Environment("Volatile")

Case "process"

Set oEnv = WshShell.Environment("Process")

End Select

' add a var

If envAddDel=1 Then oEnv(envField) = envValue

' remove a var

If envAddDel=0 Then oEnv.Remove envField

End Sub

Page 55: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

' =============================================================================

' Method: GetLogEnvironment

' Description: Get Logs Environments

' =============================================================================

Sub GetLogEnvironment()

Dim f

Const ForReading = 1, ForWriting = 2, ForAppending = 8

Set f = objFSO.OpenTextFile(strLogFile, ForAppending, True)

'// List all vars in all environment types

'//System Type

Set oEnv = WshShell.Environment("System")

For Each sItem In oEnv

strEnvVal = strEnvVal & sItem & vbCrLf

Next

strEnvLog = strEnvLog & "[SystemEnvironment]" & vbCrLf & strEnvVal & vbCrLf

strEnvVal = ""

'//Process Type

Set oEnv = WshShell.Environment("Process")

For Each sItem In oEnv

strEnvVal = strEnvVal & sItem & vbCrLf

Next

strEnvLog = strEnvLog & "[ProcessEnvironment]" & vbCrLf & strEnvVal & vbCrLf

strEnvVal = ""

Page 56: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

'//User Type

Set oEnv = WshShell.Environment("User")

For Each sItem In oEnv

strEnvVal = strEnvVal & sItem & vbCrLf

Next

strEnvLog = strEnvLog & "[UserEnvironment]" & vbCrLf & strEnvVal & vbCrLf

strEnvVal = ""

'//Volatile Type

Set oEnv = WshShell.Environment("Volatile")

For Each sItem In oEnv

strEnvVal = strEnvVal & sItem & vbCrLf

Next

strEnvLog= strEnvLog & "[VolatileEnvironment]" & vbCrLf & strEnvVal & vbCrLf

strEnvVal = ""

Set oEnv = Nothing

f.Writeline strEnvLog

f.Close

Err.Clear

End Sub

' =============================================================================

' Method: StartWMIbyADSI

' =============================================================================

Sub StartWMIbyADSI()

On ERROR Resume Next

Page 57: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

COLLECTMSG "StartWMIbyADSI","ADSI","Start the service"

' define a constant for stopped services

' define ADSI status constants

Const ADS_SERVICE_STOPPED = 1

Const ADS_SERVICE_START_PENDING = 2

Const ADS_SERVICE_STOP_PENDING = 3

Const ADS_SERVICE_RUNNING = 4

Const ADS_SERVICE_CONTINUE_PENDING = 5

Const ADS_SERVICE_PAUSE_PENDING = 6

Const ADS_SERVICE_PAUSED = 7

Const ADS_SERVICE_ERROR = 8

' get an ADSI object for a computer

Set objComputer = GetObject("WinNT://" & COMPUTER & ",computer")

' get an object for a service

Set objService = objComputer.GetObject("Service","winmgmt")

' check to see if the service is stopped

If (objService.Status = ADS_SERVICE_STOPPED) Then

' if the service is stopped, then start it

objService.Start

If Err.number<>0 Then 'Exit sub

'Start Failed

RegCounter "StartWMIbyADSI",1

wshshell.run SCEXELocation & " config winmgmt start= auto",0,1

wshshell.run SCEXELocation & " start winmgmt",0,1

CleanUp(err)

End If

While objService.Status <> ADS_SERVICE_RUNNING: Wend

End If

Page 58: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

StrERRType=StrERRType & "StartWMIADSI_"

'WriteEnvVar "StartWMIbyADSI","Started","system","1"

If Err <> 0 Then COLLECTMSG "StartWMIbyADSI","ERROR",Err & " " & Err.Description

End Sub

' =============================================================================

' Method: StartSeriviceViaSC

' =============================================================================

Sub StartSeriviceViaSC(ServiceName, nMode)

On ERROR Resume Next

Debug("ServiceName = " & ServiceName)

Debug("nMode = " & nMode)

COLLECTMSG "StartSeriviceViaSC","ERROR",ServiceName & " Service not running"

COLLECTMSG "StartSeriviceViaSC","INFO","Attempting to start via sc.exe"

errreturn = 0

Debug("Set " & ServiceName & " to " & nMode & " = " & SCEXELocation & " config " & ServiceName & " start= " & LCase(nMode))

errreturn = wshshell.run(SCEXELocation & " config " & ServiceName & " start= " & LCase(nMode),0,1)

Debug("errreturn = " & errreturn)

If errreturn <> 0 Then

Debug("Errored out in " & ServiceName & " during StartSeriviceViaSC")

RegCounter "StartSeriviceViaSC",1

COLLECTMSG "StartSeriviceViaSC","ERROR","sub was unable to set service " & ServiceName & " to zero"

StrERRType=StrERRType & "Start" & ServiceName & "SC_"

Exit Sub

Page 59: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

End If

Debug(LCase(nMode) & " = auto")

If LCase(nMode) = "auto" Then

errreturn = 0

errreturn = wshshell.run(SCEXELocation & " start " & ServiceName,0,1)

Debug("errreturn = " & errreturn)

If errreturn <> 0 Then

RegCounter "StartSeriviceViaSC",1

Debug("ErrReturn = " & errreturn)

COLLECTMSG "StartSeriviceViaSC","ERROR","sub was unable to start service" & ServiceName

StrERRType=StrERRType & "Start" & ServiceName & "SC_"

Exit Sub

Else

Debug("Successfully Started " & ServiceName)

'Debug("Sleeping 500")

'WSHShell.sleep(500)

End If

End If

COLLECTMSG "StartSeriviceViaSC","INFO","Service is set to " & nMode

'WriteEnvVar "StartSeriviceViaSC","Started","system","1"

If Err <> 0 Then COLLECTMSG "StartSeriviceViaSC","ERROR", Err & " " & Err.Description : StrERRType=StrERRType & "Start" & ServiceName & "SC_"

End Sub

Page 60: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

' =============================================================================

' Method: RegCounter subprocedure

' Descriptoin: Takes the value from a KeyName and adds in the number

' =============================================================================

Sub RegCounter(KeyName, Number)

On ERROR Resume Next

COLLECTMSG "RegCounter",">", KeyName

CurrentKeyName = WSHShell.Regread(RegPath & "\" & KeyName)

Debug("Orginal CurrentKeyName = " & CurrentKeyName)

If LCase(KeyName) <> LCase("WMIStatus") Then Number = CurrentKeyName + Number

Debug("New Number = " & Number)

'Write new value

WSHSHell.RegWrite RegPath & "\" & KeyName, Number, "REG_SZ"

'Write Time Stamp

WSHSHell.RegWrite RegPath & "\" & KeyName & "_TIME", Now(), "REG_SZ"

End Sub

' =============================================================================

' Method: WebSubmit

' Description: WebPage submit to SQL function Version 2... no outside requirements

' =============================================================================

Function WebSubmit(StatusWeb)

Dim strWebAddress, strPost, strRequest

COLLECTMSG "WebSubmit",">", Null

Dim oHTTP, HTTPPost

On ERROR Resume Next

' Gather Info

Page 61: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

strWebAddress = "http://<FQDN>/clienthealth/default.asp"

'Debug(strWebAddress)

If Len(StrERRType) = 0 Then StrERRType = "None"

strPost = "Cname=" & Computer & "&LogFile=" & strUNCLogFile & "&ErrType=" & StrERRType & "&Status=" & StatusWeb

COLLECTMSG "WebSubmit","Post", strPost

strRequest = strWebAddress & " " & strPost

'Debug(strRequest)

'Submit Info

Set oHTTP = CreateObject("Microsoft.XMLHTTP")

oHTTP.open "POST", strWebAddress, false

oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

oHTTP.setRequestHeader "Content-Length", Len(strRequest)

oHTTP.send strPost

WebSubmit = oHTTP.responseText

COLLECTMSG "WebSubmit","Sent", Null

'Debug(WebSubmit)

Set oHTTP = Nothing

End Function

' =============================================================================

' Method: ShowFileAccessInfo

' Description: Get Last File Access Info

' =============================================================================

Function ShowFileAccessInfo(filespec)

On ERROR Resume Next

COLLECTMSG "ShowFileAccessInfo",">", Null

If objFSO.FileExists(filespec) Then

Set f = objFSO.GetFile(filespec)

Page 62: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

filespec_date = f.DateLastModified

FSpace = Instr(filespec_date," ") - 1

ShowFileAccessInfo = Left(filespec_date,FSpace)

COLLECTMSG "ShowFileAccessInfo",filespec & " file date", ShowFileAccessInfo

Else

'File is missing

COLLECTMSG "ShowFileAccessInfo","ERROR", "No Log file to check " & filespec

End If

End Function

' =============================================================================

' Method: SCFileExist

' Description: Does a file exist?

' =============================================================================

Sub SCFileExist()

On ERROR Resume Next

COLLECTMSG "SCFileExist",">", Null

If objFSO.FileExists(strCurrentDir & "\sc.exe") Then

SCEXELocation = strCurrentDir & "\sc.exe"

do_StartSeriviceViaSC = True

COLLECTMSG "SCFileExist",SCEXELocation,do_StartSeriviceViaSC

ElseIf objFSO.FileExists(windir & "\system32\sc.exe") Then

'Disabled due to user requests

'CLIENTSTATE = CLIENTSTATE + 1

'RegCounter "SCFileExist",1

SCEXELocation = windir & "\system32\sc.exe"

do_StartSeriviceViaSC = True

COLLECTMSG "SCFileExist",SCEXELocation,do_StartSeriviceViaSC

Page 63: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

ElseIf objFSO.FileExists(windir & "\system32\dllcache\sc.exe") Then

'Disabled due to user requests

'CLIENTSTATE = CLIENTSTATE + 1

'RegCounter "SCFileExist",1

SCEXELocation = windir & "\system32\dllcache\sc.exe"

do_StartSeriviceViaSC = True

COLLECTMSG "SCFileExist",SCEXELocation,do_StartSeriviceViaSC

Else

'Only ERROR

CLIENTSTATE = CLIENTSTATE + 1

RegCounter "SCFileExist",1

'SC.exe does not exist, do not run service start

do_StartSeriviceViaSC = False

COLLECTMSG "SCFileExist","ERROR","No sc.exe " & do_StartSeriviceViaSC

End If

End Sub

' =============================================================================

' Method: CheckLogFileModifyDate

' Description: SMS Logs recently updated

' =============================================================================

Sub CheckLogFileModifyDate(LogToCheck)

On ERROR Resume Next

COLLECTMSG "CheckLogFileModifyDate",">", Null

strSMSPolEval = windir & "\system32\CCM\Logs\" & LogToCheck

'Debug(strSMSPolEval)

startdate = ShowFileAccessInfo(strSMSPolEval)

'Debug(startdate)

Page 64: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

If isDate(startdate) Then

diffdate = DateDiff("d", startdate, date())

Debug(diffdate)

End If

If diffdate > 14 Then

COLLECTMSG "CheckLogFileModifyDate","ERROR", LogToCheck & " inactive for " & diffdate & " Days"

Debug("File activity > 14 days Should repair client")

Dim oSMSClient

Set oSMSClient = CreateObject ("Microsoft.SMS.Client")

If err.Number<>0 Then

COLLECTMSG "CheckLogFileModifyDate","ERROR", Err & " " & Err.description

COLLECTMSG "CheckLogFileModifyDate","Could not create SMS Client Object - Quitting", Null

Else

oSMSClient.RepairClient

COLLECTMSG "CheckLogFileModifyDate","RepairClient",Null

End If

End If

End Sub

' =============================================================================

' Method: VerboseCHK

' Description: Debugging, writes to console

' =============================================================================

Sub VerboseCHK(output)

Page 65: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

If LogToConsoleVerbose Then wscript.echo output

End Sub

' =============================================================================

' Method: Debug

' Description: Debugging, writes to console

' =============================================================================

Sub Debug(output)

If LogToConsoleDebug Then wscript.echo output

End Sub

Sub CleanUp(ErrorCode)

On ERROR Resume Next

Debug("********** Centralize Info ***********")

'Used to count number of times this script has run

RegCounter "RunCount", 1

'Submit Status

If ErrorCode <> "doRunCheck" Then

If LogGood Or LogBad Then Set_LOGFOLDER

If Do_WebSubmit Then WebSubmit(CLIENTSTATE)

End If

COLLECTMSG "CleanUp","Successfully got to the end",ErrorCode

Debug("********** CleanUp Objects ***********")

Set oHTTP = Nothing

Set objEmail = Nothing

Set colServiceList = Nothing

Set colComputers = Nothing

Page 66: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

Set fsCCR = Nothing

Set oWMIService = Nothing

Set objComputer = Nothing

Set objService = Nothing

Set objFolder = Nothing

Set ColFiles = Nothing

Set ofile = Nothing

Set objWMIService = Nothing

Set colCLIPropsList = Nothing

Set objWMIServiceCLI = Nothing

Set PureString = Nothing

Set oEnv = Nothing

Set colshares = Nothing

Set oReg = Nothing

Set oClientComponents = Nothing

Set oCPAppletMgr = Nothing

Set oSMSClient = Nothing

Set oCache = Nothing

Set oUIResManager = Nothing

Set objGroup = Nothing

Set objSysInfo = Nothing

Set objNetwork = Nothing

Set WSHShell = Nothing

Set objSysInfo = Nothing

Set objFSO = Nothing

Set oLocator = Nothing

Debug("********** End ***********")

Debug("ErrorCode = " & ErrorCode)

If ErrorCode = "doRunCheck" Then Wscript.Quit "12Hour"

Page 67: Web viewOn ERROR Resume Next. Dim objWMIService, oWMIService, oServices. Dim ADSiteName. Dim oUIResManager. Dim oCache, CacheSize. Dim SiteName,SiteCode,GUID,Version

wscript.quit ErrorCode

End Sub