Récupération domaines contrôleurs de domaine dans une forêt active directory

Contenu du snippet

J'utilise ce script dans le cadre d'une surveillance de l'état de réplication des partitions d'annuaire de mon architecture Active Directory

Source / Exemple :


'Récupération d'information de la forêt ou d'un domaine enfant
'appel du script sans argument ou en passant le DN du domaine racine:
'Retour des informations pour la forêt
'appel du script en passant le DN d'un domaine enfant existant:
'Retour des informations pour ce domaine enfant
'Retour des informations pour la forêt
'
'Retourne les domaines, ses subref et les DC sous la syntaxe suivante:
'nom_dns_du_domaine#dn_du_domaine#subrefs_du_domaine1;subrefs_du_domaine2;..; subrefs_du_domainen#dn_des_dc_du_domaine1;dn_des_dc_du_domaine2;...;dn_des_dc_du_domainen

'Création d'un objet pour la lecture d'argument
Set objArgs = WScript.Arguments

'Création d'une connexion avec ADO
Set con = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
con.Open "Provider=ADsDSOObject;"
objCommand.ActiveConnection = con

'Lecture du DN du domaine de recherche
if (objArgs.Count = 0) then
	'Si pas d'argument, alors on retourne tous les DC de la forêt
	Set objRootDSE = GetObject("LDAP://rootDSE")
	DN_Domaine=objRootDSE.Get("rootdomainNamingContext")
else
	DN_Domaine=objArgs(0)
end if

'Positionnement du filtre
filtreDC="(objectClass=domain)"

'Positionnement des champs à retourner
retourattributs="distinguishedname,canonicalname,masteredby,subrefs" 'attributs à retourner

'Profondeur de la recherche
scope="subtree" 'profondeur de recherche
scopeone="onelevel"

'Nb d'objets à retourner
objCommand.Properties("Page Size")= 5000 '5000 enregistrements max à retourner

'Constitution de la requête
requeterechercheDC="<GC://" & DN_Domaine & ">;" & filtreDC & ";" & retourattributs & ";" & scope

'Exécution de la requête de récupération des DC par domaines
objCommand.CommandText=requeterechercheDC
Set rs=objCommand.Execute
out=""
if (rs.RecordCount > 0) then
	rs.MoveFirst
	do
		For Each dom In rs.Fields("canonicalname").value
			'Récup du Canonical Name
			CNDOM=left(dom,len(dom)-1)
			'Récup du Distinguished Name
			DNDOM=rs.Fields("distinguishedname").value
			'Récup des SubRefs
			DNSDOM=""
			if not(IsNull(rs.Fields("subrefs").value)) then
				For Each sdom In rs.Fields("subrefs").value
					DNSDOM=DNSDOM & sdom & ";"
				next
				'Retrait du dernier ;
				DNSDOM=left(DNSDOM,len(DNSDOM)-1)
			end if
		next
		'Récup des DC du domaine
		DNDC=""
		if not(IsNull(rs.Fields("masteredby").value)) then
			For Each dc In rs.Fields("masteredby").value
				DNDC=DNDC & dc & ";"
			next
			'Retrait du dernier ;
			DNDC=left(DNDC,len(DNDC)-1)
		end if
		rs.movenext
		out=out & CNDOM & "#" & DNDOM & "#" & DNSDOM & "#" & DNDC & vbcrlf
	loop while Not rs.EOF
	'Retrait du dernier retour chariot
	out=left(out,len(out)-1)
end if
'Affichage de la sortie
wscript.echo out

A voir également

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.