Steellion Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 Hallo liebe Fachinformatiker Gemeinde, ich bin seit ca. 1-2 Monaten in einer neuen Abteilung, in der ich viel mit Nutzerverwaltung zu tun habe. Nun soll ich in VBScript ein Programm schreiben, das aus einer Liste den DN, das Datum und die zugehörige Aktion ausliest, und dann weiter damit verfährt. Es sollte so sein, dass bei dem Account (Dn) der in der Liste steht, und bei dem das aktuelle Datum steht, die Aktion ausgeführt wird, welche dahinter steht (entweder Passwort auch Never Expires setzten oder auf Expires setzten, brauchen wir, wegen abllaufenden Passwörter, habs noch nich ganz gerafft) Mein Problem ist nun, dass ich zwar schon ein gutes Stück geschaftt habe, aber ich häng grad ein wenig und ich dachte vieleicht könnt ihr mir helfen. Problem zur Zeit ist, dass ich den folgenden Fehler beim ausführen bekomme: C:\Scripts\mid.vbs(51, 6) Microsoft VBScript runtime Error: Object Variable not set Kann damit jemand was anfangen? Wäre echt nett ^^ PS: Ich weiß auch, dass der Programm Code noch sehr unordentlich und vermutlich nicht korrekt ist, da ich ihn aus verschiedenen Quellen zusammengestückelt habe... Progg-Code: Const ForReading = 1 Dim arrDn() Dim arrAkt() x = 1 datum = date Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("C:\Scripts\Liste.txt") Set fso = CreateObject("Scripting.FileSystemObject") sZDatei = "C:\Scripts\Log.txt" Set oZDatei = fso.OpenTextFile(sZDatei, 2, True) Set objFileSystem = CreateObject("Scripting.FileSystemObject") Do Until objFile.AtEndOfStream strData = "" strSearchString = objFile.ReadLine intStart = InStr(strSearchString, ";") If intStart <> 0 Then intStart = intStart + 1 strText = Mid(strSearchString, intStart, 50) For i = 1 to Len(strText) If Mid(strText, i, 1) = ";" Then Exit For Else strData = strData & Mid(strText, i, 1) End If Next Dn = "" Pos = InStr(strSearchString, ";") Dn = Dn + Left(strSearchString, Pos - 1) Akt = "" Pos = InStr(strSearchString, ";") Akt = Akt + Right(strSearchString, 3) End If If StrComp(strData, datum, vbTextCompare) = 0 Then redim preserve arrDn(x) arrDn(x) = Dn redim preserve arrAkt(x) arrAkt(x) = Akt wscript.echo arrDn(x) wscript.echo arrAkt(x) oZDatei.Write Dn oZDatei.Write ";" oZDatei.Write Akt oZDatei.Close Else wscript.echo "Leider nicht das korrekte Datum" End If Loop Zitieren
Eratum Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 Öhm...in deinem arrDN steht nix drin ^^ Das sollte der Fehler sein :-) Zitieren
Steellion Geschrieben 17. Juli 2009 Autor Geschrieben 17. Juli 2009 Könntest du das irgendwie näher erläutern? ^^ Ich bin nich so gut in VBScript, bin schon froh, dass ich HTML und C++ halbwegs auf die Reihe bekomme Das dumme ist halt, das eigentlich schonmal alles getan hat, dann wollte ich noch hinzufügen, dass er mir den Dn und die Aktion in eine neue TXT schreibt, sodass man die dann mit nem anderen Sript verwenden kann um die Aktion auszuführen. Als das nich so ganz geklappt hat, wollte ich diesen Teil wieder rausschmeißen, wusste aber nich, was ich vorher ringeschrieben hatte... Hast du vielleicht irgendwelche Tipps oder so, damits wieder läuft? oder sogar verbesserungsvorschläge? ;P Natürlich dürfen auch andere mir gerne Helfen ^^ Vielen Dank schonmal im Voraus. Zitieren
Eratum Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 Es wäre vlt gut zu wissen wie die Quelldatei ausschaut :-) Zitieren
Steellion Geschrieben 17. Juli 2009 Autor Geschrieben 17. Juli 2009 Okay, Sorry, die hatte ich vergessen ^^ Liste.txt: TestAcc;08.04.2009;EXP FiSi;23.04.2009;EXP Azubilb;18.07.2009;NEV fdsgidf;17.07.2009;EXP Das erste stellt den DN dar, hab halt irgendwelche verschiedenen Sachen hingeschrieben, das zweite is das Datum, an dem das Skript die Aktion ausführen soll, (also wenn das Skript läuft und das aktuelle Datum mit dem Datum in der Liste übereinstimmt) und das letzte is die Aktion die ausgeführt werden soll (Passwort setzten auf EXP= Expires(läuft ab) oder NEV= Never (läuft nie ab)) Das seltsame ist auch, trotz Fehermeldung, schreibt er mir was in die Log.Txt: fdsgidf;EXP Hoffe jetzt ist es verständlicher ^^ Zitieren
Eratum Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 Also bei mir lässt es sich ohne Fehler ausführen... Aber ich frage mich was du mit den Arrays anstellen willst (arrAkt,arrDN)...Schmeiss alles was damit zu tun hat raus und dann sollte es ohne Fehler gehen ^^ Zitieren
Steellion Geschrieben 17. Juli 2009 Autor Geschrieben 17. Juli 2009 Hmm, also, ganz sicher bin ich grade auch nichtmehr, wofür ich die Arrays gebraucht habe. Hab hier noch ne Skizze von dem Programm abluaf, wo ich verzeichnet habe, dass ich eigentlich 3 Arrays erstellen wollte, wo dann jeweils ein Teil drin steht, (1. Array Dn, 2. Array Datum, 3. Array Aktion) und da ich alles in einem Zug mache, wäre dann die erste Zeile der Liste.txt, gesplittet in der ersten Zeile der 3 Arrays. Damit könnte ich dann halt im einen Array nachschaun, bei wem ich ne Aktion durchführen will und im anderen Array dann welche (Datum wird ja als erstes geprüft) Hab jetzt auch mal die Zeilen mit "arrDn/Akt" rausgenommen, bekomme aber immernoch den gleichen Fehler an der gleichen Stelle... (bei oZDatei.Write Dn) Zitieren
Eratum Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 Hast du in deiner Listendatei unten eine Leerzeile drin? Übrprüf das mal ^^ Zitieren
Steellion Geschrieben 17. Juli 2009 Autor Geschrieben 17. Juli 2009 Nein, definitiv, keine Leerzeile am Ende. Das lustige daran ist auch, dass er mir immer die Log.txt erstellt, aber nur mit dem ersten in der Liste.txt der das Datum richtig hat, danach bricht er anscheinend ab... (Wie ich Programmieren hasse) Zitieren
Eratum Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 Ach...Mensch...jetz war ich auch blind...Sorry :-) Nimm mal unten das oZDatei.Close hinter den loop ^^ Zitieren
Steellion Geschrieben 17. Juli 2009 Autor Geschrieben 17. Juli 2009 Okay, jetzt klappts, darauf hätt ich ja eigentlich auch kommen können -.- Wenn wir schonmal so schön bei der Sache sind.. ;P könntest du mir auch gleich verraten wie ich es nun hinbekomme, dass er nach dem ersten: oZDatei.Write Dn oZDatei.Write ";" oZDatei.Write Akt den nächsten Eintrag in eine neue Zeile schreibt? also muss ja irgendwie oZDatei.Write XXX sein oder? Zitieren
Eratum Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 In dem du das ganze so abwandelst: oZDatei.Writeline Dn & ";" & Akt Zitieren
Steellion Geschrieben 17. Juli 2009 Autor Geschrieben 17. Juli 2009 Ahhh, okay, Dankeschön ^^ Ich gllaub so kann ichs erstmal lassen. Ich zeigs mal meinem Ausbilder und schau, was er dazu zu sagen hat ^^ Wenn ich wieder hilfe brauche, weiß ich an wen ich mich wenden muss. Vielen Herzlichen Dank Eratum :uli Zitieren
Steellion Geschrieben 17. Juli 2009 Autor Geschrieben 17. Juli 2009 Alles in Ordnung soweit ^^ *erleichterung* Aber nun soll ich das ganze in Module zerlegen, also eins zum einlesen, eins zum log schreiben und ich alle bei denen das Datum stimmt in ein Array schreiben und später das Array in 2 Teilen (Exp und Nev) Das wird lustig ;D Hat jemand Infos wie ich das anstellen könnte ^^ Möchte hier nicht kompletten Code schnorren, hab bloß keine ahnung wie VBScript sowas handhabt, also wäre son kleiner Anfang ganz nett ^^ PS:Sorry für Doppelpost Zitieren
Eratum Geschrieben 17. Juli 2009 Geschrieben 17. Juli 2009 Module heisst Funktionen? Ein Array erstellen in VBS: Asphelper - Arrays Zitieren
Steellion Geschrieben 23. Juli 2009 Autor Geschrieben 23. Juli 2009 Okay, das mit den Arrays is auf der verlinkten Seite echt gut erklärt ^^ Das andere is, dass mein Ausbilder will, dass zum Beispiel das einlesen von der Datei in nem eigenen Modul/Funtkion ist. Dann ne Funtkion die schaut, ob es das richtige Datum ist. Danach soll ich die Liste/ das Array, mit den Einträgen die das richtige Datum haben, in 2 Arrays teilen, 1x Never Expires und 1x Expires Damit können wir dann danach arbeiten um das in die AD zu füttern ^^ Gibts dazu irgendwelche netten Tipps? Zitieren
T3D Geschrieben 23. Juli 2009 Geschrieben 23. Juli 2009 was für tipps willst du dafür haben? hast doch alles selbst geschrieben also: funktionen definieren den entsprechenden code reinschrieben / reinkopieren und abaendern return werte bestimmen deine "main" so umschreiben das er auf die funktionen zugreift fertig und freuen das hat ueberings weniger mit vb oder sonst einer sprache zu tun, sondern ehr mit dem verstaendnis rund ums programmieren. Ted Zitieren
Steellion Geschrieben 23. Juli 2009 Autor Geschrieben 23. Juli 2009 Und genau dieses Verständnis fehlt mir noch ein wenig, da ich mit Programmiersprachen nicht so gut klarkomme... Naja, meine eigentliche Frage bezog sich auf den Programmcode einer Funktion und den Aufruf. Ich kenne Funktionen bisher nur aus C(++) und ich denke mal, dass die in VBScript ein wenig anderst gehandhabt werden. Ich würde halt gerne wissen, wie ich die Übergabeparameter in der Funktion und im Funktionsaufruf angebe. Zitieren
T3D Geschrieben 23. Juli 2009 Geschrieben 23. Juli 2009 VBScript-Prozeduren haettest du mal google alleine gefragt, waer bestimmt schneller gegangen :> Ted Zitieren
Steellion Geschrieben 27. Juli 2009 Autor Geschrieben 27. Juli 2009 Hmmm, okay ich geb zu das hat mir ein wenig geholfen, aber leider bloß ein wenig ^^ Ich hab mir jetzt mal eine Funktion gebastelt, die eigentlich folgendes können sollte: - Zeilenweises einlesen eines Strings - Pfad wird an Funktion übergeben - Trennkriterium in dem String wird übergeben - Zeilenweises schreiben in Array Ich bekomm den Rest grad nich zusammen, aber eigentlich soll es eine gaz normale Funktion werden, die einfach nur einen String einiest und ihn nach Kriterien trennt welche man selbst wählen kann. Mein Ausbilder hat auch wa sgemeint von wegen, dass man das suchen der Teilstrings (Datum, Aktion, Dn) mit (seoweit ich mich erinner) left Funktion machen soll. Er hat mir was erklärt vonwegen, dass man hinter jedem Teilstring ein Trennzeichen macht, sodass der erste Teilstring links neben dem ersten Trennzeichen ist. Irgendwie so: Blabla;BlubbBlubb;MuhMuh; Wenn man das jetzt in die Funktion geben würde und man der Funktion sagt, Trennkriterium = ";" und Suchkriterium ist 2 dann sollte die Funktion BlubbBlubb in das Array schreiben. Hab zwar nich ganz gerafft wieso, aber er meinte, dass ich es halt so "offen" wie möglich schreiben soll, sodass ich die Funktion auch in anderen Programmen wieder verwenden kann. Hier mal meine Funktion: Public Function ReadData(path, search, kriterium, array) Const ForReading = 1 Const ForWriting = 2 ListPath = path Set fso = CreateObject("Scripting.FileSystemObject") Do until Liste.AtEndOfStream x = 0 x = x + 1 Zeile = Liste.Readline date_list = mid(Zeile,instr(zeile,kriterium)+1,10) if instr(date_list,date)<>0 then DN = left(Zeile,instr(zeile,";")-1) Aktion = right(Zeile,3) array(x) = DN & ";" & Aktion Ich denke mal, dass es aufjedenfall einfacher und intelligenter geht, aber ich bekomms nich besser hin -.- hat jemand VErbesserungsvorschläge? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.