WSH - Filezugriff macht Ärger
Überprüfen ob eine File "bereit" ist, ob man lesen / schreiben kann
Wir haben das Problem, dass under WSH-Script manchmal Probleme beim Dateiaufruf erzeugt. Es soll nur "Stopped" oder "Running" in eine *.txt-Datei schreiben, gibt aber manchmal eine Fehlermeldung: "Erlaubnis verweigert" an der Stelle an der man die Datei öffnet. Kann man das Abfangen, oder irgendwie mehrmals probieren bis es geht? Kann es sein, dass dieser Fehler auftritt, wennn man eine Datei aus einer Batchdatei heraus anspricht? Oder kann es daran liegen, dass das WSH-Skript 2 mal recht schnell hintereinander ausgeführt wird?
Wir haben das Problem, dass under WSH-Script manchmal Probleme beim Dateiaufruf erzeugt. Es soll nur "Stopped" oder "Running" in eine *.txt-Datei schreiben, gibt aber manchmal eine Fehlermeldung: "Erlaubnis verweigert" an der Stelle an der man die Datei öffnet. Kann man das Abfangen, oder irgendwie mehrmals probieren bis es geht? Kann es sein, dass dieser Fehler auftritt, wennn man eine Datei aus einer Batchdatei heraus anspricht? Oder kann es daran liegen, dass das WSH-Skript 2 mal recht schnell hintereinander ausgeführt wird?
Const ForAppending = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFSO.OpenTextFile("service.txt", _
ForAppending, True)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery _
("Select * from Win32_Service where Name='Apache2'")
For Each objService in colListOfServices
objLogFile.Write(objService.State)
Next
objLogFile.Close
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 20798
Url: https://administrator.de/contentid/20798
Ausgedruckt am: 23.11.2024 um 03:11 Uhr
3 Kommentare
Neuester Kommentar
@coli
Ich finde Deinen Tipp genial - wenn ich geahnt hätte, dass sich in WSH einfach on the fly Methoden dazuerfinden lassen wie Deine objLogFile.Quit, dann wäre ich schon vor Monaten von Bätch auf WSH umgestiegen.
Kann ich denn auch einfach schreiben:
If objLogFile.AnyProblems Then objLogFile.ForgetIt
??
@WaldSchr4T
Wenn Du die Wahrscheinlichkeit der Zugriffskollisionen minimieren willst, dann stell Deine paar Zeilen sinnvoll um und öffne die Logdatei erst, wenn Du etwas zu schreiben hast.
Im Moment ist die Logdatei exclusiv geöffnet, bevor Du überhaupt ein Objekt objWMIService erstellt hast, geschweige denn dieses geantwortet hat. Wenn dieser Service sich (theoretisch) mal 3 Minuten Zeit lässt zum Antworten, ist die Datei für diese Dauer gesperrt.
Wenn der CodeSchnipsel an dieser Stelle abschmiert (Objekt kann nicht erstellt werden und Programm knallt weg), dann würde ich auch nicht darauf wetten, das M$ das offene FileHandle sofort schließt.
Kleine Randfrage: Wie sinnvoll ist denn so ein LogFile, in dem dann nach ein paar Wochen meterlang Zeilen mit "Running" und "Stopped" untereinanderstehen?
Schönes Wochenende
Biber
[Edit] @coli
Sorry, coli, sooo vernichtend hab ichs auch nicht gemeint... ich wollte nur die "objLogFile.Quit" nicht unkommentiert stehen lassen.
Ich war wohl ein bisschen übermütig, weil endlich Wochenende ist. Tut mir Leid. War aber bezogen auf den Tipp und nicht die Person. [/Edit]
Ich finde Deinen Tipp genial - wenn ich geahnt hätte, dass sich in WSH einfach on the fly Methoden dazuerfinden lassen wie Deine objLogFile.Quit, dann wäre ich schon vor Monaten von Bätch auf WSH umgestiegen.
Kann ich denn auch einfach schreiben:
If objLogFile.AnyProblems Then objLogFile.ForgetIt
??
@WaldSchr4T
Wenn Du die Wahrscheinlichkeit der Zugriffskollisionen minimieren willst, dann stell Deine paar Zeilen sinnvoll um und öffne die Logdatei erst, wenn Du etwas zu schreiben hast.
Im Moment ist die Logdatei exclusiv geöffnet, bevor Du überhaupt ein Objekt objWMIService erstellt hast, geschweige denn dieses geantwortet hat. Wenn dieser Service sich (theoretisch) mal 3 Minuten Zeit lässt zum Antworten, ist die Datei für diese Dauer gesperrt.
Wenn der CodeSchnipsel an dieser Stelle abschmiert (Objekt kann nicht erstellt werden und Programm knallt weg), dann würde ich auch nicht darauf wetten, das M$ das offene FileHandle sofort schließt.
Kleine Randfrage: Wie sinnvoll ist denn so ein LogFile, in dem dann nach ein paar Wochen meterlang Zeilen mit "Running" und "Stopped" untereinanderstehen?
Schönes Wochenende
Biber
[Edit] @coli
Sorry, coli, sooo vernichtend hab ichs auch nicht gemeint... ich wollte nur die "objLogFile.Quit" nicht unkommentiert stehen lassen.
Ich war wohl ein bisschen übermütig, weil endlich Wochenende ist. Tut mir Leid. War aber bezogen auf den Tipp und nicht die Person. [/Edit]