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 = ";(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 = ";(&(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 = ";(&(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