Skip to main content
TechNet

Active Directory : déconnectez pour obtenir de meilleures données

L'utilisation d'un jeu d'enregistrements déconnecté et ses utilitaires associés peuvent vous aider à maintenir les performances des requêtes.

James Turner

Un jeu d'enregistrements déconnecté (DRS) est un enregistrement de l'ADO qui réside en mémoire. Un DRS est complètement déconnecté de sa source de données originale et vous pouvez en créer un "on demand" avec une relative facilité. Collecter les données provenant de sources telles qu'Active Directory et recueillir des informations utiles par l'émission de simples requêtes SQL.

Les utilitaires mentionnés ici ne sont pas complexes, et ils ne sont pas des bases de données relationnelles. Ils sont les bases de données comprenant des collections communes de données, que vous devez généralement évaluer sur une base quotidienne ou hebdomadaire. Le nombre de champs dans les bases de données est réduit au minimum. Le nombre total d'enregistrements est généralement inférieure à 10 000, et utilisation de taille et de la mémoire des fichiers sont minimes. Vous y trouverez de jeux d'enregistrements de cette taille et encore moins exécuter bien lorsqu'il est interrogé.

DRS utilitaires vous fera économiser du temps et fournissent l'accès aux données haute performance, empreintes de petit espace disque et l'utilisation de mémoire faible. Elles nécessitent généralement une quantité limitée de travail. Vous pouvez utiliser un DRS à bien des égards. Lorsque des requêtes interactives sont les meilleurs, j'ai construit un .hta GUI qui vous permet de trouver des ensembles de données pour correspondre à des requêtes spécifiques.

Lorsqu'une interface utilisateur graphique n'est pas nécessaire, créez le DRS et évaluer les données dans quelle que soit la manière est tenu d'exécuter la tâche à accomplir. Qui pourrait entraîner le frottage des fichiers journaux qui contiennent des identificateurs et noms d'ordinateurs et de remplacer ces valeurs par des valeurs substituées.

Au cours des années, le DRS s'est avéré pour être une excellente ressource pour rapides et efficaces sans frais utilitaires, tels que :

  • Épurateurs de journal de sécurité
  • Identificateur de sécurité (SID) / bases de données utilisateur-rétention
  • Recherches de renvoi SID/utilisateur
  • Recherches de file d'impression
  • Comparaisons hebdomadaires de compte admin

Pour construire un DRS, commencez par créer un objet ADO Recordset (ADOR). Voici deux exemples d'utilisation de VBScript :

Set DRS = CreateObject("ADOR.Recordset")

Et :

Set DRS = CreateObject("ADODB.Recordset")

ADOR est un client léger de ADO qui expose uniquement l'interface de jeu d'enregistrements. Si vous pouvez créer des instances de l'ADO, vous pouvez créer des instances de ADOR. ADOR est un sous-ensemble de ADOdb, qui est un sous-ensemble d'ADO. J'ai tendance à utiliser l'objet ADODB.Jeu d'enregistrements, mais il y a une autre utilisation.

Il est simple de construire une base de données de DRS. Commencez par configurer les domaines qui se rapportent à votre entreprise, puis de remplir ces champs à l'aide de données provenant d'une source telles qu'Active Directory.

Voici un exemple de comment vous pouvez configurer une base de données sécurité Journal épurateur utility :

Const adFldIsNullable = 32
Set DRS = CreateObject("ADODB.Recordset")
DRS.Fields.Append "SecurityObject",201,256,adFldIsNullable
DRS.Fields.Append "Type",201,256,adFldIsNullable
DRS.Fields.Append "Substitute",201,256,adFldIsNullable
DRS.Open

Remarque la première ligne déclare une constante. La constante adFldIsNullable indique que le champ peut accepter les valeurs null. Dans le script de l'épurateur, champs contiennent toujours données. Y compris la constante n'est pas vraiment nécessaire et vous pouvez omettre cette étape, mais dont il n'affectera pas le script. Toutefois, si vous créez une base de données avec des champs qui ne contiennent pas de données, vous devez déclarer et utiliser cette constante. Voici quelques-uns des script s autres caractéristiques :

  • La deuxième ligne crée l'Object DRS.
  • La troisième à la cinquième lignes définissent les champs de la base de données.
  • La sixième ligne de l'exemple de code déclare la base de données ouvert et prêt à accepter des données.

