begin process at 2012 02 09 23:20:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBScript

 > RÉCUPÉRATION DOMAINES CONTRÔLEURS DE DOMAINE DANS UNE FORÊT ACTIVE DIRECTORY

RÉCUPÉRATION DOMAINES CONTRÔLEURS DE DOMAINE DANS UNE FORÊT ACTIVE DIRECTORY


 Information sur la source

Note :
7,25 / 10 - par 4 personnes
7,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VBScript Classé sous :domaine, dc, controleur, ado Niveau :Initié Date de création :06/03/2006 Vu :10 654

Auteur : MTO31

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

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

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



 Sources de la même categorie

Source avec Zip Source avec une capture RECHERCHE & SAUVEGARDE DES FICHIERS PAR LEURS EXTENSIONS par hackoo
Source avec Zip Source avec une capture [VBS] SPLASH SCREEN EN VBSCRIPT par hackoo
Source avec Zip Source avec une capture [VBS] GOOGLE EASTER EGGS par hackoo
Source avec Zip Source avec une capture FILE2COMPARE: COMPARAISON DE DEUX FICHIERS LIGNE PAR LIGNE par hackoo
Source avec Zip Source avec une capture [VBS] COMMENT CRÉER UN DOSSIER ET LE PROTÉGER PAR MOT DE PAS... par hackoo

 Sources en rapport avec celle ci

Source avec Zip TRAVAILLER AVEC MYSQL par grandzebu
Source avec Zip GESTION PAIE par MOHA555
Source avec Zip Source avec une capture DNS REDIRECTION par EvildarkEurope
Source avec Zip Source avec une capture GESTIONNAIRE DE BASE ADO par CGSI3
Source avec Zip Source avec une capture AFFICHEUR DEFILANT par Flocreate

Commentaires et avis

Commentaire de econs le 07/03/2006 14:10:28 administrateur CS

C'est propre, bien construit, bien commenté. Bref, agréable à lire.
C'est malheureusement spécifique à un problème que tu as rencontré, donc pas forcément réutilisable par tous.
Ton code est cependant tellement clair qu'il pourrait bien inspirer de futurs débutants avec ADO.

Commentaire de Baddante le 13/03/2006 18:09:22

Bonjour,

attention à vérifier la réussite de la connexion ADO, dans le cadre d'une supervision cela pourrait déclencher des alertes non légitime.

objCommand.Timeout=60 'pour les serveurs qui seraient derrière une routeur
objCommand.State = State_Enum ' valeurs possible :   adStateClosed,adStateOpen,adStateConnecting,adStateExecuting
,adStateFetching.

Un check routeur / IP en amont permet d'isoler immédiatement les problèmes de réseau / routeur : (les APIs SENS (sensapi) IsNetworkAlive , sont très simple à implémenter.

le script checkrepl.vbs fournit dans le Windows Resource kit de windows 2000 (20003 ?) est plus appropriée à mon avis, il utilise un composant COM dédié à ces opérations iadstools.dll.

Voir aussi le script FRSFLAGS.VBS à utilisé pour vérifier les réplications du GC (Global catalog) et aussi l'outil NTDSUTIL.exe en mode console.

enfin dernier petit conseil, s'il y a des mots de passe très sensible, sécurisé le stockage des scripts avec des permissions NTFS et crypter vos scripts  contenant des comptes et mot de passe (Script Encoder).

Bravo à l'auteur tous mes encouragements.

Commentaire de toutou2000 le 29/06/2006 14:55:04

bonjour a tout le monde
est ce quelqu'un peus me aidé SVP
j'entraine de faire une synchronisation entre AD et open LDAP. pour ce faire
1.j'ai importer les objet d'AD sous format d'un fichiers LDIf et j'ai commancé à traité ce fichier par des scripte awk mais le probléme que j'ai rencontrer et le suivant. dans cette fichies il y a pas un champs qui répresente les mots de passe des utilisateurs meme crypté. est ce que quelle qu'un à des aidés comment récupérer les id/mots de passe d'AD sous format text meme si ce sont cryptés
merci.

