|  |  | 
ICC Home / Members / Meetings / Peer Support / Documentation / Projects
| Login ScriptsReturn to IT/SA Services Documentation: Active Directory | Updates to handle Vista and Windows 7 (December 2009)In mid-December of 2009, Andrew Carey made some changes, mostly to how printers get
		mapped, but also in the basic means for kicking-off the login script so it runs differently on The only other login script change was the addition of a call to EnumMappings.vbs Further Updates to address issues with multi-user machines (February 25, 2010)Previously, the IF-Co-Managed User GPO called CheckOS.vbs which determined the users 
 In this latest revision, Andrew modified the scheduled task name to "IFAS Login Script Andrew also simplified the login script process by combining the CheckOS.vbs and OverviewAll IFAS users run a unified Login Script.  The script is located on each domain controller 
 this printer script was revamped considerably by Andrew Carey in December 2009. Regarding the logon scripts, lets say we have a user named gogators who is in the CALS people OU.  ad.ufl.edu/UF/Groups/AutoGroups/_IFAS-CALS-USERS_autoGS In addition this user is a member of the following groups: ad.ufl.edu/UF/Departments/IFAS/-Co-Managed/Campus/CALS/Groups/IF-CALS-AP ad.ufl.edu/UF/Departments/IFAS/-Co-Managed/Campus/FSHN/Groups/IF-FSHN-Support For this user four login scripts would execute: \\ad.ufl.edu\netlogon\ifas\cals\user\gogators.vbs \\ad.ufl.edu\netlogon\ifas\cals\_IFAS-CALS-USERS_autoGS.vbs \\ad.ufl.edu\netlogon\ifas\cals\IF-CALS-AP.vbs \\ad.ufl.edu\netlogon\ifas\FSHN\IF-FSHN-Support.vbs As you can see the location of the login scripts is based on the location Detailed Run-throughThe first few lines set up objects that are needed throughout the rest of the script 
On Error Resume Next
Set objNetwork = CreateObject("Wscript.Network")
Set objShell = CreateObject("WScript.Shell")
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
'*** Needed for InIFAS query
Const ADS_SCOPE_SUBTREE = 2
The next block of code is a pause that waits until the username variable is populated. 
UserName = ""
Do While UserName = ""
    UserName = objNetwork.UserName
    Wscript.Sleep 10
Loop
On Error Goto 0
The following section converts from the Gatorlink name to the distinquished name (DN) 
DNQuery = "SELECT distinguishedName FROM 'LDAP://DC=ad, DC=ufl,DC=edu' where CN='" & UserName & "'"
Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "ADSDSOObject"
Conn.Open "ADs Provider"
Set rs = Conn.Execute(DNQuery)
Username = rs.Fields(0)
Set objUser = GetObject("LDAP://" & Username)
The next section checks whether a computer object is in the IFAS OU 
InIFAS = 0
Set objCOmmand.ActiveConnection = Conn
objCommand.CommandText = _
    "Select ADsPATH from 'LDAP://ou=ifas,ou=departments,ou=uf,DC=ad,DC=ufl,DC=edu' " _
        & "where objectClass='computer' AND name='" & Computer & "'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30 
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
objCommand.Properties("Cache Results") = False 
Set objRecordSet = objCommand.Execute
If NOT (objRecordset.BOF AND objRecordset.EOF) Then
    objRecordSet.MoveFirst
    result = objRecordSet.Fields("ADsPATH").Value
    if UCase(Right(result,45)) = "IFAS,OU=DEPARTMENTS,OU=UF,DC=AD,DC=UFL,DC=EDU" then
        InIFAS = 1
    End If
