je n'ai pas compris tes dernières réponses.
je n'ai pas compris tes dernières réponses.
Non en fait sur mon poste (sur lequel le logiciel Vbedit est installé et sur lequel j'ai créé et testé le script) au lieu de me mapper les lecteurs quand je me loge il me lance le script
J'ai rajouté au début de mon script un bout de code pour supprimer tous les lecteurs réseaux présents sur les postes ça fonctionne mais pour certains postes, j'ai le message d'erreur que les lecteurs est déjà utilisé.
Je ne suis pas censée avoir ça comme erreur puisque la partie que j'ai rajouté, supprime les lecteurs voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
64
65
66
67
68
69
70
71
72
73
74 Dim WshShell Dim objNet Dim objRootDSE Dim Tab Dim DN Dim i Dim strComputer DN = "" Set WshShell = WScript.CreateObject("WScript.Shell") Set objNet = WScript.CreateObject("WScript.Network")' create network object for vars Set objRootDSE = GetObject("LDAP://rootDSE")' bind to the rootDSE for portability strADsConfPath = "LDAP://" & objRootDSE.Get("configurationNamingContext")' bind to configuration to get Domain Controllers later strRootDSE = objRootDSE.Get("defaultNamingContext")' bind to the defaultContext for portability strUserName = UCase(objNet.UserName)' pull user name from environment variable Tab = Split(GetDNUser(strUserName,"person"),",") Set WshNetwork = WScript.CreateObject("WScript.Network") Set oDrives = WshNetwork.EnumNetworkDrives For i = 0 to oDrives.Count - 1 Step 2 WshNetwork.RemoveNetworkDrive oDrives.Item(i),true,true Next 'MsgBox "Lecteurs supprimés" 'Supprimer les anciens lecteurs For i=1 to UBound(Tab) If i = Ubound(Tab) Then DN = DN + Tab(i) Else DN = DN + Tab(i) + "," End If Next 'MsgBox DN Const ADS_SCOPE_SUBTREE = 2 Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.CommandText = "Select Name, unCName, ManagedBy from " _ & "'LDAP://"&DN&"' where objectClass='volume'" objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst Do Until objRecordSet.EOF 'Wscript.Echo "Share Name: " & objRecordSet.Fields("Name").Value 'msgbox objRecordSet.Fields("Name").Value 'msgbox objRecordSet.Fields("uNCName").Value Dim oNet Set oNet = CreateObject("Wscript.Network") oNet.MapNetworkDrive objRecordSet.Fields("Name").Value, objRecordSet.Fields("uNCName").Value objRecordSet.MoveNext Loop Function GetDNUser(param1,param2) Set objDSE = GetObject("LDAP://rootDSE") ON ERROR RESUME NEXT Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection objCommand.CommandText = "SELECT distinguishedName, Sn " & "FROM 'LDAP://" & objDSE.Get("defaultNamingContext") & "' " & "WHERE objectCategory='" & param2 & "' AND sAMAccountName='" & param1 & "' " & "ORDER BY sAMAccountName" Set objRecordSet = objCommand.Execute GetDNUser = objRecordSet.Fields("distinguishedName") objConnection.Close if err.number <> 0 then 'msgbox "ERREUR: le nom renseigné n'existe pas dans l'AD.",16,Wscript.ScriptName & " " & version ERR.CLEAR wscript.quit end if End Function 'MsgBox "Mappage effectué"
Voici mon nouveau code:
Pour certains utilisateurs ça passe sans problème et d'autres ça fait ramer leur pc et leur CPU est à fond
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
64
65
66
67
68
69
70
71
72 Dim WshShell Dim objNet Dim objRootDSE Dim Tab Dim DN Dim i Dim strComputer DN = "" Set WshShell = WScript.CreateObject("WScript.Shell") Set objNet = WScript.CreateObject("WScript.Network")' create network object for vars Set objRootDSE = GetObject("LDAP://rootDSE")' bind to the rootDSE for portability strADsConfPath = "LDAP://" & objRootDSE.Get("configurationNamingContext")' bind to configuration to get Domain Controllers later strRootDSE = objRootDSE.Get("defaultNamingContext")' bind to the defaultContext for portability strUserName = UCase(objNet.UserName)' pull user name from environment variable Tab = Split(GetDNUser(strUserName,"person"),",") Set oNet= WScript.CreateObject("WScript.Network") For i=1 to UBound(Tab) If i = Ubound(Tab) Then DN = DN + Tab(i) Else DN = DN + Tab(i) + "," End If Next MsgBox DN Const ADS_SCOPE_SUBTREE = 2 Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.CommandText = "Select Name, unCName, ManagedBy from " _ & "'LDAP://"&DN&"' where objectClass='volume'" objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst Do Until objRecordSet.EOF Wscript.Echo "Share Name: " & objRecordSet.Fields("Name").Value msgbox objRecordSet.Fields("Name").Value msgbox objRecordSet.Fields("uNCName").Value Dim oNet Set oNet = CreateObject("Wscript.Network") On error resume next oNet.RemoveNetworkDrive objRecordSet.Fields("Name").Value On error goto 0 oNet.MapNetworkDrive objRecordSet.Fields("Name").Value, objRecordSet.Fields("uNCName").Value objRecordSet.MoveNext Loop Function GetDNUser(param1,param2) Set objDSE = GetObject("LDAP://rootDSE") ON ERROR RESUME NEXT Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection objCommand.CommandText = "SELECT distinguishedName, Sn " & "FROM 'LDAP://" & objDSE.Get("defaultNamingContext") & "' " & "WHERE objectCategory='" & param2 & "' AND sAMAccountName='" & param1 & "' " & "ORDER BY sAMAccountName" Set objRecordSet = objCommand.Execute GetDNUser = objRecordSet.Fields("distinguishedName") objConnection.Close if err.number <> 0 then msgbox "ERREUR: le nom renseigné n'existe pas dans l'AD.",16,Wscript.ScriptName & " " & version ERR.CLEAR wscript.quit end if End Function MsgBox "Mappage effectué"
Je sais pas si ça peut aider mais je pense que c'est au niveau de cette ligne que ça pose problème:
Je voudrais faire que si le lecteur existe déjà qu'il ne le mappe pas et qu'il passe au suivant comment faire?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 oNet.MapNetworkDrive objRecordSet.Fields("Name").Value, objRecordSet.Fields("uNCName").Value objRecordSet.MoveNext
Voilà je vous ai assez embeté:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169 Dim WshShell Dim objNet Dim objRootDSE Dim Tab Dim DN Dim i Dim strComputer DN = "" Set WshShell = WScript.CreateObject("WScript.Shell") Set objNet = WScript.CreateObject("WScript.Network")' create network object for vars Set objRootDSE = GetObject("LDAP://rootDSE")' bind to the rootDSE for portability strADsConfPath = "LDAP://" & objRootDSE.Get("configurationNamingContext")' bind to configuration to get Domain Controllers later strRootDSE = objRootDSE.Get("defaultNamingContext")' bind to the defaultContext for portability strUserName = UCase(objNet.UserName)' pull user name from environment variable Tab = Split(GetDNUser(strUserName,"person"),",") Set WshNetwork = WScript.CreateObject("WScript.Network") For i=1 to UBound(Tab) If i = Ubound(Tab) Then DN = DN + Tab(i) Else DN = DN + Tab(i) + "," End If Next 'MsgBox DN Const ADS_SCOPE_SUBTREE = 2 Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.CommandText = "Select Name, unCName, ManagedBy from " _ & "'LDAP://"&DN&"' where objectClass='volume'" objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst Dim oNet Set oNet = CreateObject("Wscript.Network") Do Until objRecordSet.EOF 'Wscript.Echo "Share Name: " & objRecordSet.Fields("Name").Value 'msgbox objRecordSet.Fields("Name").Value 'msgbox objRecordSet.Fields("uNCName").Value On Error Resume next oNet.RemoveNetworkDrive objRecordSet.Fields("Name").Value,True,True On Error Goto 0 oNet.MapNetworkDrive objRecordSet.Fields("Name").Value, objRecordSet.Fields("uNCName").Value objRecordSet.MoveNext Loop Function GetDNUser(param1,param2) Set objDSE = GetObject("LDAP://rootDSE") ON ERROR RESUME NEXT Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection objCommand.CommandText = "SELECT distinguishedName, Sn " & "FROM 'LDAP://" & objDSE.Get("defaultNamingContext") & "' " & "WHERE objectCategory='" & param2 & "' AND sAMAccountName='" & param1 & "' " & "ORDER BY sAMAccountName" Set objRecordSet = objCommand.Execute GetDNUser = objRecordSet.Fields("distinguishedName") objConnection.Close if err.number <> 0 then 'msgbox "ERREUR: le nom renseigné n'existe pas dans l'AD.",16,Wscript.ScriptName & " " & version ERR.CLEAR wscript.quit end if End Function set WshShell = CreateObject("WScript.Shell") Set WshNetwork = WScript.CreateObject("WScript.Network") if WshShell.ExpandEnvironmentStrings("%OS%") <> "Windows_NT" then WshShell.Run "COMMAND.EXE /C NET TIME \\BTW-USER1 /SET /Y >NUL:" DomainName=WshShell.RegRead("HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSNP32\NetworkProvider\AuthenticatingAgent") Set UserObj = GetObject("WinNT://" & DomainName & "/" & WshNetwork.username) 'msgbox (UserObj.homeDrive) 'msgbox (UserObj.HomeDirectory) else DomainName=WshShell.ExpandEnvironmentStrings("%USERDOMAIN%") Set UserObj = GetObject("WinNT://" & DomainName & "/" & WshNetwork.username) end if 'wscript.echo "Bonjour "&WshNetwork.username&" connecté sur "&WshNetwork.computername 'Init Groups Dim UserGroups Dim GroupObj UserGroups="" For Each GroupObj In UserObj.Groups UserGroups=UserGroups & "[" & GroupObj.Name & "]" Next 'wscript.echo "Membre de "&UserGroups if InGroup("Nom du groupe") Then On Error Resume next oNet.RemoveNetworkDrive objRecordSet.Fields("Name").Value,True,True WshNetwork.MapNetworkDrive "Z:","\\mon serveur\mon partage" On Error Goto 0 End if if InGroup("Nom du groupe") Then On Error Resume next oNet.RemoveNetworkDrive objRecordSet.Fields("Name").Value,True,True WshNetwork.MapNetworkDrive "K:","\\mon serveur\mon partage" On Error Goto 0 End If if InGroup("Nom du groupe") Then On Error Resume next oNet.RemoveNetworkDrive objRecordSet.Fields("Name").Value,True,True WshNetwork.MapNetworkDrive "P:","\\mon serveur\mon partage" On Error Goto 0 End If if InGroup("Nom du groupe") Then On Error Resume next oNet.RemoveNetworkDrive objRecordSet.Fields("Name").Value,True,True WshNetwork.MapNetworkDrive "V:","\\mon serveur\mon partage" On Error Goto 0 End if if InGroup("Nom du groupe") Then On Error Resume next oNet.RemoveNetworkDrive objRecordSet.Fields("Name").Value,True,True WshNetwork.MapNetworkDrive "V:","\\mon serveur\mon partage" On Error Goto 0 End if ' Function InGroup(strGroup) InGroup=False If InStr(UserGroups,"[" & strGroup & "]") Then InGroup=True End If End Function 'MsgBox "Mappage effectué"
Désolé je n'ai pas pu répondre dernièrement et j'ai perdu un peu le file de la discussion.
Cette historie de lancement de script au démarrage, c normal je pense.
Tu as fait quoi ? Tu as utilisé les GPO pour que ton script soit lancé à l'ouverture d'une session ?
Pour mapper tes lecteurs il faut bien lancer le script nom ?
Bah c peut être le cas, et dans ce cas là tu ne peux pas les supprimer de suites.mais pour certains postes, j'ai le message d'erreur que les lecteurs est déjà utilisé.
L'utilisation est temporaire.
Il faudrait que tu repères l'erreur mis dans l'objet err, et tu testes l'erreur.
Tant que tu as l'erreur tu temporise puis retente la suppression.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager