Bonjour,

Ça fait 2, 3 jours que je bosse sur ce script, il est censé servir a verifier toutes les dates de validité des comptes d'un OU, et ressortir ceux qui sont valide encore moins de 30 jours.

Mais voila, la solution que j'utilise et qui fonctionne avec un seul utilisateur, ne me renvoie AUCUNE info quand je l'utilise dans ce script.

Pourtant je pense avoir tout vérifié, mais quelques chose doit m'échapper.

Voila le script.

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
 
 
On Error Resume Next
 
'déclaration des variables (pas obligatoire e VBS)
 
dim objfichier, myfile, Ouchoisi
 
const forReading = 1, ForWritting = 2, ForAppending = 8
 
'routine de connexion a l'AD
 
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.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
 
'choix du domaine a éxaminer
 
DomaineChoisi="mjs"			'inputbox ("veuillez Choisir le domaine que vous voulez inspecter","Choix du domaine")
 
DomaineChoisi2="local"		'inputbox ("veuillez Choisir la fin du nom de domaine que vous voulez inspecter","Choix du domaine")
 
OuChoisi="Administration"					'inputbox ("veuillez Choisir l'Unité d'organisation que vous voulez inspecter","Choix de l'OU")
 
'sélection de l'OU dans le domaine
 
objCommand.CommandText = _
    "SELECT AdsPath FROM 'LDAP://CN="& OuChoisi &", dc="& DomaineChoisi &", dc="& DomaineChoisi2 &"' WHERE objectCategory='user'"
Set objRecordSet = objCommand.Execute
 
'création du fichier texte
 
set objfichier = createobject("scripting.filesystemobject")
 
NomFichier="OUexpir.csv"	'inputbox ("Veuillez entrez le nom de fichier","Nom du Fichier")
 
set myfile = objfichier.opentextfile(NomFichier, forwritting, true)
 
'boucle qui vérifie les utilisateurs 1 par 1
 
objRecordSet.MoveFirst
 
Do Until objRecordSet.EOF
 
    Set objUser = GetObject(objRecordSet.Fields("AdsPath").Value)
 
	'condition, y a t'il une date de validité
 
	 MsgBox objUser.AccountExpirationDate
 
	dtmAccountExpiration = objUser.accountExpires
 
	If dtmAccountExpiration <> "01/01/1601 02:00:00" Then
 
	Difference = dtmAccountExpiration - date ' Difference est la variable qui fait la difference entre les deux date (elle est inferieur ou superieur a 30)
 
	'MsgBox objUser.AccountExpires,vbExclamation, "Avertissement"
 
	If 0 < Difference < 31 Then
 
	'affiche le temps qu'il vous reste avant désactivation
 
    'MsgBox "Votre compte expire le " & dtmAccountExpiration , vbExclamation, "Avertissement" 
 
	Myfile.writeline objUser.SamAccountName & ";" & objUser.AccountExpirationDate & ";" & objuser.mail
 
	End If
 
	End If
 
	objRecordSet.MoveNext
 
Loop
 
'message de fin d'éxecution du script
 
MsgBox "votre recherche dans l'AD est terminée", vbExclamation, "Avertissement"
Et voila l'autre, qui celui la verifie seulement la date de validité du compte avec lequel on est connecté, et qui marche parfaitement (j'ai rajouté quelques MsgBox pour mes tests)

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
 
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
 
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = 2
 
 
 Set WshNet = CreateObject("WScript.Network")
User = WshNet.Username
 
strUser = User
 
 
' sélection de l'objet USER
 
objCommand.CommandText = "SELECT Name, ADsPath FROM 'LDAP://dc=mjs,dc=local' where name='" & strUser & "*' and objectCategory='user'"
Set objRecordSet = objCommand.Execute
If objRecordSet.RecordCount > 0 Then
 
' on associe l'user à une variable
 
usrCN = objRecordSet.Fields("ADsPath").Value
Set objUser = GetObject (usrCN)
 
End If
 
 'déclaration de la variable dtmAccountExpiration
 
 MsgBox objUser.AccountExpirationDate
 
dtmAccountExpiration = objUser.AccountExpirationDate
 
'1er condition (y'a t'il une date de validitéà)
 
If dtmAccountExpiration <> "01/01/1601 02:00:00" Then
 
Difference = dtmAccountExpiration - date ' Difference est la variable qui fait la difference entre les deux date (elle est inferieur ou superieur a 30)
 
'2eme condition (vous reste t'il moins de 30 jours avant la désactivation de votre compte)
 
	If 0 < Difference < 31 Then
 
	'affiche le temps qu'il vous reste avant désactivation
 
    MsgBox "Votre compte expire le " & dtmAccountExpiration , vbExclamation, "Avertissement" 
 
	End If
 
else 
 
MsgBox "Votre compte n'expire pas", vbExclamation, "Avertissement" 
 
End If
 
MsgBox "FINI!!", vbExclamation, "Avertissement"
Si quelqu'un voit ou est le probleme dans le 1er script, ce serait sympa de me le dire, car j'ai beau l'avoir relu 10.000 fois et essayé de 10.000 manières différentes, j'ai toujours un fichier CSV vide a la fin ...