joshuatree
Goto Top

If-Bedingung wenn Vergleich stimmt erfüllen

Hallo,
brauche mal ein tritt, habe mir folgendes Script zusammengebastelt.
Ich möchte jeden User aus dem AD rausfiltern in OUs und UnterOUs der das useraccountflag 66050 also disabled hat.
Dazu habe ich eine IF-Schleife mit eingebunden die soll nochmal jedes Userobjekt auf dieses Flag hin prüfen und anschließend mir in ein csv schreiben.
Es passiert aber nichts ausser das der Rechner zu 100% ausgelastet ist und die WScript.exe mit dem Taskmanager abgeschossen werden muss..
Nehme ich diese If-Schleife raus funktioniert es einwandfrei.

Was mache ich falsch?



Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
Set OutPutFile = FileSystem.CreateTextFile(".\logged-user.csv", True)

OutPutFile.WriteLine "Name;DN;SamAccountName;Disabled"


Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"

Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection

objCommand.CommandText = "<LDAP://ou=blabla,dc=testdomain,dc=de>;(objectCategory=user);distinguishedName,name,samaccountname,userAccountControl;subtree"

Set objRecordSet = objCommand.Execute


While Not objRecordSet.EOF

If (objRecordSet.Fields("userAccountControl") = "66050") then

outputFile.WriteLine objRecordSet.Fields("Name") & ";" & "[" & objRecordSet.Fields("distinguishedName") & "]" & ";" &_
objRecordSet.Fields("Samaccountname") & ";" & objRecordSet.Fields("userAccountControl")
objRecordSet.MoveNext
end if
Wend

Content-Key: 97739

Url: https://administrator.de/contentid/97739

Printed on: April 19, 2024 at 05:04 o'clock

Member: Iwan
Iwan Sep 24, 2008 at 12:57:37 (UTC)
Goto Top
hallo,

ich empfehle dir, das Adminpack zu installieren und dann die Abfrage über DSQUERY zu machen oder soll es unbedingt VBS sein?
Member: Logan000
Logan000 Sep 24, 2008 at 13:00:26 (UTC)
Goto Top
Moin Moin

So Wie ich das sehe liegt der Fehler hier:
If (objRecordSet.Fields("userAccountControl") = "66050") then  
   outputFile.WriteLine objRecordSet.Fields("Name") & ";" & "[" & objRecordSet.Field("distinguishedName") & "]" & ";" & objRecordSet.Fields("Samaccountname") & ";" &  objRecordSet.Fields("userAccountControl")   
   objRecordSet.MoveNext
end if
Dein Recordet "moved" nur weiter wenn die If bedingung erfüllt ist. Ist diese aber nicht erfüllt bleibt dein Skript immer auf dem gleichen Datensatz stehen und deine While Bedingung wird nie erfüllt.

Gruß L.
Member: JoshuaTree
JoshuaTree Sep 24, 2008 at 14:32:19 (UTC)
Goto Top
@logan

hast du ne Idee wie ich das Besser machen kann?
Member: Biber
Biber Sep 24, 2008 at 15:08:13 (UTC)
Goto Top
Moin JoshuaTree,

Du solltest das Ende des Schnipsels so abändern.
....
While Not objRecordSet.EOF
             If (objRecordSet.Fields("userAccountControl") = "66050") then  
                 ...
                      outputFile.WriteLine .....
                       EXIT ' wenn es nur um diesen einen Satz "66050" geht....  
             end if
            objRecordSet.MoveNext
Wend

Das "exit" muss nicht sein... aber das .MoveNext muss definitiv aus der if..end if-Bedingung raus.

Grüße
Biber
Member: JoshuaTree
JoshuaTree Sep 26, 2008 at 14:56:07 (UTC)
Goto Top
Wie kann ich aus dem Script raus das Ergebnis direkt mit UNC-Pfad wegschreiben.
Also nach \\server\Freigabe\logs am besten noch mit Datum als dateinamen. Geht so einfach nicht habe ich gerade fest gestellt.
Member: bastla
bastla Sep 27, 2008 at 09:27:23 (UTC)
Goto Top
Hallo JoshuaTree!

Geht so einfach nicht habe ich gerade fest gestellt.
Wo liegt das Problem? Den Dateinamen kannst Du etwa so erzeugen:
Datei = Right(Date,4) & "-" & Mid(Date,4,2) & "-" & Left(Date,2)  
oder, etwas unabhängiger von den Systemeinstellungen:
Datei = CStr(Year(Date)) & "-" & Right("0" & CStr(Month(Date)), 2) & "-" & Right("0" & CStr(Day(Date)), 2)  
Grüße
bastla
Member: JoshuaTree
JoshuaTree Sep 29, 2008 at 07:32:58 (UTC)
Goto Top
Hallo,

vielen Dank, das hat direkt geklappt.

Was nicht funktioniert hat ist das gleich im richtign UNC-Pfad zu speichern.

Ich habe es so versucht

Set OutPutFile = FileSystem.CreateTextFile("\\Netzwerk-UNC-pfad\ & Datei", True)
Das ist wohl falsch !?
Member: bastla
bastla Sep 29, 2008 at 07:47:36 (UTC)
Goto Top
Hallo JoshuaTree!

Eher so:
Set OutPutFile = FileSystem.CreateTextFile("\\Netzwerk-UNC-pfad\" & Datei, True)  

Grüße
bastla