Skip to main content
TechNet

Active Directory: Getrenntes Recordset für nützlichere Informationen

Mit einem getrennten Recordset und den zugehörigen Dienstprogrammen kann die Abfrageleistung aufrechterhalten werden.

James Turner

Ein getrenntes Recordset (DRS) ist ein ADO-Datensatz, der sich im Arbeitsspeicher befindet. Ein DRS ist komplett aus der ursprünglichen Datenquelle getrennt und Sie können einen "on Demand" mit relativer Leichtigkeit erstellen. Sammeln von Daten aus Quellen wie Active Directory und nützliche Informationen zu sammeln, durch die Ausgabe von einfacher SQL-ähnliche Abfragen.

Die Dienstprogramme, die auf die hier verwiesen wird sind nicht kompliziert, und sie sind nicht relationale Datenbanken. Sie sind Datenbanken, bestehend aus gemeinsamen Sammlungen von Daten, die Sie in der Regel haben auf einer täglichen oder wöchentlichen Basis zu bewerten. Die Anzahl der Felder in den Datenbanken ist auf ein Minimum beschränkt. Die Gesamtzahl der Datensätze ist in der Regel weniger als 10.000 und Datei-Größe und Speicher-Nutzung sind minimal. Sie werden feststellen, dass Recordsets dieser Größe und auch kleinere durchführen, auch wenn abgefragt.

DRS-Dienstprogramme werden sparen Sie Zeit und bieten Hochleistungs-Datenzugriff, kleine Speicherplatz Fußabdrücke und geringen Speicherverbrauch. Sie erfordern in der Regel eine begrenzte Menge an Arbeit. Ein DRS können Sie in vielerlei Hinsicht. Wenn interaktive Abfragen am besten sind, habe ich eine .hta GUI konstruiert, mit dem Sie Datensätze entsprechend spezifische Fragen zu finden.

Wenn eine GUI nicht notwendig ist, erstellen Sie die DRS und Werten Sie die Daten in welcher Weise die Aufgabe zur hand erforderlich ist. Könnte doch voraus Wäsche Log-Dateien, die Benutzer-IDs und Computernamen und ersetzen diese Werte mit ersetzten Werten enthalten.

In den Jahren der DRS hat sich als eine hervorragende Ressource für schnelle und effiziente Kostenlose Hilfsprogramme, wie z.B.:

  • Sicherheit Protokoll Wäscher
  • Sicherheits-ID (SID) / Benutzer-Aufbewahrungs-Datenbanken
  • SID/User-Querverweis-suchen
  • Druckerwarteschlange-suchen
  • Pro Admin Konto Vergleiche

Um ein DRS zu erstellen, zunächst erstellen Sie ein ADO-Recordset (ADOR)-Objekt. Hier sind zwei Beispiele zur Verwendung von VBScript:

Set DRS = CreateObject("ADOR.Recordset")

Und:

Set DRS = CreateObject("ADODB.Recordset")

ADOR ist ein leichtes ADO-Client, der nur die Recordset-Schnittstelle verfügbar macht. Wenn Sie ADO-Instanzen erstellen können, können Sie ADOR-Instanzen erstellen. ADOR ist eine Teilmenge von ADOdb, die eine Teilmenge der ADO ist. Ich neige zu ADODB verwenden.Recordset, aber es eine Alternative Nutzung gibt.

Bau einer DRS-Datenbank ist einfach. Einrichten von Feldern, die beziehen sich auf Ihr Bemühen, dann füllen Sie diese Felder mit Daten aus einer Quelle wie Active Directory beginnen.

Hier ist ein Beispiel wie Sie eine Sicherheit Protokoll Wäscher Dienstprogramm Datenbank festlegen können:

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

Hinweis: die erste Zeile eine Konstante deklariert. Die AdFldIsNullable-Konstante gibt an, dass das Feld null-Werte annehmen kann. Im Wäscher Skript enthält die Felder immer Daten. Einschließlich die Konstante ist nicht wirklich notwendig und Sie können diesen Schritt auslassen, aber auch es hat keine Auswirkungen auf das Skript. Jedoch, wenn Sie eine Datenbank mit Feldern erstellen, die keine Daten enthalten kann, müssen Sie die Deklaration und Verwendung dieser Konstanten. Hier sind einige der das Skript 's andere Merkmale:

  • Die zweite Zeile erstellt die DRS-Object.
  • Die dritte bis fünfte Linien definieren die Felder der Datenbank.
  • Die sechste Zeile des Codebeispiels deklariert die Datenbank geöffnet und bereit, Daten zu akzeptieren.

Betrachten Sie die Syntax der Anweisung Fields.Append:

  • Der Name des Feldes erstellt wird ist SecurityObject.
  • Die 201 gibt ein Felddatentyp lange Zeichenfolge.
  • Die 256 gibt, dass das Feld DefinedSize eine Größe von variabler Länge. (Per Definition wird jede Feldbreite, die größer als 255 für diesen Feldtyp behandelt als variabler Länge, was bedeutet, dass das Feld mehr oder weniger als 256 Zeichen speichern kann.)
  • Das Feld, das Attribut des AdFldIsNullable bedeutet nimmt null-Werte.

