vince_fr
Messages postés5Date d'inscriptionvendredi 11 août 2006StatutMembreDernière intervention11 août 2006
-
11 août 2006 à 11:05
loszol
Messages postés1Date d'inscriptionmardi 17 avril 2007StatutMembreDernière intervention17 avril 2007
-
17 avril 2007 à 11:38
Bonjour,
Apres avoir parcouru un certain nombre de forum sur VBS, dont celui-ci, voici ce que j'ai fait.
Le but est de desactiver les comptes dont le lastLogon depasse un certain age.
J'ai prevu la possibilité de choisir entre Computer et User, mais curieusement lorsque je choisi 'user' les objets computer sont traités aussi, mais pas l'inverse !
Vince.
Option Explicit
Dim obj_dn, lngTZBias, obj_a_traiter, objLastlogon,objFSO, objTextFile, obj_descript
Dim objShell, lngBiasKey, k, objConnection, objCommand, objRecordSet, ou_a_traiter, type_objet
Dim lastlogon_date, difference
' +-------------------------------------------------------+
' I Profondeur de recherche dans les sous O.U. I
' +-------------------------------------------------------+
Const ADS_SCOPE_SUBTREE = 2
Const ForAppending = 8
' +-------------------------------------------------------+
' I Age des objets à effacer I
' +-------------------------------------------------------+
Const nb_jour_maxi = 180
' +-------------------------------------------------------+
' I Confirmation de traitement I
' +-------------------------------------------------------+
Const Pour_de_vrai = 0
' +-------------------------------------------------------+
' I O.U. de debut de traitement I
' +-------------------------------------------------------+
ou_a_traiter = "OU=DPI, OU=siege, DC=id, DC=fr, DC=cly'"
' +-------------------------------------------------------+
' I Type d'objet à traiter : user ou computer I
' +-------------------------------------------------------+
type_objet = "user"
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Non du fichier pour la date de dernier Logon
Set objTextFile = objFSO.OpenTextFile _
(Type_objet & "_Lastlogon_" & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & ".csv", ForAppending, True)
' Obtain local Time Zone bias from machine registry.
Set objShell = CreateObject("Wscript.Shell")
lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control" & "TimeZoneInformation\ActiveTimeBias")
If UCase(TypeName(lngBiasKey)) = "LONG" Then
lngTZBias = lngBiasKey
ElseIf UCase(TypeName(lngBiasKey)) = "VARIANT()" Then
lngTZBias = 0
For k = 0 To UBound(lngBiasKey)
lngTZBias = lngTZBias + (lngBiasKey(k) * 256^k)
Next
End If
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objTextFile.WriteLine("Last Logon,Age,Effacé,Nb,Nom")
Do Until objRecordSet.EOF
On error resume next
Wscript.Echo objRecordSet.Fields("LastLogon").Value
obj_dn = objRecordSet.fields("DistinguishedName").value
Set obj_a_traiter = GetObject("LDAP://" & obj_dn)
Set objLastlogon = obj_a_traiter.lastLogon
If err.number = 424 Then
'objTextFile2.WriteLine( obj_dn & ",jamais logué, effacé." )
'obj_a_traiter.DeleteObject(0)
lastlogon_date = Integer8Date(objLastlogon, lngTZBias)
difference = Date - lastlogon_date
difference = round (difference,0)
If difference > nb_jour_maxi Then
objTextFile.WriteLine(Day(lastlogon_date) & "/" & Month(lastlogon_date) & "/" & Year(lastlogon_date) & "," & difference & ",oui,1," & obj_dn)
If Pour_de_vrai = 1 Then
' +-----------------------------+
' I Pour effacer le compte I
' +-----------------------------+
' obj_a_traiter.DeleteObject(0)
' +-----------------------------+
' I Pour desactiver le compte I
' +-----------------------------+
obj_a_traiter.Put "userAccountControl", 514
obj_descript = "# Non utilisé depuis " & difference & " jours. Desactivé par script le " & Date & " - " & obj_a_traiter.get("description")
obj_a_traiter.Put "Description", obj_descript
obj_a_traiter.SetInfo
'512 - Enable Account
'514 - Disable account
'544 - Account Enabled - Require user to change password at first logon
'66048 - Password never expires
'262656 - Smart Card Logon Required
End If
Else
objTextFile.WriteLine(Day(lastlogon_date) & "/" & Month(lastlogon_date) & "/" & Year(lastlogon_date) & "," & difference & ",non,0," & obj_dn)
End If
End If
objRecordSet.MoveNext
Loop
objTextFile.Close
Function Integer8Date(objDate, lngBias)
' Function to convert Integer8 (64-bit) value to a date, adjusted for
' local time zone bias.
Dim lngAdjust, lngDate, lngHigh, lngLow
lngAdjust = lngBias
lngHigh = objDate.HighPart
lngLow = objdate.LowPart
' Account for error in IADslargeInteger property methods.
If lngLow < 0 Then
lngHigh = lngHigh + 1
End IfIf (lngHigh 0) And (lngLow 0) Then
lngAdjust = 0
End If
lngDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow) / 600000000 - lngAdjust) / 1440
' Trap error if lngDate is ridiculously huge.
On Error Resume Next
Integer8Date = CDate(lngDate)
If Err.Number <> 0 Then
On Error GoTo 0
Integer8Date = #1/1/1601#
End If
On Error GoTo 0
End Function
A voir également:
Script pour desactiver vieux compte User & Machine.
loszol
Messages postés1Date d'inscriptionmardi 17 avril 2007StatutMembreDernière intervention17 avril 2007 17 avril 2007 à 11:38
Salut,
je travaille sur une application access.Ce que je souhaite faire est un peu similaire, je voudrais dans un traitement désactivé un compte dont je connais le nom, mais voilà je ne sait pas créer un objet correspondant au user (dont je connais le nom du compte) et le désactiver.
J' ai bien esssayer de procéder de la même manière en essayant de créer un recordset contenant tous les user de mon UO. J'ai déjà été bloqué à ce niveau là. L'étape suivante sera de seléction exactement le user qui m'interesse.
Morceau du code :
---------------------------------------------------------------------
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 DistinguishedName from 'LDAP://OU=Sec,OU=MedA,DC=ch-langon,DC=fr' Where objectclass='user'"