Script pour desactiver vieux compte User & Machine.

Résolu
vince_fr Messages postés 5 Date d'inscription vendredi 11 août 2006 Statut Membre Dernière intervention 11 août 2006 - 11 août 2006 à 11:05
loszol Messages postés 1 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 17 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"

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select DistinguishedName from 'LDAP://" & ou_a_traiter & "Where objectClass='" & type_objet & "'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

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)

Else

' objTextFile.WriteLine(obj_dn & "," & Integer8Date(objLastlogon, lngTZBias))

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

2 réponses

vince_fr Messages postés 5 Date d'inscription vendredi 11 août 2006 Statut Membre Dernière intervention 11 août 2006
11 août 2006 à 11:13
Remarques :


-1- Pensez à mettre la contante "pour de vrai" à 1, pour que le scrit agisse réellement.


-2- LE script genere un fichier .csv, tracant ce qu'il fait.


Vince
3
loszol Messages postés 1 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 17 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'"




objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Page Size") = 1000



Set objRecordSet = objCommande.Execute
objRecordSet.MoveFirst
---------------------------------------------------------------------

A l'instruction "Set objRecordSet = objCommande.Execute" j'ai l' erreur suivante :
Erreur d'exécution '424' Objet requis

Qui peut me trouver un explication.
(j'ai bien vérifié que les OU et les DC soient bons)

Merci 


 
0
Rejoignez-nous