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
Please also mark the comments that contributed to the solution of the article
Content-Key: 97739
Url: https://administrator.de/contentid/97739
Printed on: April 20, 2024 at 01:04 o'clock
8 Comments
Latest comment
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