Nous allons examiner la syntaxe de l'instruction de Fields.Append :

  • Le nom du champ en cours de création est SecurityObject.
  • Le 201 indique un type de données de champ de chaîne longue.
  • Les 256 spécifie que DefinedSize du champ est une dimension de longueur variable. (Par définition, n'importe quelle largeur de champ supérieure à 255 pour ce type de champ est traitée comme de longueur variable, ce qui signifie que le champ peut stocker plus ou moins de 256 caractères).
  • Le champ Qu'attribut d'adFldIsNullable signifie qu'il accepte les valeurs null.

Pour plus d'informations sur les types de données de champ, consultez le page DataTypeEnum Web. Pour plus d'informations sur les largeurs de champ, consultez le page Web méthode Append (ADO).

Pour ajouter des données à la base de données, il suffit de suivre une séquence d'événements similaires pour cet exemple :

DRS.AddNew
DRS("SecurityObject") = "172.172.
\d\d?
\d?
\.
\d\d?
\d?"
DRS("SecurityType") = "IP"
DRS("Substitute") = "a1.b1.c1.d1"
DRS.Update

Vous n'avez pas d'émettre le DRS.Mise à jour de méthode après chaque enregistrement que vous remplissez. Vous pouvez attendre pour publier cette commande jusqu'à ce que vous avez rempli votre jeu d'enregistrements complet. La méthode de mise à jour simplement commet les enregistrements de la base de données et rend les documents accessibles.

Dans l'extrait précédent, j'ai ajouté un seul enregistrement à la base de données. Le processus d'épuration va utiliser cet enregistrement particulier chercher quoi que ce soit dans le fichier journal basé sur du texte contenant une adresse IP commençant par 172.172 et remplacez-le par a1.b1.c1.d1.

Pour remplir la base de données avec une collection de noms d'ordinateur et le serveur Active Directory, vous créez une requête LDAP et remplir la base de données, comme le montre Figure 1.

Figure 1 créer une requête LDAP et d'alimenter la base de données.

Const ADS_SCOPE_SUBTREE = 2 
DNC = GetObject("LDAP://RootDSE").Get("defaultNamingContext")
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = _ 
  "SELECT cn FROM 'LDAP://" & DNC & "' WHERE objectcategory = 'computer'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
SubstCount = 1
Do Until objRecordset.EOF
  DRS.AddNew
  DRS("SecurityObject") = objrecordset.Fields("CN").Value
  DRS("SecurityType") = "Host"
  DRS("Substitute") = "Host" & SubstCount
  SubstCount = SubstCount + 1
  objRecordset.MoveNext
Loop

Chacun des enregistrements créés dans cette séquence contient un nom d'ordinateur avec une valeur de Type de « Host » et une valeur de remplacement de « Hostnnn » (où nnn représente un numéro séquentiel — c'est-à-dire, Host123). Vous pouvez examiner le code pour voir comment un processus similaire est codé de manière à alimenter la base de données avec l'ID utilisateur.

Lorsque vous avez fini de remplir la base de données et d'émission d'un.Mise à jour, vous pouvez maintenant trier, lire et filtrer le jeu d'enregistrements. Pour faire défiler la base de données, commencez par placer le pointeur d'enregistrement jusqu'au premier enregistrement, puis mis en place un processus en boucle pour parcourir la base de données comme suit :

DRS.MoveFirst
Do while Not DRS.EOF
  myRegExp.Pattern = "\b" & Lcase(Trim(DRS.Fields.Item("SecurityObject"))) & "\b"
  If myRegExp.Test(strNewText) Then
  chng2 = Lcase(Trim(DRS.Fields.Item("Substitute")))
  strNewText = myRegExp.Replace(strNewText,chng2)
  End If
  DRS.MoveNext
Loop

Le processus en boucle se poursuivra jusqu'à ce qu'il atteigne un marqueur de fin de fichier. Il est également important de noter la méthode « MoveNext », qui fait avancer le pointeur d'enregistrement. Sans elle, vous trouverez votre programme dans une boucle infinie.

Vous entrerez par le biais de la base de données, vous serez en mesure d'accéder de valeur de champ de données dans chaque enregistrement en utilisant la propriété Fields.Items, comme on le voit dans les troisième et cinquième lignes de l'extrait de code précédent :

  • DRS.Fields.Item("SecurityObject") contiendra une valeur Active Directory d'un nom de nom d'utilisateur ou ordinateur.
  • DRS.Fields.Item("Substitute") contiendra la valeur qui va remplacer ce nom nom d'utilisateur ou d'ordinateur, s'il est constaté.

Ce que vous ne voyez pas dans l'extrait précédent, c'est qu'il a ouvert un fichier qui ont besoin de nettoyage et de le lire dans une variable. Puis il crée un objet d'Expression régulière dans le but de localiser des chaînes dans le texte et en les remplaçant par des valeurs spécifiques.

Les éléments recherchés tous résident dans la base de données dans le champ appelé SecurityObject. La valeur de remplacement réside dans le champ appelé substitut. Dans cet exemple, la base de données contient tous les noms d'ordinateurs et l'ID utilisateur qui existent dans un domaine donné. Tandis que toujours dans le processus en boucle, si le DRS détecte la valeur SecurityObject dans le fichier texte, il le remplace par la valeur associée du membre suppléant.

Une fois que le DRS a atteint le marqueur de fin de fichier, il examine le dossier, écrit le fichier texte frottés au système de fichiers et transmet au soutien de fournisseur dès leur approuvé. Vous pouvez utiliser ce code tel quel ou s'adapter à votre guise. Vous pensez que vous devez modifier le code, alors il saute commun des noms ou des mots qui pourraient résider dans votre annuaire Active Directory.

Ceci juste raye la surface de ce que vous pouvez faire avec un DRS, mais j'espère que cela s'avère pour être bénéfique. Il y a beaucoup plus à discuter au sujet de la DRS, telles que la création d'une interface graphique qui met en valeur les plus caractéristiques du DRS, y compris le tri, le filtrage et affichage d'enregistrements basés sur des requêtes SQL.

James Turner   est un analyste de systèmes d'information et administrateur de systèmes Windows depuis les années 1980. Il est aussi un passionné de longue date script et aime faire des choses se produisent avec le code.

Contenus associés