Recherche des informations utilisateurs / groupes / computers dans active directory

Soyez le premier à donner votre avis sur cette source.

Vue 12 106 fois - Téléchargée 663 fois

Description

Bonjour,

Ne sachant pas comment restaurer l'appartenance à un groupe AD, j'ai créé ce petit script qui permet d'enregistrer toutes les informations de type "Membre de" et "Membre" des utilisateurs, ordinateurs et groupes d'un domaine AD.
La variable SavePathFile s'incrémente tous les jours ( différence de jours entre aujourd'hui et le 31/12/2007 )

Source / Exemple :


'---------------------------------------------------------------------------------------------------------
' Search Users / Groups / Computers Information in the current Windows domain
'---------------------------------------------------------------------------------------------------------
set netw=createobject("wscript.network")
Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
set oshell = createobject("wscript.shell")
'---------------------------------------------------------------------------------------------------------
' Set the SaveFile
'---------------------------------------------------------------------------------------------------------
SavePathFile = "C:\Save_AD_" & datediff("d",#31/12/2007#,date) & ".csv"
Set OutPutFileTxt = FileSystem.CreateTextFile( SavePathFile, True)
OutPutFileTxt.WriteLine "ItemTyp;ItemName;Member Cat.;DistinguishedName"
'---------------------------------------------------------------------------------------------------------
'Find the current LDAP Name
'---------------------------------------------------------------------------------------------------------
Set oRootDSE = GetObject("LDAP://RootDSE")
Set oShell = WScript.CreateObject("WScript.Shell")
sUserName = oShell.Environment("PROCESS").Item("username")
Const ADS_PROPERTY_CLEAR = 1
Const ADS_NAME_INITTYPE_GC = 3
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1779 = 1
strDNSDomain = oRootDSE.Get("defaultNamingContext")
Set objTrans = CreateObject("NameTranslate")
objTrans.Init ADS_NAME_INITTYPE_GC, ""
objTrans.Set ADS_NAME_TYPE_1779, strDNSDomain
strNetBIOSDomain = objTrans.Get(ADS_NAME_TYPE_NT4)
strNetBIOSDomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) - 1)
strUserNTName = Trim(LogonAccount)
objTrans.Set ADS_NAME_TYPE_NT4, strNetBIOSDomain & "\" & strUserNTName
If Err.Number <> 0 Then
	On Error GoTo 0
	Wscript.Echo "ERROR: Login not found in Active Directory: " & strUserNTName 
Else
	On Error GoTo 0
	strUserDN = objTrans.Get(ADS_NAME_TYPE_1779)
	LDAP_Name = "LDAP://" & strUserDN 
End If 
'---------------------------------------------------------------------------------------------------------
' Main Script
'---------------------------------------------------------------------------------------------------------
Set oContainer=GetObject(LDAP_Name)
EnumerateItems oContainer
OpenExcelFile
OutPutFileTxt.close
'---------------------------------------------------------------------------------------------------------
' EXIT
'---------------------------------------------------------------------------------------------------------
WScript.Quit(0) 
'---------------------------------------------------------------------------------------------------------
'Sub "EnumerateItems"
'---------------------------------------------------------------------------------------------------------
	Sub EnumerateItems(oCont)
	Dim oItem
	On Error Resume Next
	For Each oItem In oCont
		Select Case LCase(oItem.Class)
			Case "user"
				strmemberOf = oItem.GetEx("memberOf")
				OutPutFileTxt.WriteLine "User;" & oItem.cn
				For Each Item in strmemberOf
					OutPutFileTxt.WriteLine ";" & oItem.cn & ";IsMemberOf;" & Item
				next
				strmemberof = UNSET
			Case "group"
				OutPutFileTxt.WriteLine "Group;" & oItem.cn
				strhasmember = oItem.GetEx("member")
				For Each Item in strhasmember
					OutPutFileTxt.WriteLine ";" & oItem.cn & ";HasMember;" & Item
				next
				strhasmember = UNSET
				strmemberOf = oItem.GetEx("memberOf")
				For Each Item in strmemberOf
					OutPutFileTxt.WriteLine ";" & oItem.cn & ";IsMemberOf;" & Item
				next
				strmemberof = UNSET
			Case "computer"
				strmemberOf = oItem.GetEx("memberOf")
				OutPutFileTxt.WriteLine "Computer;" & oItem.cn
				For Each Item in strmemberOf
					OutPutFileTxt.WriteLine ";" & oItem.cn & ";IsMemberOf;" & Item
				next
				strmemberof = UNSET
			Case "organizationalunit", "container"
				EnumerateItems oItem
		End Select
	Next
	End Sub

'---------------------------------------------------------------------------------------------------------
'Open .CSV File in Excel with Filter on the First Line
'---------------------------------------------------------------------------------------------------------
Sub OpenExcelFile
	Set objExcel = CreateObject("Excel.Application")
	objExcel.visible = true
	objExcel.Workbooks.Open(SavePathFile)
	objExcel.Range("A1").Select
	objExcel.Selection.AutoFilter
	objExcel.Columns("A:D").Select
	objExcel.Columns("A:D").EntireColumn.AutoFit
	objExcel.Range("A1:D1").Select
	objExcel.Selection.Font.Bold = True
	objExcel.Selection.Interior.ColorIndex = 15
End Sub

Conclusion :


Grace à ces fichiers .CVS si ce script est exécuté régulièrement, vous pourrez retrouver toutes les informations ActiveDirectory.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

gberna2
Messages postés
1
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
21 décembre 2012

Bonjour,

Malgré la date du script, il est toujours d'actualité.
Simple et surtout suffisamment complet pour mon besoin.

Merci
cs_beetleman
Messages postés
1
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
18 février 2010

Bonjour,

Je cherche un code qui permet de créer des OU et des users dans Windows serveur 2003 à partir d'un fichier excel avec les renseignements.
merci
cs_LEFEUVRE
Messages postés
2
Date d'inscription
lundi 6 février 2006
Statut
Membre
Dernière intervention
1 octobre 2008

Merci pour cette exemple de code d'extraction d'informations d'AD. Il m'a été très utile. Par contre le traitement des info à partir d'un fichier csv dans Excel est long à s'exécuter, j'ai du transformer le code pour une exécution directe dans Excel et beaucoup plus rapide.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.