Précédent   Forum du club des développeurs et IT Pro > Autres langages > Général Visual Basic 6 et VBScript > VBScript
VBScript Le forum d'entraide sur VBScript. Avant de poster -> La FAQ VBScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/11/2012, 14h55   #1
Miistik
Membre chevronné
 
Homme Kévin
Apprenti Ingénieur Réseaux & Systèmes
Inscription : juin 2012
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Kévin
Âge : 21
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Apprenti Ingénieur Réseaux & Systèmes
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2012
Messages : 205
Points : 646
Points : 646
Par défaut Mappage Lecteur avec AD

Bonjour,

Travaillant sur un autre script, la phase de test a échoué et je ne comprends pas trop.

Je cherche à vérifier l'appartenance d'un utilisateur à un groupe AD et ainsi monter les lecteurs associés.
Mon souci vient du fait que mon script monte tous les lecteurs à tout le monde ! Ceci est donc problématique ....

Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
ON ERROR RESUME NEXT
 
Dim UserName 
 
set WshShell = CreateObject("WScript.Shell")
 
Set WshNetwork = WScript.CreateObject("WScript.Network")
UserName = WshNetwork.UserName
 
DomainName="yy.com"
 
LogonServer=WshShell.ExpandEnvironmentStrings("%LogonServer%")
 
Set UserObj = GetObject("LDAP://" & DomainName & "/" & WshNetwork.UserName)
 
 
Set WshProcessEnv = WshShell.Environment("PROCESS") 
 
 
 
 ' ***************  BOUCLE VERIFICATION GROUPE AD  **********************
 
 
 For Each GroupObj In UserObj.groups
 
            WshNetwork.MapNetworkDrive "P:" , WshProcessEnv("HOMESHARE")
            WshNetwork.MapNetworkDrive "Q:" , "\\chemin1"
	        WshNetwork.MapNetworkDrive "S:" , "\\chemin2"
            WshNetwork.MapNetworkDrive "L:" , "\\chemin3"   
 
 	    If IsMember("Grp1") Then
 
           WshNetwork.MapNetworkDrive "K:" , "\\chemin4"
 
	    End if
 
    	If IsMember("Grp2") Then
 
	       WshNetwork.MapNetworkDrive "W:", "\\chemin5"
 
        End if
 
	    If IsMember("Grp3") Then
 
		   WshNetwork.MapNetworkDrive "R:", "\\chemin6"
 
	    End If
 
		If IsMember("Grp4") Then
 
		   WshNetwork.MapNetworkDrive "M:", "\\chemin7"
 
	    End If
 
Next
Pour IsMember, j'ai testé plusieurs choses :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
'Function IsMember (strGroup)
 
'    Set  WshNetwork = CreateObject ("WScript.Network")
'    Set oGroup = GetObject ( _
'        "WinNT://" & WshNetwork.UserDomain & "/" & strGroup)
'    IsMember =  WshNetwork.IsMember ( _
'        "WinNT://" &  WshNetwork.UserDomain & "/" & _
'         WshNetwork.UserName)
'End Function
 
Function IsMember(sGroup)
Dim sAdsPath,oUser,oGroup,g_oGroupDict,g_oNet 
  'Peupler dictionnaire si pas encore créé
  If IsEmpty(g_oGroupDict) Then
      Set g_oGroupDict=CreateObject("Scripting.Dictionary")
      g_oGroupDict.CompareMode = vbTextCompare
      sAdsPath = res.UserDomain &"/"& res.UserName
      Set oUser = GetObject("WinNT://"& sAdsPath & ",user")
      	For Each oGroup In oUser.Groups
        g_oGroupDict.Add oGroup.Name, "-"
      	Next
      Set oUser = Nothing
  End If
IsMember = CBool(g_oGroupDict.Exists(sGroup))
End Function
 
'Function IsMember(strGroup) 
'IsMember=False 
'If InStr(UserGroups,"[" & strGroup & "]") Then 
'IsMember=True 
'End If 
'End Function
Mais hélas, rien ne marche.



Merci,


