We have a system in place that displays a Blank Screen and logo in place whilst loading your network drives and profile.
The reason for this is that we simply want to ensure the PC has had enough time to load all the services and applications on your computer prior to giving you your desktop.
This system provides that we can have a single logon script set through GPO at the root level of our domain and then INDIVIDUAL mappings per site and country.
This guide assumes that you have first setup Windows Server 2008 and configured it for Active Directory.
In a production environment please consult Technet for best practise, see below links:
In each sites OU create a group GG-MAP-<siteouname>
GG = Global Group
MAP = Mapping Group
<siteouname> = OU Name for location
Its important that this is the format I use, and as such things will need to be modified to help. a word of warning, most of the scripts I will provide are built with a naming standard in place for large enterprises. these can be adapted for others but it is difficult.
My Standard is a 6 character code with the format: <CITY><BUILDING>
example: TKY123 or SYD100
Traditionally i use the IATA Airport Code closest to the Site AVAILABLE HERE or ..
the telco's site mnemonic
<SITECODE>.bat
@echo off
:COPY
xcopy "%logonserver%\NETLOGON\ifmember.exe" "c:\" /d /v /c /q /h /r >nul
:HIDrive
net use * /delete /yes >nul
set homedrive=\\<siteserver>\%username%$ >nul
set profiledir=\\<siteserver>\%username%$$ >nul
net use h: \\<siteserver>\%username%$ > nul
net use i: \\<siteserver>\info >nul
goto GDrives >nul
:GDrives
c:\ifmember.exe "<domain>\<sitecode>-<group>" >nul
net use g: \\<siteserver>\<group>$ >nul
:end
<logon.vbs>
'==========================================================================
'
' NAME: Logon.vbs
'
' AUTHOR: Greg G. Green
' CONTACT: diekittay[at]gmail.com
' CREATED: 14/11/2009
' LAST MODIFIED: 20/11/2009
'
' NOTICE: If you update this and find it to be useful, credit where credits'
' Due and please forward me a copy
'
' COMMENT: Logon Script
'
'==========================================================================
Option Explicit
On Error Resume Next
'==========================================================================
'Get logonserver name using WSH Shell Object
'==========================================================================
Dim sLogonSrv, sUnkLS
Dim oWshShell, oWshShellEnv
sUnkLS = "Unable to determine Logonserver"
Err.Clear
Set oWshShell = WScript.CreateObject("Wscript.Shell")
Set oWshShellEnv = oWshShell.Environment("VOLATILE")
sLogonSrv = oWshShellEnv("LOGONSERVER")
If sLogonSrv = "" Then
sLogonSrv = sUnkLS
End If
If Err.Number <> 0 Then
Err.Clear
WScript.Quit
End If
'==========================================================================
'Setup user message output window using IE
'==========================================================================
Dim sTitle, sPage, sContent
Dim sScH, sScW, sFJImg, sImg, sRndImg
Dim oDialogWindow
Set oDialogWindow = CreateObject("InternetExplorer.Application")
'Set initial window parameters
With oDialogWindow
.FullScreen=1
.menubar=0
.toolbar=0
.Resizable=0
.statusBar=0
.Navigate "about:blank"
End With
sScH = oDialogWindow.Height
sScW = oDialogWindow.Width
'Resize and center
With oDialogWindow
.height=350
.width=400
.top=(sScH-350)/2
.left=(sScW-400)/2
End With
]sTitle = "<INSERT COMPANY NAME>"
sPage = "JavaScript:'<html><head>" _
& "<title>" & sTitle & "</title></head><body scroll=no bgcolor=#ffffff=></body></html>'"
sImg = "logo.jpg"
sFJImg = "<center><br><br><br><br><img src=""FILE:" & sLogonSrv & "\NETLOGON\IMG\" _
& sImg & """ width=""440"" height=""272""></center><br><font color=#ED1C24>"
oDialogWindow.navigate sPage
' wait for the page to be fully initialized:
'Do
'
' Err.Clear
'
'Loop While oDialogWindow.ReadyState<>4
If Err.Number <> 0 Then
Err.Clear
WScript.Quit
End If
' show page:
oDialogWindow.visible = 1
' now you can dynamically change content: oDialogWindow.document.body.innerHTML = "<h3><center>" & sContent & "</center></h3>"
'==========================================================================
'Determine OS using WMI
'==========================================================================
Dim sWXPP, sW2KP, sW2KS, sW2KAS, sW2KDS, sW2K3S, sW2K3W, sW2K3E, sW2K8S, sW2K8E, sWVU, sWVE, sWVP, sW7U, sW7E, sW7P, sUnkOS, sWbemOpSys
Dim oWbemServices
Dim cOperatingSystems
Dim oInstance
sWXPP = "Microsoft Windows XP Professional"
sW2KP = "Microsoft Windows 2000 Professional"
sW2KS = "Microsoft Windows 2000 Server"
sW2KAS = "Microsoft Windows 2000 Advanced Server"
sW2KDS = "Microsoft Windows 2000 Datacenter Server"
sW2K3S = "Microsoft(R) Windows(R) Server 2003, Standard Edition"
sW2K3W = "Microsoft(R) Windows(R) Server 2003, Web Edition"
sW2K3E = "Microsoft(R) Windows(R) Server 2003, Enterprise Edition"
sW2K8S = "Microsoftr Windows Serverr 2008 Standard"
sW2K8E = "Microsoftr Windows Serverr 2008 Enterprise"
sWVU = "Microsoft Windows Vista Ultimate"
sWVE = "Microsoft Windows Vista Enterprise"
sWVP = "Microsoft Windows Vista Professional"
sW7U = "Microsoft Windows 7 Ultimate"
sW7E = "Microsoft Windows 7 Enterprise"
sW7P = "Microsoft Windows 7 Professional"
sUnkOS = "OS Unknown or NOT supported"
Set oWbemServices = GetObject("winmgmts:")
Set cOperatingSystems = oWbemServices.InstancesOf("Win32_OperatingSystem")
On Error Resume Next
For Each oInstance in cOperatingSystems
sWbemOpSys = oInstance.Caption
If sWbemOpSys = "" Then
sWbemOpSys = sUnkOS
End If
Next
Select Case sWbemOpSys
Case sWXPP
Case sW2KP
Case sW2KS
Case sW2KAS
Case sW2KDS
Case sW2K3S
Case sW2K3W
Case sW2K3E
Case sW2K8S
Case sW2K8E
Case sWVU
Case sWVE
Case sWVP
Case sW7U
Case sW7E
Case sW7P
Case Else
sContent = sFJImg & "<h3><center>OS Not Supported:" _
& "<br><br>" & sWbemOpSys & "</center></h3>"
oDialogWindow.document.body.innerHTML = sContent
WScript.Sleep 1000
'Quit script if OS not XP, 2000, 2003, Vista, 2008 or Windows 7 until legacy OS detection is added
oDialogWindow.Quit
WScript.Quit
End Select
On Error GoTo 0
'==========================================================================
'Gather information from WSH Network object
'==========================================================================
Dim sUserName, sComputerName, sDomainName, sUserCN, sUserDN
Dim sFName, sLName
Dim oWshNetwork
Set oWshNetwork = WScript.CreateObject("WScript.Network")
sUserName = oWshNetwork.UserName
sComputerName = oWshNetwork.ComputerName
sDomainName = oWshNetwork.UserDomain
sUserDN = GetDN(sUserName)
On Error Resume Next
sFName = Right(sUserCN,Len(sUserCN)-InStr(sUserCN,","))
sLName = Left(sUserCN,InStr(sUserCN,",")-1)
On Error GoTo 0
'==========================================================================
'Set Greeting
'==========================================================================
Dim sHour, sGreet
sHour = DatePart("H",Now)
Select Case sHour
Case 0,1,2,3,4,5,6,7,8,9,10,11
sGreet = "Good Morning"
Case 12,13,14,15,16
sGreet = "Good Afternoon"
Case 17,18,19,20,21,22,23
sGreet = "Good Evening"
End Select
'Display gathered information
'WScript.Echo "User:" & vbtab & vbtab & sUserName & vbCrLf & _
' "Computer:" & vbtab & sComputerName & vbCrLf & _
' "Domain:" & vbtab & vbtab & sDomainName & vbCrLf & _
' "User CN: " & vbtab & vbtab & sUserCN & vbCrLf & _
' "User DN: " & sUserDN
sContent = sFJImg & "<h3><center>" & sGreet & " " & sFName & " " & sLName _
& "<br>" & "Welcome to the " & sDomainName & " Domain</center></h3>"
oDialogWindow.document.body.innerHTML = sContent
WScript.Sleep 1500
'==========================================================================
'Map Network Drives
'==========================================================================
If sWbemOpSys = sW2KS Or sWbemOpSys = sW2KAS Or sWbemOpSys = sW2KDS Or _
sWbemOpSys = sW2K3S Or sWbemOpSys = sW2K3W Or sWbemOpSys = sW2K3E Or _
sWbemOpSys = sW2K8S Or sWbemOpSys = sW2K8E Then
sContent = sFJImg & "<h3><center>Server Detected, Exiting Logon Script..." _
& "</center></h3>"
oDialogWindow.document.body.innerHTML = sContent
WScript.Sleep 1000
oDialogWindow.Quit
WScript.Quit
Else
Dim oUsr, oGrp
Dim pos1, pos2, Msg
Dim sGroup, sMnemonic
'Change dialog text
sContent = sFJImg & "<h3><center>Mapping Network Drives..." & "</center></h3>"
oDialogWindow.document.body.innerHTML = sContent
WScript.Sleep 1000
Set oUsr = GetObject("LDAP://" & sUserDN)
For Each oGrp In oUsr.Groups
sGroup = ucase(oGrp.Name)
pos1 = InStr(sGroup,"GG-MAP-")
If pos1<>0 and pos1<>"" Then
sMnemonic = UCase(Right(sGroup, 6))
If sMnemonic <> "" Then
On Error Resume Next
Err.Clear
oWshShell.Run sLogonSrv & "\NETLOGON\SITE\" & sMnemonic & ".bat", 0, True
If Err.Number <> 0 Then
Msg = MsgBox("Unable to locate script for network drive mapping. Please inform your System Administrator.", 64, "File not found (" & sMnemonic & ".bat)")
Err.Clear
End If
Else
'Msg = MsgBox("Unable to locate group for network drive mapping. Please inform your System Administrator.", 64, "Group not found")
End If
On Error GoTo 0
Exit For
End If
Next
Set oUsr = Nothing
Set oGrp = Nothing
On Error Resume Next
End If
oDialogWindow.Quit
'==========================================================================
'Obtain user distinguishedName from LoginID information using ADO
'==========================================================================
Function GetDN(logonID)
Dim sADsPath, sQuery
Dim oADsRootDSE, oADsDomain
Dim oADOConn, oADOCmd, oRS
On Error Resume Next
GetDN="Unknown"
sADsPath = "LDAP://RootDSE"
Set oADsRootDSE = GetObject(sADsPath)
Set oADsDomain = GetObject("LDAP://" & oADsRootDSE.Get("defaultNamingContext"))
sQuery="Select sAMAccountname,cn,distinguishedname from '" & _
oADsDomain.ADSPath & "' Where objectcategory='person' AND objectclass='user'" & _
" AND sAMAccountName='" & logonID & "'"
Set oADOConn=Createobject("ADODB.Connection")
Set oADOCmd=CreateObject("ADODB.Command")
oADOConn.Provider="ADSDSOObject"
oADOConn.Open
Set oADOCmd.ActiveConnection=oADOConn
Set oRS = oADOConn.Execute(sQuery)
Do While Not oRS.EOF
sUserCN = oRS.Fields("cn")
GetDN = oRS.Fields("distinguishedname")
oRS.movenext
Loop
oRS.Close
oADOConn.Close
Set oADOConn=Nothing
Set oADOCmd=Nothing
Set oADsRootDSE=Nothing
Set oRS=nothing
End Function
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.
We have a system in place that displays a Blank Screen and logo in place whilst loading your network drives and profile.
The reason for this is that we simply want to ensure the PC has had enough time to load all the services and applications on your computer prior to giving you your desktop.
This system provides that we can have a single logon script set through GPO at the root level of our domain and then INDIVIDUAL mappings per site and country.
This guide assumes that you have first setup Windows Server 2008 and configured it for Active Directory.
In a production environment please consult Technet for best practise, see below links:
Design Active Directory:
Document - http://technet.microsoft.com/en-us/library/bb727085.aspx
WebCast - http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&EventID=1032317872&CountryCode=US
Implement Active Directory: http://technet.microsoft.com/en-us/library/cc778219(WS.10).aspx
During this script we do the following:
Detect Operating System.
if Client OS - run logon script
if Server OS - exit logon script
Check User for Mapping Distribution Group (GG-MAP-<SITECODE>)
Load <sitecode>.bat
This script is designed and built to enable easy movement of users between sites.
The folder structure is as Follows:
Files:
Usage:
In each sites OU create a group GG-MAP-<siteouname>
GG = Global Group
MAP = Mapping Group
<siteouname> = OU Name for location
Its important that this is the format I use, and as such things will need to be modified to help. a word of warning, most of the scripts I will provide are built with a naming standard in place for large enterprises. these can be adapted for others but it is difficult.
My Standard is a 6 character code with the format: <CITY><BUILDING>
example: TKY123 or SYD100
Traditionally i use the IATA Airport Code closest to the Site AVAILABLE HERE or ..
the telco's site mnemonic
<SITECODE>.bat
<logon.vbs>
'========================================================================== ' ' NAME: Logon.vbs ' ' AUTHOR: Greg G. Green ' CONTACT: diekittay[at]gmail.com ' CREATED: 14/11/2009 ' LAST MODIFIED: 20/11/2009 ' ' NOTICE: If you update this and find it to be useful, credit where credits' ' Due and please forward me a copy ' ' COMMENT: Logon Script ' '========================================================================== Option Explicit On Error Resume Next '========================================================================== 'Get logonserver name using WSH Shell Object '========================================================================== Dim sLogonSrv, sUnkLS Dim oWshShell, oWshShellEnv sUnkLS = "Unable to determine Logonserver" Err.Clear Set oWshShell = WScript.CreateObject("Wscript.Shell") Set oWshShellEnv = oWshShell.Environment("VOLATILE") sLogonSrv = oWshShellEnv("LOGONSERVER") If sLogonSrv = "" Then sLogonSrv = sUnkLS End If If Err.Number <> 0 Then Err.Clear WScript.Quit End If '========================================================================== 'Setup user message output window using IE '========================================================================== Dim sTitle, sPage, sContent Dim sScH, sScW, sFJImg, sImg, sRndImg Dim oDialogWindow Set oDialogWindow = CreateObject("InternetExplorer.Application") 'Set initial window parameters With oDialogWindow .FullScreen=1 .menubar=0 .toolbar=0 .Resizable=0 .statusBar=0 .Navigate "about:blank" End With sScH = oDialogWindow.Height sScW = oDialogWindow.Width 'Resize and center With oDialogWindow .height=350 .width=400 .top=(sScH-350)/2 .left=(sScW-400)/2 End With ]sTitle = "<INSERT COMPANY NAME>" sPage = "JavaScript:'<html><head>" _ & "<title>" & sTitle & "</title></head><body scroll=no bgcolor=#ffffff=></body></html>'" sImg = "logo.jpg" sFJImg = "<center><br><br><br><br><img src=""FILE:" & sLogonSrv & "\NETLOGON\IMG\" _ & sImg & """ width=""440"" height=""272""></center><br><font color=#ED1C24>" oDialogWindow.navigate sPage ' wait for the page to be fully initialized: 'Do ' ' Err.Clear ' 'Loop While oDialogWindow.ReadyState<>4 If Err.Number <> 0 Then Err.Clear WScript.Quit End If ' show page: oDialogWindow.visible = 1 ' now you can dynamically change content: oDialogWindow.document.body.innerHTML = "<h3><center>" & sContent & "</center></h3>" '========================================================================== 'Determine OS using WMI '========================================================================== Dim sWXPP, sW2KP, sW2KS, sW2KAS, sW2KDS, sW2K3S, sW2K3W, sW2K3E, sW2K8S, sW2K8E, sWVU, sWVE, sWVP, sW7U, sW7E, sW7P, sUnkOS, sWbemOpSys Dim oWbemServices Dim cOperatingSystems Dim oInstance sWXPP = "Microsoft Windows XP Professional" sW2KP = "Microsoft Windows 2000 Professional" sW2KS = "Microsoft Windows 2000 Server" sW2KAS = "Microsoft Windows 2000 Advanced Server" sW2KDS = "Microsoft Windows 2000 Datacenter Server" sW2K3S = "Microsoft(R) Windows(R) Server 2003, Standard Edition" sW2K3W = "Microsoft(R) Windows(R) Server 2003, Web Edition" sW2K3E = "Microsoft(R) Windows(R) Server 2003, Enterprise Edition" sW2K8S = "Microsoftr Windows Serverr 2008 Standard" sW2K8E = "Microsoftr Windows Serverr 2008 Enterprise" sWVU = "Microsoft Windows Vista Ultimate" sWVE = "Microsoft Windows Vista Enterprise" sWVP = "Microsoft Windows Vista Professional" sW7U = "Microsoft Windows 7 Ultimate" sW7E = "Microsoft Windows 7 Enterprise" sW7P = "Microsoft Windows 7 Professional" sUnkOS = "OS Unknown or NOT supported" Set oWbemServices = GetObject("winmgmts:") Set cOperatingSystems = oWbemServices.InstancesOf("Win32_OperatingSystem") On Error Resume Next For Each oInstance in cOperatingSystems sWbemOpSys = oInstance.Caption If sWbemOpSys = "" Then sWbemOpSys = sUnkOS End If Next Select Case sWbemOpSys Case sWXPP Case sW2KP Case sW2KS Case sW2KAS Case sW2KDS Case sW2K3S Case sW2K3W Case sW2K3E Case sW2K8S Case sW2K8E Case sWVU Case sWVE Case sWVP Case sW7U Case sW7E Case sW7P Case Else sContent = sFJImg & "<h3><center>OS Not Supported:" _ & "<br><br>" & sWbemOpSys & "</center></h3>" oDialogWindow.document.body.innerHTML = sContent WScript.Sleep 1000 'Quit script if OS not XP, 2000, 2003, Vista, 2008 or Windows 7 until legacy OS detection is added oDialogWindow.Quit WScript.Quit End Select On Error GoTo 0 '========================================================================== 'Gather information from WSH Network object '========================================================================== Dim sUserName, sComputerName, sDomainName, sUserCN, sUserDN Dim sFName, sLName Dim oWshNetwork Set oWshNetwork = WScript.CreateObject("WScript.Network") sUserName = oWshNetwork.UserName sComputerName = oWshNetwork.ComputerName sDomainName = oWshNetwork.UserDomain sUserDN = GetDN(sUserName) On Error Resume Next sFName = Right(sUserCN,Len(sUserCN)-InStr(sUserCN,",")) sLName = Left(sUserCN,InStr(sUserCN,",")-1) On Error GoTo 0 '========================================================================== 'Set Greeting '========================================================================== Dim sHour, sGreet sHour = DatePart("H",Now) Select Case sHour Case 0,1,2,3,4,5,6,7,8,9,10,11 sGreet = "Good Morning" Case 12,13,14,15,16 sGreet = "Good Afternoon" Case 17,18,19,20,21,22,23 sGreet = "Good Evening" End Select 'Display gathered information 'WScript.Echo "User:" & vbtab & vbtab & sUserName & vbCrLf & _ ' "Computer:" & vbtab & sComputerName & vbCrLf & _ ' "Domain:" & vbtab & vbtab & sDomainName & vbCrLf & _ ' "User CN: " & vbtab & vbtab & sUserCN & vbCrLf & _ ' "User DN: " & sUserDN sContent = sFJImg & "<h3><center>" & sGreet & " " & sFName & " " & sLName _ & "<br>" & "Welcome to the " & sDomainName & " Domain</center></h3>" oDialogWindow.document.body.innerHTML = sContent WScript.Sleep 1500 '========================================================================== 'Map Network Drives '========================================================================== If sWbemOpSys = sW2KS Or sWbemOpSys = sW2KAS Or sWbemOpSys = sW2KDS Or _ sWbemOpSys = sW2K3S Or sWbemOpSys = sW2K3W Or sWbemOpSys = sW2K3E Or _ sWbemOpSys = sW2K8S Or sWbemOpSys = sW2K8E Then sContent = sFJImg & "<h3><center>Server Detected, Exiting Logon Script..." _ & "</center></h3>" oDialogWindow.document.body.innerHTML = sContent WScript.Sleep 1000 oDialogWindow.Quit WScript.Quit Else Dim oUsr, oGrp Dim pos1, pos2, Msg Dim sGroup, sMnemonic 'Change dialog text sContent = sFJImg & "<h3><center>Mapping Network Drives..." & "</center></h3>" oDialogWindow.document.body.innerHTML = sContent WScript.Sleep 1000 Set oUsr = GetObject("LDAP://" & sUserDN) For Each oGrp In oUsr.Groups sGroup = ucase(oGrp.Name) pos1 = InStr(sGroup,"GG-MAP-") If pos1<>0 and pos1<>"" Then sMnemonic = UCase(Right(sGroup, 6)) If sMnemonic <> "" Then On Error Resume Next Err.Clear oWshShell.Run sLogonSrv & "\NETLOGON\SITE\" & sMnemonic & ".bat", 0, True If Err.Number <> 0 Then Msg = MsgBox("Unable to locate script for network drive mapping. Please inform your System Administrator.", 64, "File not found (" & sMnemonic & ".bat)") Err.Clear End If Else 'Msg = MsgBox("Unable to locate group for network drive mapping. Please inform your System Administrator.", 64, "Group not found") End If On Error GoTo 0 Exit For End If Next Set oUsr = Nothing Set oGrp = Nothing On Error Resume Next End If oDialogWindow.Quit '========================================================================== 'Obtain user distinguishedName from LoginID information using ADO '========================================================================== Function GetDN(logonID) Dim sADsPath, sQuery Dim oADsRootDSE, oADsDomain Dim oADOConn, oADOCmd, oRS On Error Resume Next GetDN="Unknown" sADsPath = "LDAP://RootDSE" Set oADsRootDSE = GetObject(sADsPath) Set oADsDomain = GetObject("LDAP://" & oADsRootDSE.Get("defaultNamingContext")) sQuery="Select sAMAccountname,cn,distinguishedname from '" & _ oADsDomain.ADSPath & "' Where objectcategory='person' AND objectclass='user'" & _ " AND sAMAccountName='" & logonID & "'" Set oADOConn=Createobject("ADODB.Connection") Set oADOCmd=CreateObject("ADODB.Command") oADOConn.Provider="ADSDSOObject" oADOConn.Open Set oADOCmd.ActiveConnection=oADOConn Set oRS = oADOConn.Execute(sQuery) Do While Not oRS.EOF sUserCN = oRS.Fields("cn") GetDN = oRS.Fields("distinguishedname") oRS.movenext Loop oRS.Close oADOConn.Close Set oADOConn=Nothing Set oADOCmd=Nothing Set oADsRootDSE=Nothing Set oRS=nothing End FunctionShare this post
Link to post
Share on other sites