group name in the quotes and put the correct drive letter and UNC path for the drive mapping. 'Group Drive Mappings Script
Const HKEY_CURRENT_USER = &H80000001
Dim WshNetwork, WshShell
Dim oDrives, fUser, fDomain, oGroupDict
Dim ScriptLogName
ScriptLogName = "_LoginScript.log"
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set oDrives = WshNetwork.EnumNetworkDrives
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set inputFile = fso.OpenTextFile(fTMP & "\" & ScriptLogName, 2, True)
fTMP = WshShell.ExpandEnvironmentStrings("%TEMP%")
WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
WriteLog(Now() & ": ****** Start Login Script ******")
fUser = WshNetwork.UserName
fDomain = WshNetwork.UserDomain
'****** Group Drives ******
WriteLog("Starting Group Script Area")
if isMember("Accounting") then
MapDrive "S:", "\\server\shared\"
end if
if isMember("Human Resources") then
MapDrive "S:", "\\server\hr"
end if
'***** use elseif for mapping multiple groups to the same share*******
if isMember("IT Infrastructure") then
MapDrive "S:", "\\server\it"
elseif isMember("Helpdesk Staff") then
MapDrive "S:", "\\server\it"
elseif isMember("Data Services") then
MapDrive "S:", "\\server\it"
end if
WriteLog("Ending Group Script Area")
WriteLog(Now() & ": ****** Login Script Complete ******")
WriteLog("")
Function IsMember(sGroup)
Dim sAdsPath, oUser, oGroup
If IsEmpty(oGroupDict) Then
Set oGroupDict = CreateObject("Scripting.Dictionary")
oGroupDict.CompareMode = vbTextCompare
sAdsPath = WshNetwork.UserDomain & "/" & WshNetwork.UserName
Set oUser = GetObject("WinNT://" & sAdsPath & ",user")
For Each oGroup In oUser.Groups
oGroupDict.Add oGroup.Name, "-"
Next
Set oUser = Nothing
End If
IsMember = CBool(oGroupDict.Exists(sGroup))
if (IsMember) then
WriteLog(Now() & " User is member of " & sGroup)
end if
End Function
Sub MapDrive(sLetter,sUNC)
Dim oNetwork
Set oNetwork = WScript.CreateObject("WScript.Network")
For i = 0 to oDrives.Count -1 Step 2
if LCase(sLetter) = LCase(oDrives.Item(i)) then
oNetwork.RemoveNetworkDrive sLetter, true, true
WriteLog(Now() & ": Removed drive """ & sLetter & """ from share """ & sUNC & " (already connected) " & "")
end if
Next
oNetwork.MapNetworkDrive sLetter,sUNC
If Err.Number = 0 Then
WriteLog(Now() & ": Connect """ & sLetter & """ to share """ & sUNC & """")
else
WriteLog(Now() & ": Failed to Connect """ & sLetter & """ to share """ & sUNC & """")
end if
on error goto 0
End Sub
sub WriteLog(strEntry)
inputFile.WriteLine(strEntry)
End Sub
Const HKEY_CURRENT_USER = &H80000001
Dim WshNetwork, WshShell
Dim oDrives, fUser, fDomain, oGroupDict
Dim ScriptLogName
ScriptLogName = "_LoginScript.log"
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set oDrives = WshNetwork.EnumNetworkDrives
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set inputFile = fso.OpenTextFile(fTMP & "\" & ScriptLogName, 2, True)
fTMP = WshShell.ExpandEnvironmentStrings("%TEMP%")
WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
WriteLog(Now() & ": ****** Start Login Script ******")
fUser = WshNetwork.UserName
fDomain = WshNetwork.UserDomain
'****** Group Drives ******
WriteLog("Starting Group Script Area")
if isMember("Accounting") then
MapDrive "S:", "\\server\shared\"
end if
if isMember("Human Resources") then
MapDrive "S:", "\\server\hr"
end if
'***** use elseif for mapping multiple groups to the same share*******
if isMember("IT Infrastructure") then
MapDrive "S:", "\\server\it"
elseif isMember("Helpdesk Staff") then
MapDrive "S:", "\\server\it"
elseif isMember("Data Services") then
MapDrive "S:", "\\server\it"
end if
WriteLog("Ending Group Script Area")
WriteLog(Now() & ": ****** Login Script Complete ******")
WriteLog("")
Function IsMember(sGroup)
Dim sAdsPath, oUser, oGroup
If IsEmpty(oGroupDict) Then
Set oGroupDict = CreateObject("Scripting.Dictionary")
oGroupDict.CompareMode = vbTextCompare
sAdsPath = WshNetwork.UserDomain & "/" & WshNetwork.UserName
Set oUser = GetObject("WinNT://" & sAdsPath & ",user")
For Each oGroup In oUser.Groups
oGroupDict.Add oGroup.Name, "-"
Next
Set oUser = Nothing
End If
IsMember = CBool(oGroupDict.Exists(sGroup))
if (IsMember) then
WriteLog(Now() & " User is member of " & sGroup)
end if
End Function
Sub MapDrive(sLetter,sUNC)
Dim oNetwork
Set oNetwork = WScript.CreateObject("WScript.Network")
For i = 0 to oDrives.Count -1 Step 2
if LCase(sLetter) = LCase(oDrives.Item(i)) then
oNetwork.RemoveNetworkDrive sLetter, true, true
WriteLog(Now() & ": Removed drive """ & sLetter & """ from share """ & sUNC & " (already connected) " & "")
end if
Next
oNetwork.MapNetworkDrive sLetter,sUNC
If Err.Number = 0 Then
WriteLog(Now() & ": Connect """ & sLetter & """ to share """ & sUNC & """")
else
WriteLog(Now() & ": Failed to Connect """ & sLetter & """ to share """ & sUNC & """")
end if
on error goto 0
End Sub
sub WriteLog(strEntry)
inputFile.WriteLine(strEntry)
End Sub
3 comments:
This script is great when double-clicking on the local computer to run it, but when applied in Group Policy, it does not work
Did not work in Group Policy user login script
Thanks for this. I used something similar but ported the VB codes to Powershell instead. I've written about it here: http://thisishelpful.com/powershell-login-script-map-network-drives-printers-applicaton-settings.html.
Hope this helps too.
Thanks,
Binh
Post a Comment