Miistik.
Miistik est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2012, 17h12   #2
Daynvheur
Nouveau Membre du Club
 
Technicien Help Desk
Inscription : décembre 2012
Messages : 23
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Technicien Help Desk

Informations forums :
Inscription : décembre 2012
Messages : 23
Points : 29
Points : 29
Essaie de remplacer la fonction IsMember par ceci ?
Code :
1
2
3
4
5
6
7
8
9
10
11
Function IsMember(sGroup)
	Dim sAdsPath,oUser,oGroup,GrpExists
	sAdsPath = res.UserDomain &"/"& res.UserName
	Set oUser = GetObject("WinNT://"& sAdsPath & ",user")
	For Each oGroup In oUser.Groups
		If oGroup.Name = sGroup Then GrpExists = 1
	Next
	Set oUser = Nothing
	Set oGroup = Nothing
	IsMember = GrpExists
End Function
En un paquet, ça donne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
ON ERROR RESUME NEXT
 
Dim UserName
set WshShell = CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
UserName = WshNetwork.UserName
DomainName="yy.com"
LogonServer=WshShell.ExpandEnvironmentStrings("%LogonServer%")
Set UserObj = GetObject("LDAP://" & DomainName & "/" & UserName)
Set WshProcessEnv = WshShell.Environment("PROCESS")
 
 ' ***************  BOUCLE VERIFICATION GROUPE AD  **********************
 For Each GroupObj In UserObj.groups
	WshNetwork.MapNetworkDrive "P:" , WshProcessEnv("HOMESHARE")
	WshNetwork.MapNetworkDrive "Q:" , "\\chemin1"
	WshNetwork.MapNetworkDrive "S:" , "\\chemin2"
	WshNetwork.MapNetworkDrive "L:" , "\\chemin3"
 
	If IsMember("Grp1") Then
	   WshNetwork.MapNetworkDrive "K:" , "\\chemin4"
	End if
 
	If IsMember("Grp2") Then
	   WshNetwork.MapNetworkDrive "W:", "\\chemin5"
	End if
 
	If IsMember("Grp3") Then
	   WshNetwork.MapNetworkDrive "R:", "\\chemin6"
	End If
 
	If IsMember("Grp4") Then
	   WshNetwork.MapNetworkDrive "M:", "\\chemin7"
	End If
Next
 
'Function IsMember (strGroup)
 
'    Set  WshNetwork = CreateObject ("WScript.Network")
'    Set oGroup = GetObject ( _
'        "WinNT://" & WshNetwork.UserDomain & "/" & strGroup)
'    IsMember =  WshNetwork.IsMember ( _
'        "WinNT://" &  WshNetwork.UserDomain & "/" & _
'         WshNetwork.UserName)
'End Function
 
Function IsMember(sGroup)
	Dim sAdsPath,oUser,oGroup,GrpExists
	sAdsPath = res.UserDomain &"/"& res.UserName
	Set oUser = GetObject("WinNT://"& sAdsPath & ",user")
	For Each oGroup In oUser.Groups
		If oGroup.Name = sGroup Then GrpExists = 1
	Next
	Set oUser = Nothing
	Set oGroup = Nothing
	IsMember = GrpExists
End Function
 
'Function IsMember(strGroup)
'IsMember=False
'If InStr(UserGroups,"[" & strGroup & "]") Then
'IsMember=True
'End If
'End Function
(Je n'ai pas de LDAP disponible pour faire d'essai fonctionnel.)
Daynvheur est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/12/2012, 09h24   #3
Miistik
Membre chevronné
 
Homme Kévin
Apprenti Ingénieur Réseaux & Systèmes
Inscription : juin 2012
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Kévin
Âge : 21
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Apprenti Ingénieur Réseaux & Systèmes
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2012
Messages : 205
Points : 646
Points : 646
Bonjour Le Forum,

@ Daynvheur : Je te remercie de ta réponse. je teste cela.

Désolé pour la réponse tardive, j'étais en cours je ne pouvais tester.

EDIT : Malheureusement, je monte encore tous les lecteurs réseaux. Je bloque vraiment sur cette fonction de lien avec l'AD. Merci de ton aide !