Für Informationen über Felddatentypen, lesen Sie in der DataTypeEnum Webseite. Für Informationen zu Feldbreiten, lesen Sie in der Append-Methode (ADO)-Web-Seite.

Um Daten in die Datenbank hinzuzufügen, führen Sie einfach eine Abfolge von Ereignissen, die ähnlich wie in diesem Beispiel:

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

Du musst die DRS ausstellen.Update-Methode nach jedem Datensatz, den Sie füllen. Sie können warten, dieser Befehl ausgeben, bis Sie Ihre komplette Recordset aufgefüllt haben. Die Update-Methode schreibt die Datensätze in der Datenbank einfach und Datensätze zugänglich macht.

Im vorherigen Ausschnitt habe ich einen Datensatz in der Datenbank hinzugefügt. Der Wäscher-Prozess wird verwenden dieses bestimmten Datensatz um zu suchen, etwas in die textbasierte Log-Datei mit einer IP-Adresse beginnend mit 172.172 und durch a1.b1.c1.d1 ersetzen.

Um die Datenbank mit einer Sammlung von Active Directory-Computer und Server-Namen zu füllen, würde Sie eine LDAP-Abfrage erstellen und füllen der Datenbank, wie in Abbildung 1.

Abbildung 1 eine LDAP-Abfrage erstellen und die Datenbank zu füllen.

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

Jeder der Datensätze in der angegebenen Reihenfolge erstellt würde enthalten einen Computernamen mit einem Typenwert der "Host" und der Ersatzwert "Hostnnn" (wobei Nnn steht eine laufende Nummer — d. h. Host123). Sie können überprüfen Sie den Code um zu sehen, wie ein ähnlicher Prozess codiert ist, um die Datenbank mit Benutzer-IDs zu füllen.

Nachdem Sie fertig sind, füllen der Datenbank und die Ausgabe ein.Update, können nun sortiert, gelesen und das Recordset filtern. Um die Datenbank zu durchlaufen, zuerst positionieren Sie den Datensatzzeiger zum ersten Datensatz, dann richten Sie eine Schleife Prozess zu durchlaufen, bis die Datenbank wie folgt:

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

Der Schleife Prozess wird fortgesetzt, bis eine Dateiende-Markierung erreicht. Es ist auch die Methode "MoveNext" Beachten Sie den Datensatzzeiger fördert. Ohne sie würden Sie Ihr Programm in einer Endlosschleife finden.

Wie Sie die Datenbank durchlaufen haben, werden Sie auf Feld Datenwert innerhalb jedes Datensatzes zugreifen mithilfe der Fields.Items-Eigenschaft, wie in der dritten und fünften Zeile der vorherigen Codeausschnitt:

  • DRS.Fields.Item("SecurityObject") wird eine Active Directory-Wert eine Userid oder Computer-Namen enthalten.
  • DRS.Fields.Item("Substitute") enthält den Wert, der diesem Benutzer-ID oder Computer-Namen ersetzt wird, wenn es gefunden wird.

Was Sie nicht in der vorherigen Ausschnitt zu sehen ist, dass es eine Datei benötigen, Schrubben und in eine Variable zu lesen geöffnet. Anschließend erstellt es eine Regular Expression-Objekt zum Zwecke suchen von Zeichenfolgen innerhalb des Textes und durch bestimmte Werte ersetzt.

Die gesuchten Elemente befinden sich innerhalb der Datenbank im Feld namens SecurityObject. Der Wiederbeschaffungswert befindet sich im Feld Ersatz genannt. In diesem Beispiel enthält die Datenbank die Computernamen und Benutzer-IDs, die in einer bestimmten Domäne vorhanden sind. Während noch innerhalb der Schleife Prozess, wenn die DRS sucht einen SecurityObject-Wert innerhalb der Textdatei, ersetzt er es durch den zugeordneten Ersatz-Wert.

Sobald die DRS erreicht die Dateiende-Markierung, Bewertungen die Datei, schreibt die bereinigten Textdatei in das Dateisystem und übergibt an Herstellersupport einmal genehmigt. Können Sie diesen Code da ist oder anzupassen, wie Sie es wünschen. Sie finden möglicherweise müssen Sie den Code zu optimieren, so dass es hüpft gemeinsamen Namen oder Wörter, die in Active Directory befinden könnte.

Dies nur oberflächlichen Überblick über was Sie, mit einem DRS tun können, aber ich hoffe, dass dies erweist sich als vorteilhaft. Es gibt viel mehr diskutieren zum Thema der DRS, z. B. die Erstellung einer GUI, die weitere Features der DRS, einschließlich sortieren, Filtern und Anzeigen von Datensätzen basierend auf SQL basierende Abfragen zeigt.

James Turner   wurde eine Information Systemanalyst und Windows-Systemadministrator seit Mitte der 80er. Er ist auch ein langjähriger Skripting-Enthusiasten und genießt die Dinge, die passieren, mit Code.

Verwandte Inhalte