Commentaire de Baddante le 29/06/2006 19:37:41

Salut,

faudrait savoir si les schémas AD et OpenLDAP sont identiques (DIT).
Dans Quel sens ce fait la synchro ? Es-ce que tu fais un import / export binaire en mode brut / trace (diag) avec quel jeux de caractères, unicode ? as-tu les permissions aux niveaux des 2 annuaires. Es-ce que tu as une session LDAP v. 2 ou 3 port LDAP standard (389) ou SSL ?

En ce qui concerne les "id" cela correspond à des comptes LDAP / AD mais pas forcément on peut avoir un ou plusieurs comptes LDAP et un ou plusieurs comptes NT liés ou pas.

Les mots de passe en général (API: NTLM et ADSI) ne sont pas exportable, sauf peut-être crypté mais j'en doute.
En général c'est une propriétée en "écriture seulement" et non lecture.

Extrait ADSI2.5 SDK:
unicodePwd :(property)
The unicodePwd property is the password for the user.
For setting the password of the user, you should use the IADsUser::ChangePassword method (if your script or application is allowing the user to change his/her own password) or IADsUser::SetPassword method (if your script or application is allowing an administrator to reset a password).

The password of the user in Windows NT (NT) one-way format (OWF). Windows 2000 uses the NT OWF. This property is used only by operating system. Note that you cannot derive the clear password back from the OWF form of the password.
(iads.h)

Enfin il faut pas oublier que même si c'est AD il utilise encore les SID sur certains objets : ACL (permissions) NTFS, ACL registre NT, ACL sur des shares.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

PB pour alimenter une Datagrid sans controleur ADO [ par tweeny ] BonjourJ'ai un problème pour alimenter une DataGrid sans un controleur ADO.J'ai créé un RECORSET, ma requette SQL fonctione, je fais un SET magrid.dat Comment trouver le nom d'un controleur de domaine sur un domaine AD [ par philmaitre ] Bonjourje cherche une fonction vb6 qui me permettrait de trouver le nom de machine (hostname) ou adresse IP du controleurde domaine principal d'un dom ADO DC Fournisseur ? [ par Algade ] AlgadeJ'ai compilé un pgm VB6 utilisant ADO et il s'installe correctement. Par contre, à l'exécution j'ai le message : ADODC impossible de trouver le champ memo access et ado [ par sylvae34 ] Je voudrais récupéré ce que j'ai dans un rtxbox et l'enregistrer dans un champ mémo d'une base access, mais le champs reste toujours vide.Merci de vot Update method sur un controle ADO [ par philagui ] Apprenti en Visual Basic.Bonjour,ayant créé une form avec un controle ADO lié à une base de données Access, j'ai expérimenté la chose suivante: lorsqu Save et ADO [ par MrHyDe ] Bonjour a tous,je veux enregistrer le contenu d'un adodb.recordset dans un fichier texte pour ensuite l'importer sous excel. J'utilise la méthode gets Accès à une BD avec ADO [ par eren ] J'ai crée un Form ave le contrôle Microsoft ADO Data Control (adodc1)Dans le champ RecordSource de ce controle, j'ai choisi une requête et toutfonctio PB DE TRANSACTION AVEC CONNEXION ADO [ par sonia2002 ] SLT tt le monde,j'ai un probleme lors de la creation d'une transaction sous VB6 en utilisant une connexion ADO, voici le code que j'ai ecris:....initi HELP SVP ADO/SQL........................... [ par spiderone ] UcnnADO.Provider = "Microsoft.jet.OLEDB.4.0"UcnnADO.CursorLocation = adUseClientUchaineADO = TPathFileDest.Text'&gt;&gt;&gt; est la chaine contenue da Problemes ado [ par shaoni ] bonjour à tous voila j'ai un petit probleme avec ADO je fait strSQL = "DROP TABLE FactTemp"ensuite strSQL = "SELECT * INTO FactTemp from Facture et


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,980 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales