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-ID: 97739

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

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

Iwan
Iwan 24.09.2008 um 14:57:37 Uhr
Goto Top
hallo,

ich empfehle dir, das Adminpack zu installieren und dann die Abfrage über DSQUERY zu machen oder soll es unbedingt VBS sein?
Logan000
Logan000 24.09.2008 um 15:00:26 Uhr
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.
JoshuaTree
JoshuaTree 24.09.2008 um 16:32:19 Uhr
Goto Top
@logan

hast du ne Idee wie ich das Besser machen kann?
Biber
Biber 24.09.2008 um 17:08:13 Uhr
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
JoshuaTree
JoshuaTree 26.09.2008 um 16:56:07 Uhr
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.
bastla
bastla 27.09.2008 um 11:27:23 Uhr
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
JoshuaTree
JoshuaTree 29.09.2008 um 09:32:58 Uhr
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 !?
bastla
bastla 29.09.2008 um 09:47:36 Uhr
Goto Top
Hallo JoshuaTree!

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

Grüße
bastla