
A simple vbscript I use for manual client installation. It does some basic quick checks and fixes before begining an install. One could feasibly use this for health checking, but it’s not nearly as robust as my actual logon framework or other scripts from people like Jason Sandys or Dan Thompson.
The variables strAdmin (local admin service account), strCcmSetup (path to folder with the ccmsetup.exe), and strArguement (install string) need to be defined before running the script. It’s worth mentioning that strCcmSetup is just the path to ccmsetup.exe, there is no need to actually type ccmsetup.exe into the path and it’s best if you don’t since I didn’t bother writing anything in to verify if it is or isn’t. The script will auto append the executable to that variable so ccmsetup.exe in the path will give you ccmsetup.execcmsetup.exe
'Author Daniel Belcher ||
'CCMsetup Function ||
'Date 2/11/2011 rev 5/20/2011 ||
'==================================||
'|Objects, Variables, and Constants ********************************************
'=============================================================================||
'|| Non-Standard Installer Variables - Please define them ||
'|| Admin Account
strAdmin = "domain\user"
'|| Path to ccmsetup.exe
strCcmSetup = "\\path\where\ccmsetup.exe\resides\"
'|| Install string
strArguement = "/noservice SMSSITECODE=ABC SMSSLP=SERVER.ADDRESS " _
& "SMSFSP=SERVER.ADDRESS"
' ||
'=============================================================================||
Const DEBUGMSG = False 'Boolean to use for testing False = Silent True = Verbose
Const ForAppending = 8
Dim oWShell
Set oWShell = CreateObject("WScript.Shell")
Dim oFSo
Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim oNet
Set oNet = CreateObject("Wscript.Network")
ComputerName = oNet.ComputerName
Dim Target
Target = "."
Dim oWMISvc
Set oWMISvc = GetObject("winmgmts:\\"&Target)
'|Main Run *******************************************************************||
'=============================================================================||
WriteLog "Starting "&Wscript.Scriptname&" on "&ComputerName,2
PreReq
CCMSetup
Report
'SubRoutines *****************************************************************||
'=============================================================================||
Sub WriteLog(msg,mtype)
'Subroutine for writing the log
logname = wscript.scriptname&".log"
if not oFSo.FileExists(logname) then
oFSo.CreateTextFile(logname)
end if
msgline = "<![LOG["&msg&"]LOG]!><time="&""""&DatePart("h",Time)
msgline = msgline &":"&DatePart("n",Time)&":"&DatePart("s",Time)
msgline = msgline &".000+0"""&" date="""&Replace(Date,"/","-")
msgline = msgline &""""&" component="""&WScript.ScriptName
msgline = msgline &""" context="""" type="""&mtype
msgline = msgline &""" thread="""" file="""&WScript.ScriptName& """>"
Set oLogFile = oFSo.OpenTextFile(logname, ForAppending, True)
oLogFile.WriteLine msgline
oLogFile.Close
if DEBUGMSG then wscript.echo msg&" "& mtype
End Sub
'*******************************************************************************
Sub SvcStart(service)
'Attempts to start a service
Set WMIServices = oWMISvc.ExecQuery _
("Select * from Win32_Service where name = '"&service&"'")
For Each item in WMIServices
if lcase(item.startmode) <> "automatic" then
item.ChangeStartMode("Automatic")
end if
start = item.startservice()
wscript.sleep 4000
if start <> 0 Then
WriteLog "ERROR: Failed to start the "&service&" Service, " _
& "investigation required", 3
wscript.quit(0)
else
WriteLog "Succesfully started "& service &" Service",1
end if
next
End Sub
'|Functions ******************************************************************||
'=============================================================================||
Function PreReq
'Prerequisite check for client installation
Set WMIServices = oWMISvc.ExecQuery _
("Select * from Win32_Service")
strService = "lanmanworkstation"
regAdminSPath = "HKLM\SYSTEM\CurrentControlSet\services\LanmanServer\" _
& "Parameters\"
For Each item in WMIServices
if lcase(item.name) = strService then
if lcase(item.state) <> "running" then
writelog "Warning: "&strService&" was not running, " _
& "attempting to start...", 2
SvcStart strService
else
writelog strService& " was found running, OK", 1
end if
end if
next
if not oFSO.FolderExists("\\"&computername&"\admin$") then
WriteLog "Warning: Admin shares not available, attempting to add " _
& "registry key...", 2
On Error Resume Next
oWShell.RegWrite regAdminSPath & "AutoShareWKS", 1, "REG_SZ"
if err.Number <> 0 then
WriteLog "ERROR: "®AdminSPath&"AutoShareWKS, 1 failed to write, or " _
&"already exists.", 3
else
WriteLog regAdminSPath&"Notice: AutoShareWKS, 1 written succesfully. " _
& " Restart required to take effect.", 2
end if
Wscript.Echo "AutoShareWKS key was written to: " &vbcrlf _
®AdminSPath & vbcrlf _
&"Please restart the machine, and rerun this script"
else
WriteLog "Admin$ shares found, and working.", 1
end if
Set AdminCheck = GetObject("WinNT://" & oNet.ComputerName _
& "/Administrators,group")
if AdminCheck.IsMember("WinNT://"& strAdmin) then
WriteLog "User "&strAdmin&" found in Local Adminstrators group", 1
else
WriteLog "Warning: User "&strAdmin&" not found in Local Administrators group",2
on Error Resume Next
AdminCheck.Add("WinNT://"&strAdmin)
if Err.Number <> 0 then
WriteLog "ERROR: Unable to add "&strAdmin&" to the Local Administrators group",3
Wscript.Echo "Unable to add "&strAdmin&" to local Admins." & vbcrlf _
&"Please do so manually and rerun this script."
Wscript.Quit(0)
end if
end if
End Function
'*******************************************************************************
Function CCMSetup
'Client detection and installation
Set WMIServices = oWMIsvc.ExecQuery _
("Select * from Win32_Service where name ='ccmexec'")
boorun = true
for each objservice in WMIServices
strservice = lcase(objservice.name)
if strservice = "ccmexec" then boorun = "False"
next
if not boorun then
For Each service in WMIServices
if lcase(service.state) <> "running" then
svcStart "ccmexec" 'Attempt to start service if stopped
WriteLog "Warning: CcmExec service found, but was not running, " _
& "attempting to start...", 2
end if
next
WriteLog "SCCM client service, CcmExec found, closing script", 1
exit function
end if
if boorun then
oWShell.run strCcmsetup&"ccmsetup.exe " & strArguement
WriteLog "CcmSetup has begun using: ccmsetup.exe"& strArguement,1
end if
End Function
'******************************************************************************
Function Report
If DEBUGMSG then msgbox "Complete" 'Set for popup on script complete
End Function
'End *************************************************************************||
'=============================================================================||
As has become my standard, the logs are written in a markup that works with trace32.