Bien cordialement,

Miistik
Miistik est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 12h48   #4
Daynvheur
Nouveau Membre du Club
 
Technicien Help Desk
Inscription : décembre 2012
Messages : 23
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Technicien Help Desk

Informations forums :
Inscription : décembre 2012
Messages : 23
Points : 29
Points : 29
Hmm, la gestion de l'utilisateur dans la fonction IsMember me semble étrange...

Essai avec ceci ?
Code :
1
2
3
4
5
6
7
8
9
10
Function IsMember(sDomainUser, sGroup) 'IsMember("yy.com/user", "Grp1")
	Dim oUser,oGroup,GrpExists
	Set oUser = GetObject("WinNT://"& sDomainUser & ",user")
	For Each oGroup In oUser.Groups
		If oGroup.Name = sGroup Then GrpExists = 1
	Next
	Set oUser = Nothing
	Set oGroup = Nothing
	IsMember = GrpExists
End Function
Ce qui donne pour l'ensemble :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
ON ERROR RESUME NEXT
 
Dim UserName
set WshShell = CreateObject("WScript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
UserName = WshNetwork.UserName
DomainName="yy.com"
LogonServer=WshShell.ExpandEnvironmentStrings("%LogonServer%")
Set UserObj = GetObject("LDAP://" & DomainName & "/" & UserName)
Set WshProcessEnv = WshShell.Environment("PROCESS")
 
 ' ***************  BOUCLE VERIFICATION GROUPE AD  **********************
 For Each GroupObj In UserObj.groups
	WshNetwork.MapNetworkDrive "P:" , WshProcessEnv("HOMESHARE")
	WshNetwork.MapNetworkDrive "Q:" , "\\chemin1"
	WshNetwork.MapNetworkDrive "S:" , "\\chemin2"
	WshNetwork.MapNetworkDrive "L:" , "\\chemin3"
 
	If IsMember(DomainName&"/"&UserName, "Grp1") Then
	   WshNetwork.MapNetworkDrive "K:" , "\\chemin4"
	End if
 
	If IsMember(DomainName&"/"&UserName, "Grp2") Then
	   WshNetwork.MapNetworkDrive "W:", "\\chemin5"
	End if
 
	If IsMember(DomainName&"/"&UserName, "Grp3") Then
	   WshNetwork.MapNetworkDrive "R:", "\\chemin6"
	End If
 
	If IsMember(DomainName&"/"&UserName, "Grp4") Then
	   WshNetwork.MapNetworkDrive "M:", "\\chemin7"
	End If
Next
 
'Function IsMember (strGroup)
 
'    Set  WshNetwork = CreateObject ("WScript.Network")
'    Set oGroup = GetObject ( _
'        "WinNT://" & WshNetwork.UserDomain & "/" & strGroup)
'    IsMember =  WshNetwork.IsMember ( _
'        "WinNT://" &  WshNetwork.UserDomain & "/" & _
'         WshNetwork.UserName)
'End Function
 
Function IsMember(sDomainUser, sGroup) 'IsMember("yy.com/user", "Grp1")
	Dim oUser,oGroup,GrpExists
	Set oUser = GetObject("WinNT://"& sDomainUser & ",user")
	For Each oGroup In oUser.Groups
		If oGroup.Name = sGroup Then GrpExists = 1
	Next
	Set oUser = Nothing
	Set oGroup = Nothing
	IsMember = GrpExists
End Function
 
'Function IsMember(strGroup)
'IsMember=False
'If InStr(UserGroups,"[" & strGroup & "]") Then
'IsMember=True
'End If
'End Function
Sinon, que donne un test basique, type If IsMember("DomainName/UserName", "Grp3") Then WScript.Echo "Oui, "&DomainName&"/"&UserName&" fait bien partie de ce groupe.", , "Grp3" ?

Nota : est-ce vraiment domain/user à utiliser, ou domain\user ne serait-il pas mieux indiqué ?
Daynvheur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h55.


 
 
 
 
Partenaires

Hébergement Web