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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 97739
Url: https://administrator.de/contentid/97739
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
8 Kommentare
Neuester Kommentar
Moin Moin
So Wie ich das sehe liegt der Fehler hier:
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.
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
Gruß L.
Moin JoshuaTree,
Du solltest das Ende des Schnipsels so abändern.
Das "exit" muss nicht sein... aber das .MoveNext muss definitiv aus der if..end if-Bedingung raus.
Grüße
Biber
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
Hallo JoshuaTree!
oder, etwas unabhängiger von den Systemeinstellungen:
Grüße
bastla
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)
Datei = CStr(Year(Date)) & "-" & Right("0" & CStr(Month(Date)), 2) & "-" & Right("0" & CStr(Day(Date)), 2)
bastla