End if
The following section disables user access to the VSS previous versions tab so multiple users objShell.Run "REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer /v NoPreviousVersionsRestore /t REG_DWORD /d 1 /f" [Note: the script used to install a spyware blocklist at this point but that was commented out '***Spyware Blocklist '***Create as GPO If InIFAS then 'objShell.Run "regedit.exe /S \\ad.ufl.edu\NETLOGON\IFAS\ie-ads.reg" objShell.Run "\\ad.ufl.edu\NETLOGON\IFAS\Lsclient.exe lansweeper.ifas.ufl.edu",0 End If This action line of this script has been commented out and ePO is no longer pushed, but it begins 
If Left(Username,9) <> "CN=IF-ADM" then
	'***Install EPO Agent
	on error resume next
	If InIFAS then
          Version = objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates\ePolicy Orchestrator\Application Plugins\EPOAGENT3000\Version")
	  If Version <> "4.0.0.1345" then
	    If Version <> "4.0.0.1444" then
	      Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
	      If FileSystem.FileExists("\\IF-SRV-EPO.ad.ufl.edu\EPO-Installs$\" & objNetwork.ComputerName & ".txt") Then
		Set objFile = FileSystem.OpenTextFile("\\IF-SRV-EPO.ad.ufl.edu\EPO-Installs$\" & objNetwork.ComputerName & ".txt", 8)
	      Else
		Set objFile = FileSystem.CreateTextFile("\\IF-SRV-EPO.ad.ufl.edu\EPO-Installs$\" & objNetwork.ComputerName & ".txt", True)
	      End If
	      objFile.WriteLine Now & "," & Version & "," & objNetwork.Username 
	      objfile.Close
'*	      objShell.Run "\\ad.ufl.edu\NETLOGON\IFAS\UFAD_ePOAgent-36HF10.exe /INSTALL=AGENT /FORCEINSTALL /SILENT"
	    End If
	  End If
	End If
	on error goto 0
Then the printer installation script is run--except for IF-ADMx logons. '***Runs Printer Installation Script objShell.Run Chr(34) & "\\ad.ufl.edu\netlogon\IFAS\printers.vbs" & Chr(34),0,FALSE End If The following section was temporarily placed to assist with the transition to using 'Deletes Old Listserv Cookie objShell.Run Chr(34) & "\\ad.ufl.edu\netlogon\IFAS\DeleteCookie.vbs" & Chr(34),0,FALSE This next major section is the portion of the script that determines the user's group memberships 
'***Determines group membership and builds path
Dim arrGroup()
Dim arrOU()
arrMemberOf = objUser.GetEx("memberOf")
For each Group in arrMemberOf
	CN = Split (Group, ",OU=")
	If ubound(CN) <> 0 then
		If CN(ubound(CN)-2) = "IFAS" Then
			If CN(ubound(CN)-3) <>"-Central-IT" Then
				If Left(CN(ubound(CN)-3),7) = "CEODIST" then
					redim Preserve arrGroup(Counter)
					arrGroup(Counter) = CN(ubound(CN)-3) & "\" & CN(ubound(CN)-4) & "\" & Right(CN(0),(Len(CN(0))-3))
					Counter=Counter+1
				Else
					On Error Resume Next
					Set objOUCheck = GetObject("LDAP://OU=" & CN(ubound(CN)-4) & ", OU=" & CN(ubound(CN)-3) & ", OU=IFAS, OU=People, OU=UF, DC=ad, DC=ufl, DC=edu")
					If err.number <> "0" then
						redim Preserve arrGroup(Counter)
						arrGroup(Counter)= CN(ubound(CN)-3) & "\" & Right(CN(0),(Len(CN(0))-3))
						Counter=Counter+1
					Else
						redim Preserve arrGroup(Counter)
						arrGroup(Counter) = CN(ubound(CN)-3) & "\" & CN(ubound(CN)-4) & "\" & Right(CN(0),(Len(CN(0))-3))
						Counter=Counter+1
					End If
					On Error goto 0
				End If
			End If
		ElseIf CN(UBound(CN)-1) = "Groups" and Left(CN(0),9) = "CN=_IFAS-" then
			AutoGroup = split (CN(0), "-USERS_autoGS")
			If Len(AutoGroup(0)) <> "8" Then
				redim Preserve arrGroup(Counter)
				arrGroup(Counter) = Replace(Right(autogroup(0), (Len(AutoGroup(0))-9)), "-", "\") & "\" & Right(CN(0),(Len(CN(0))-3))
				Counter=Counter+1
			End If
		End If
	End If
Next
Once the arrays of groups and corresponding script paths have been created, the various group logon scripts ' ***Executes group logon scripts For each group in ArrGroup Group = Replace(Group, ". ","") GroupScript = "\\ad.ufl.edu\NETLOGON\IFAS\" & group & ".VBS" If objFileSystem.FileExists(GroupScript) Then objShell.Run Chr(34) & GroupScript & Chr(34) End If Next Then the any specific script for that user is also run. ' ***Executes user logon scripts OU = Split (UserName, ",OU=") If OU(ubound(OU)-2) = "IFAS" Then If Left(OU(ubound(OU)-4), 3) <> "CN=" then UserScript = "\\ad.ufl.edu\NETLOGON\IFAS\" & OU(ubound(OU)-3) & "\" & OU(ubound(OU)-4) & "\User\" & objNetwork.Username & ".VBS" Else UserScript = "\\ad.ufl.edu\NETLOGON\IFAS\" & OU(ubound(OU)-3) & "\User\" & objNetwork.Username & ".VBS" End If If objFileSystem.FileExists(UserScript) Then objShell.Run Chr(34) & UserScript & Chr(34) End If End If The next line is a change which Andrew Carey inserted during the December 2009 script update objShell.Run Chr(34) & "\\ad.ufl.edu\netlogon\IFAS\EnumMappings.vbs" & Chr(34),0,FALSE This last large section is excluded for service accounts. This part of the code checks for a 
If Left(Username,6) <> "CN=IF-" then
	On Error Resume Next
	err.number = ""
	intNoticeDays = 14
	dtmADPwdSet = objUser.PasswordLastChanged
	dtmPwdSetDate = PwdSetDate(dtmADPwdSet)
	dtmPwdSetTime = PwdSetTime(dtmADPwdSet)
	dtmGLPwdExpired = objUser.Get("GLPwdExpired")
	dtmGLPwdExpiredDate = datevalue(left(dtmGLPwdExpired,10))
	If isdate(dtmGLPwdExpiredDate) Then
		strGLPwdExpiredValid = "true"
	Else
		strGLPwdExpiredValid = "false"
	End If
	If dtmGLPwdExpired = "" then
		wscript.echo "Password expiration not synced. Expiration time will be synced the next time password is changed."
	End if
	If strGLPwdExpiredValid = "true" then
		dtmGLPwdExpDate = left(objUser.GLPwdExpired,10)
		dtmGLPwdExpTime = right(objUser.GLPwdExpired,8)
		dtmToday =  FormatDateTime(Now(),2)
		dtmExpires = DateValue(FormatDateTime(Now(),2))-DateValue(Left(dtmGLPwdExpired,10))
		dtmExpiredays = datediff("d",now,dtmGLPwdExpDate)
	Else
		If Err.Number <> 0 Then
			If Err.Number = "-2147463155" Then
				dtmGLPwdExpired = "Not Set"
			Else
				dtmGLPwdExpired = "Unknown Error: " & Err.Number
			End If
		End If
	End If
	intIcon = VBInformation
	If (dtmExpiredays = 0)  and (strGLPwdExpiredValid = "true") then
		PwdChangeNow ()
		intIcon = vbCritical
	Else
		If (dtmExpiredays <= intNoticeDays) and (strGLPwdExpiredValid = "true")  then
			PwdChangeSoon ()
		End If
	End If
	
	Function PwdSetDate (varADPwdSet)
		dtmPwdSetYear  = datepart("yyyy",varADPwdSet)
		dtmPwdSetMonth = datepart("m",varADPwdSet)
		dtmPwdSetDay   = datepart("d",varADPwdSet)
		PwdSetDate =  dtmPwdSetMonth & "/" & dtmPwdSetDay &"/" & dtmPwdSetYear
	End Function
	Function PwdSetTime (dtmADPwdSet)
		dtmPwdSetHour  = datepart("h",objUser.PasswordLastChanged)
		dtmPwdSetMin   = datepart("n",objUser.PasswordLastChanged)
		dtmPwdSetSec   = datepart("s",objUser.PasswordLastChanged)
		PwdSetTime =  dtmPwdSetHour & ":" & dtmPwdSetMin &":" & dtmPwdSetSec
	End Function
	Function PwdChangeSoon ()
		strMsg = "Your GatorLink password will expire in " &  dtmExpiredays & " days on: " & dtmGLPwdExpDate & " at " & dtmGLPwdExpTime
		strMsgPwdSetTime= "You last set your GatorLink password on " & dtmPwdSetDate & " at " & dtmPwdSetTime
		strResetPass="Would you like to reset your password now at my.ufl.edu?"
		strMsgfull = strMsg & vbCrLf & strMsgPwdSetTime & vbCrLf &vbCrLf &  strResetPass
		intBoxType=vbYesNo + intIcon + vbDefaultButton2
		varMsgBox  = objShell.Popup(strMsgfull,10,"Password Expiration",intBoxType)
		Select Case varMsgBox
			Case vbYes
				objShell.Run "http://my.ufl.edu/psp/ps/EMPLOYEE/UF_PA_SSL/c/MAINTAIN_SECURITY.CHANGE_PASSWORD.GBL"
			Case vbNo
				strMsgRemind = "Remember that you will need to reset your password at http://my.ufl.edu before it expires"
				varMsgBox  = objShell.Popup(strMsgRemind,10,"Reminder",vbInformation)
	    End Select
	End Function
	Function PwdChangeNow ()
		strMsg = "Your GatorLink password has expired! You will be redirected to my.ufl.edu to reset it."
		varPopupBox = objShell.Popup(strMsg,3,"redirecting to my.ufl.edu...", vbExclamation)
		objShell.Run "http://my.ufl.edu/psp/ps/EMPLOYEE/UF_PA_SSL/c/MAINTAIN_SECURITY.CHANGE_PASSWORD.GBL"
	End Function
End If
 | 
last edited 8 March 2009 by Steve Lasley