- '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
'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