Le script
'Script que l'on peut placer dans le répertoire Netlogon des DC par exemple. Exemple d'emplacement du partage Netlogon sur un DC
'C:\Windows\SYSVOL\sysvol\NomDomaine\SCRIPTS
Dim MyCommand
Dim WSHShell, MonExe, PIDMonExe
Set WSHShell = CreateObject("WScript.Shell")
On Error Resume Next
MyCommand = "Net Use I: /Delete"
WSHShell.Run MyCommand
MyCommand = "Start Net Use J: /Delete"
WSHShell.Run MyCommand
WScript.Sleep 500 'Attente de 0,5 secondes
MyCommand = "cmd /c start Net Use I: ""\\NomServeur\NomPartage 01"""
WSHShell.Run MyCommand
MyCommand = "cmd /c Start Net Use J: ""\\NomServeur\NomPartage 02"""
WSHShell.Run MyCommand
Set WSHShell = Nothing
Lien vers le fichier : cliquez ici
Logon script qui monte le second lecteur réseau en fonction des groupes du logon qui se connecte.
Dans ce script, seul les groupes d'une OU donnée sont comparés.
Si la personne est membre d'un groupe de l'OU examinée, alors un lecteur réseau est monté en fonction du nom du groupe.
Option Explicit
'Script placé sur le répertoire local du DC dans :
'C:\Windows\SYSVOL\sysvol\NomDomaine\SCRIPTS
Dim WSHShell, MyCommand
Dim ReturnGroupName
Set WSHShell = CreateObject("WScript.Shell")
On Error Resume Next
MyCommand = "Net Use I: /Delete"
WSHShell.Run MyCommand
MyCommand = "Net Use J: /Delete"
WSHShell.Run MyCommand
WScript.Sleep 500 'Attente de 0,5 secondes
MyCommand = "cmd /c start Net Use I: ""\\NomServeurFichiers\NomPartage01"""
WSHShell.Run MyCommand
ReturnGroupName = FindGroupName()
If Len(ReturnGroupName) > 0 Then
MyCommand = "cmd /c Start Net Use J: ""\\NomServeurFichiers\Stations\" & ReturnGroupName & """"
'Wscript.echo MyCommand
WSHShell.Run MyCommand
End If
Set WSHShell = Nothing
Function FindGroupName()
Dim MyDistinguishedName
Dim WSHNetwork
Dim DomainString, UserString
Dim objRootDSE, objItem, objConnection, objCommand, objRecordSet, objRecordSetforGroups, MyCommandText
Dim strContainer, strname
Dim sAMAccountName, objUser, objmemberOf, objGroup, objOneGroup
Dim strOU, LineWithGroups, GroupsArray, OneGroupName, GroupeTrouve
Const ADS_UF_ACCOUNTDISABLE = 2
Const ADS_SCOPE_SUBTREE = 2
'Return a groupname default value
FindGroupName = ""
strOU = "OU=VDI_VIEW" 'Nom de l'OU qui contient les groupes avec lesquels on va faire une comparaison
'strContainer = "" 'Si vous souhaitez vous connecter à une OU en particulié, indiquez la ici
Set WSHNetwork = CreateObject("WScript.Network")
DomainString = Wshnetwork.UserDomain
UserString = WSHNetwork.UserName
sAMAccountName = UserString
'Wscript.echo "Login : " & UserString
If Len(sAMAccountName) > 0 Then
On Error Resume Next
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
Set objItem = GetObject("LDAP://" & objRootDSE.Get("defaultNamingContext"))
Else
Set objItem = GetObject("LDAP://" & strContainer & "," & objRootDSE.Get("defaultNamingContext"))
End If
On Error Goto 0
'strname = objItem.Get("name")
'WScript.Echo "name: " & strname
MyDistinguishedName = objItem.Get("distinguishedName") 'Récupération du distinguishedName du domaine par défaut. Exemple DC=Cotonso,DC=Com
'WScript.Echo "distinguishedName: " & MyDistinguishedName
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
'Récupération des groupes de l OU
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://" & strOU & "," & objRootDSE.Get("defaultNamingContext") & ">;(objectCategory=Group);name,cn,displayName,sAMAccountName,distinguishedName,member;subtree"
objCommand.Properties("Page Size") = 10000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
'WScript.echo "Liste des groupes"
LineWithGroups = ""
Do Until objRecordset.EOF
LineWithGroups = LineWithGroups & objRecordset.Fields("sAMAccountName") & ";"
'WScript.echo VbTab & objRecordset.Fields("sAMAccountName")
objRecordset.MoveNext
Loop
objRecordSet.Close
Set objRecordSet = Nothing
If Len(LineWithGroups) > 1 Then LineWithGroups = Left(LineWithGroups,Len(LineWithGroups)-1) 'On retire le dernier caractère, soit ;
'Si on a récupéré des groupes
If Len(LineWithGroups) > 0 Then
GroupsArray = Split(LineWithGroups,";")
'Listage des groupes du users
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://" & MyDistinguishedName & ">;(&(objectCategory=User)(sAMAccountName=" & sAMAccountName & "));name,cn,displayName,sn,mail,mailNickname,sAMAccountName,distinguishedName,memberof;subtree"
Set objRecordSet = objCommand.Execute
Do Until objRecordset.EOF
'WScript.echo objRecordset.Fields("distinguishedName")
'WScript.echo "Name : " & VbTab & objRecordset.Fields("Name")
'WScript.echo VbTab & "cn : " & VbTab & objRecordset.Fields("cn")
'WScript.echo VbTab & "displayName : " & VbTab & objRecordset.Fields("displayName")
'WScript.echo VbTab & "sn : " & VbTab & objRecordset.Fields("sn")
'WScript.echo VbTab & "mail : " & VbTab & objRecordset.Fields("mail")
'WScript.echo VbTab & "mailNickname : " & VbTab & objRecordset.Fields("mailNickname")
'WScript.echo VbTab & "sAMAccountName : " & VbTab & objRecordset.Fields("sAMAccountName")
'WScript.echo VbTab & "distinguishedName : " & VbTab & objRecordset.Fields("distinguishedName")
'WScript.echo ""
objmemberOf = objRecordset.Fields("memberof")
MyCommandText = ""
GroupeTrouve = 0
For Each objGroup in objmemberOf
If GroupeTrouve = 0 Then
'Wscript.echo "Connexion à : " & objGroup
Set objOneGroup = GetObject("LDAP://" & objGroup)
'WScript.echo VbTab & objOneGroup.sAMAccountName
'On liste les groupes qui existent dans l'OU visée
For Each OneGroupName In GroupsArray
'WScript.echo VbTab & OneGroupName
If OneGroupName = objOneGroup.sAMAccountName Then
'WScript.echo "Trouvé ! : " & OneGroupName
GroupeTrouve = 1
FindGroupName = OneGroupName
Exit For
End If
Next
End If
Set objOneGroup = Nothing
Next
objRecordset.MoveNext
Loop
objRecordSet.Close
End If
objConnection.Close
Else
'Wscript.echo "Login vierge : Arrêt"
End If
Set WSHNetwork = Nothing
End Function
Lien vers le fichier : cliquez ici
Variante ou le montage des lecteurs réseaux ne se fait pas avec un net use mais via VBScript
Option Explicit
'Script placé sur le répertoire local du DC dans :
'C:\Windows\SYSVOL\sysvol\nomdomaine.local\SCRIPTS
Dim WSHShell, MyCommand
Dim ReturnGroupName
Dim WSHNetwork, sAMAccountName
Const CstLogger = 1 'A 1 si on log dans un fichier texte situé dans le même répertoire que le script
Const CstListeGroupesLecteurK = "NomGroupe1;NomGroupe2" 'Liste des groupes qui donnent droit au montage du lecteur K pour le répertoire multimédia
Wscript.echo "Demarrage : " & Now
WScript.Sleep 5000 'Attente de 5s
Wscript.echo "Attente passée : " & Now
Dim CheminScriptActuel, ScriptFileName, Position
Dim objFSO
Dim objTextFile
Dim CheminFichier
'Déclaration des constantes
Const ForReading = 1
Const ForWritting = 2
Const ForAppending = 8
CheminScriptActuel = Left(wscript.scriptfullname,Len(wscript.scriptfullname)-Len(wscript.scriptname)-1)
ScriptFileName = wscript.scriptname
Position = InstrRev(ScriptFileName,".")
if (Position > 0) Then ScriptFileName = Left(ScriptFileName, Position - 1)
CheminFichier = CheminScriptActuel & "\" & ScriptFileName & "_Log.txt" 'Déclaration du chemin et du nom du fichier
If CstLogger = 1 Then
If Len(CheminFichier) > 0 Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(CheminFichier, ForWritting, True)
objTextFile.WriteLine(Now) 'On ecrit la date et l'heure dans le fichier
'objTextFile.Close 'Fermeture du fichier
'Set objTextFile = Nothing
'Set objFSO = Nothing
Else
Wscript.echo "Operation annulee"
End If 'CheminFichier
End If
Set WSHShell = CreateObject("WScript.Shell")
Set WSHNetwork = CreateObject("WScript.Network")
sAMAccountName = WSHNetwork.UserName
Err.Clear
On Error Resume Next
If CstLogger = 1 Then objTextFile.WriteLine("Remove U")
WSHNetwork.RemoveNetworkDrive "U:"
If CstLogger = 1 Then objTextFile.WriteLine("Remove U : " & Err.number & " - " & Err.Description)
WScript.Sleep 1000 'Attente
Err.Clear
Wscript.echo "Montage du lecteur U : " & Now
If CstLogger = 1 Then objTextFile.WriteLine("Create U : ")
WSHNetwork.MapNetworkDrive "U:" , "\\NomServeur\NomPartage"
If CstLogger = 1 Then objTextFile.WriteLine("Error ? : " & Err.number & " - " & Err.Description)
'Pour le montage du lecteur J :
ReturnGroupName = FindGroupName() 'Recherche du groupe qui indique l'appartenance à qqchose
Wscript.echo "ReturnGroupName : " & ReturnGroupName & " " & Now
If CstLogger = 1 Then objTextFile.WriteLine("ReturnGroupName : " & ReturnGroupName)
If Len(ReturnGroupName) > 0 Then
Err.Clear
If CstLogger = 1 Then objTextFile.WriteLine("Create J pour le groupe " & ReturnGroupName)
WSHNetwork.MapNetworkDrive "J:" , "\\NomServerFichiers\Stations\" & ReturnGroupName
End If
'Pour le montage du lecteur K :
If CstLogger = 1 Then objTextFile.WriteLine("Montage du lecteur K sur \\NomServerFichiers\NomPartage")
Err.Clear
WSHNetwork.MapNetworkDrive "K:" , "\\NomServerFichiers\NomPartage"
If CstLogger = 1 Then objTextFile.WriteLine("Error ? : " & Err.number & " - " & Err.Description)
If CstLogger = 1 Then objTextFile.Close 'Fermeture du fichier
Set WSHShell = Nothing
Function FindGroupName()
Dim MyDistinguishedName
Dim WSHNetwork
Dim DomainString, UserString
Dim objRootDSE, objItem, objConnection, objCommand, objRecordSet, objRecordSetforGroups, MyCommandText
Dim strContainer, strname
Dim sAMAccountName, objUser, objmemberOf, objGroup, objOneGroup, GroupName
Dim strOU, LineWithGroups, GroupsArray, OneGroupName, GroupeTrouve
Const ADS_UF_ACCOUNTDISABLE = 2
Const ADS_SCOPE_SUBTREE = 2
'Return a groupname default value
FindGroupName = ""
strOU = "OU=NomOU" 'Nom de l'OU qui contient les groupes avec lesquels on va faire une comparaison
'strContainer = "" 'Si vous souhaitez vous connecter à une OU en particulié, indiquez la ici
'Récupération du domaine et login de la personne
Set WSHNetwork = CreateObject("WScript.Network")
DomainString = Wshnetwork.UserDomain
UserString = WSHNetwork.UserName
sAMAccountName = UserString
If Len(sAMAccountName) > 0 Then
On Error Resume Next
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
Set objItem = GetObject("LDAP://" & objRootDSE.Get("defaultNamingContext"))
Else
Set objItem = GetObject("LDAP://" & strContainer & "," & objRootDSE.Get("defaultNamingContext"))
End If
On Error Goto 0
'strname = objItem.Get("name")
'WScript.Echo "name: " & strname
MyDistinguishedName = objItem.Get("distinguishedName") 'Récupération du distinguishedName du domaine par défaut. Exemple DC=Cotonso,DC=Com
'WScript.Echo "distinguishedName: " & MyDistinguishedName
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
'Récupération des groupes de l OU
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://" & strOU & "," & objRootDSE.Get("defaultNamingContext") & ">;(objectCategory=Group);name,cn,displayName,sAMAccountName,distinguishedName,member;subtree"
objCommand.Properties("Page Size") = 10000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
'WScript.echo "Liste des groupes"
LineWithGroups = ""
Do Until objRecordset.EOF
GroupName = objRecordset.Fields("sAMAccountName")
GroupName = Trim(GroupName)
If (Left(Lcase(GroupName), 3)) <> "grp" Then 'Exclusion des groupes qui commencent par Grp
LineWithGroups = LineWithGroups & GroupName & ";"
'WScript.echo VbTab & objRecordset.Fields("sAMAccountName")
End If
objRecordset.MoveNext
Loop
objRecordSet.Close
Set objRecordSet = Nothing
If Len(LineWithGroups) > 1 Then LineWithGroups = Left(LineWithGroups,Len(LineWithGroups)-1) 'On retire le dernier caractère, soit ;
'Si on a récupéré des groupes
If Len(LineWithGroups) > 0 Then
GroupsArray = Split(LineWithGroups,";")
'Listage des groupes du users
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://" & MyDistinguishedName & ">;(&(objectCategory=User)(sAMAccountName=" & sAMAccountName & "));name,cn,displayName,sn,mail,mailNickname,sAMAccountName,distinguishedName,memberof;subtree"
Set objRecordSet = objCommand.Execute
Do Until objRecordset.EOF
'WScript.echo objRecordset.Fields("distinguishedName")
'WScript.echo "Name : " & VbTab & objRecordset.Fields("Name")
'WScript.echo VbTab & "cn : " & VbTab & objRecordset.Fields("cn")
'WScript.echo VbTab & "displayName : " & VbTab & objRecordset.Fields("displayName")
'WScript.echo VbTab & "sn : " & VbTab & objRecordset.Fields("sn")
'WScript.echo VbTab & "mail : " & VbTab & objRecordset.Fields("mail")
'WScript.echo VbTab & "mailNickname : " & VbTab & objRecordset.Fields("mailNickname")
'WScript.echo VbTab & "sAMAccountName : " & VbTab & objRecordset.Fields("sAMAccountName")
'WScript.echo VbTab & "distinguishedName : " & VbTab & objRecordset.Fields("distinguishedName")
'WScript.echo ""
objmemberOf = objRecordset.Fields("memberof")
MyCommandText = ""
GroupeTrouve = 0
For Each objGroup in objmemberOf
If GroupeTrouve = 0 Then
'Wscript.echo "Connexion à : " & objGroup
Set objOneGroup = GetObject("LDAP://" & objGroup)
'WScript.echo VbTab & objOneGroup.sAMAccountName
'On liste les groupes qui existent dans l'OU visée
For Each OneGroupName In GroupsArray
'WScript.echo VbTab & OneGroupName
If OneGroupName = objOneGroup.sAMAccountName Then
'WScript.echo "Trouvé ! : " & OneGroupName
GroupeTrouve = 1
FindGroupName = OneGroupName
Exit For
End If
Next
End If
Set objOneGroup = Nothing
Next
objRecordset.MoveNext
Loop
objRecordSet.Close
End If
objConnection.Close
Else
'Wscript.echo "Login vierge : Arrêt"
End If
Set WSHNetwork = Nothing
End Function
Function FindIfOnGroup(ByVal sAMAccountName, ByVal varGroupList)
Dim MyDistinguishedName
Dim objRootDSE, objItem, objConnection, objCommand, objRecordSet, objRecordSetforGroups, MyCommandText
Dim strContainer, strname, strGroupName, arrGroups
Dim objUser, objmemberOf, objGroup, objOneGroup
FindIfOnGroup = 0 'Valeur de retour par défaut
Const ADS_UF_ACCOUNTDISABLE = 2
Const ADS_SCOPE_SUBTREE = 2
If Len(sAMAccountName) > 0 Then
WScript.echo "Recherche des groupes du compte " & sAMAccountName
On Error Resume Next
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
Set objItem = GetObject("LDAP://" & objRootDSE.Get("defaultNamingContext"))
Else
Set objItem = GetObject("LDAP://" & strContainer & "," & _
objRootDSE.Get("defaultNamingContext"))
End If
On Error Goto 0
MyDistinguishedName = objItem.Get("distinguishedName") 'Récupération du distinguishedName du domaine par défaut. Exemple DC=Cotonso,DC=Com
'WScript.Echo "distinguishedName: " & MyDistinguishedName
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = "<LDAP://" & MyDistinguishedName & ">;(&(objectCategory=User)(sAMAccountName=" & sAMAccountName & "));name,cn,displayName,sn,mail,mailNickname,sAMAccountName,distinguishedName,memberof;subtree"
objCommand.Properties("Page Size") = 10000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
Set objRecordSet = objCommand.Execute
Do Until objRecordset.EOF
'WScript.echo objRecordset.Fields("distinguishedName")
'WScript.echo "Name : " & VbTab & objRecordset.Fields("Name")
'WScript.echo VbTab & "cn : " & VbTab & objRecordset.Fields("cn")
'WScript.echo VbTab & "displayName : " & VbTab & objRecordset.Fields("displayName")
'WScript.echo VbTab & "sn : " & VbTab & objRecordset.Fields("sn")
'WScript.echo VbTab & "mail : " & VbTab & objRecordset.Fields("mail")
'WScript.echo VbTab & "mailNickname : " & VbTab & objRecordset.Fields("mailNickname")
'WScript.echo VbTab & "sAMAccountName : " & VbTab & objRecordset.Fields("sAMAccountName")
'WScript.echo VbTab & "distinguishedName : " & VbTab & objRecordset.Fields("distinguishedName")
'WScript.echo ""
objmemberOf = objRecordset.Fields("memberof")
MyCommandText = ""
arrGroups = split(varGroupList,";")
For Each objGroup in objmemberOf 'Pour tous les groupes du user
'Wscript.echo "Connexion à : " & objGroup
Set objOneGroup = GetObject("LDAP://" & objGroup)
'WScript.echo VbTab & objOneGroup.sAMAccountName 'Affichage d'un nom de groupe auquel le user appartient
For Each strGroupName in arrGroups
WScript.echo sAMAccountName & " est membre du groupe " & objOneGroup.sAMAccountName
WScript.echo VbTab & "Recherche si " & sAMAccountName & " appartient au groupe " & strGroupName
If Lcase(objOneGroup.sAMAccountName) = Lcase(strGroupName) Then
FindIfOnGroup = 1 'Si la personne fait parti du groupe recherché, on le dit en le retournant via la fonction
WScript.echo VbTab & sAMAccountName & " est bien membre du groupe " & strGroupName
'Exit For
Exit Function
End If
Next
Set objOneGroup = Nothing
Next
objRecordset.MoveNext
Loop
objRecordSet.Close
objConnection.Close
Else
Wscript.echo "Login vierge : Arrêt"
End If
End Function
Lien vers le fichier : cliquez ici
Article(s) précédent(s)
Article(s) en relation(s)