One of my customers has an extensive lab environment with multiple forests, domains and workgroup computers. SMS 2003 was deployed to help manage the configuration of all these different systems. Between the locked down security settings (no C$, ADMIN$ shares!) and the number separate forest/domains/workgroups involved the ability to "push" the advanced client to desktops is no longer an option. After meeting with the client last week we decided to configure a logon script to install the SMS client. The script and associated files (CCMSETUP.EXE, CLIENT.MSI, SMSCLIENT.VBS) were placed in a folder named SMS in the NETLOGON share of the Domain Controllers. We then configured the LOGON SCRIPT properties of the Domain Administrator account to run the SMSSTARTUP.VBS script shown below to install the client.
Now for a quick run through of the code.
SMSSTARTUP.VBS
'**********************************************' SCRIPT: SMSStartup.VBS' AUTHOR: ' DATE: 10/16/2008' VERSION: 2.0' PURPOSE: Check for thr presence of the SMS client,' if not installed, copy files from the ' network to c:\smsclientinstall and install' USAGE: SMSStartup.vbs' 'REVISION: 10/17/2008 added check' to make sure files and folders exist ' before moving to next step in script' '**********************************************OPTION EXPLICITOn Error Resume Next
Dim oSMSClient, intButton,objWshShell,sFolder, objFSO, sCurrentPathDim oExec
Set objFSO = CreateObject("Scripting.FileSystemObject")Set objWshShell = WScript.CreateObject("WScript.Shell")Set oSMSClient = CreateObject ("Microsoft.SMS.Client")
'Folder to copy SMS install files to sFolder = "C:\SMSCLIENTINSTALL"
WScript.Sleep 15000
'Build path to SMS filessCurrentPath = objWshShell.ExpandEnvironmentStrings("%LOGONSERVER%")sCurrentPath = sCurrentPath & "\NETLOGON\SMS"
If Err.Number <> 0 Then 'change to zero when testing complete 'Clear error buffer err.clear objWshShell.LogEvent 2, "SMS Client is not installed, installing now." intButton=objWshShell.Popup("Installaing SMS Client software on this computer in the background",5,"SMS Client Software Installation",1) 'wscript.echo intbutton If intButton = 2 Then objWshShell.LogEvent 1, "SMS Client installation was cancelled by the user" wscript.quit End If
'copy files to local computer and begin client installation Do While objFSO.FolderExists(sFolder) <> TRUE CreateFolder sFolder WScript.Sleep 10000 Loop
'copy files 'Check for files before continuing to next file Do While objFSO.FileExists(sFolder & "\SMSCLIENT.VBS") <> TRUE objFSO.CopyFile sCurrentPath & "\SMSCLIENT.VBS", sFolder & "\", TRUE wscript.sleep 2000 Loop Do While objFSO.FileExists(sFolder & "\Client.msi") <> TRUE objFSO.CopyFile sCurrentPath & "\client.msi", sFolder & "\", TRUE wscript.sleep 2000 Loop Do While objFSO.FileExists(sFolder & "\ccmsetup.exe") <> TRUE objFSO.CopyFile sCurrentPath & "\ccmsetup.exe", sFolder & "\", TRUE wscript.sleep 2000 Loop 'now run sms client install Set oExec = objWshShell.Exec("wscript.exe " & sFolder & "\SMSCLIENT.VBS")
Do While oExec.Status = 0 WScript.Sleep 1000 Loop
'delete the folder by adding command to the Runonce key 'CMD.exe /c "RD /s /q c:\SMSCLIENTINSTALL" objWshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\SMS", "CMD.EXE /c " & CHR(34) & "RD /s /q C:\SMSCLIENTINSTALL" & CHR(34), "REG_SZ"
Else 'Computer has client, quit wscript.quitEnd If
Function CreateFolder(folder) Dim ofso, f Set ofso = CreateObject("Scripting.FileSystemObject") Set f = ofso.CreateFolder(folder) CreateFolder = f.PathEnd Function
Sub DeleteAFolder(filespec) Dim ofso Set ofso = CreateObject("Scripting.FileSystemObject") ofso.DeleteFolder filespec,TRUEEnd Sub