Zum Inhalt springen

Probleme mit VBScript Programm


Steellion

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...