thomas1972
Goto Top

VBS Script lieferfert seit ein paar Tagen Fehler Code 800A0046 Erlaubnis Verweigert

Hallo,

ich lasse mit folgendem Script (VBS) alle CSV Dateien in einem Verzeichnis jeweils das Komma durch Semikolon ersetzen.

Ordner = "C:\Temp\"  
Typ = "csv" 'in Kleinbuchstaben  

Set fso = CreateObject("Scripting.FileSystemObject")  
For Each Datei In fso.GetFolder(Ordner).Files
    If LCase(fso.GetExtensionName(Datei.Name)) = Typ Then
        T = Datei.OpenAsTextStream.ReadAll
        fso.CreateTextFile(Datei.Path).Write Mid(Replace(T, ",", ";"), InStr(T, vbNewline) + 2)  
    End If
Next

letztmalig wurde dieses am 03.12 ausgeführt.
Heute liefert das Script an der Zeile 7 den Fehler Code 800A0046 Erlaubnis Verweigert.

Öffne ich die Dateien mit einem Texteditor / Sucher/ Ersetze kann ich ohne einen Fehler die Datei speichern.

Was kann / ist hier der Fehler , warum verweigert mir Windows mit dem Scrit den Zugriff.
Auch Test mit anderen Ordnern brachte keine Lösung.

Grüße aus München

Content-ID: 291412

Url: https://administrator.de/contentid/291412

Ausgedruckt am: 15.11.2024 um 05:11 Uhr

emeriks
emeriks 20.12.2015 um 20:39:27 Uhr
Goto Top
Hi,
wie wird denn das Script ausgeführt? Scheduled Task? Falls ja, unter welchem Benutzer?
Macht es einen Unterschied, ob man es als Scheduled Task ausführt oder manuell z.B. über Explorer oder CMD gestartet?
Macht es einen Unterschied, wenn man das Script "als Administrator" ausführt?

E.
thomas1972
thomas1972 20.12.2015 aktualisiert um 20:51:05 Uhr
Goto Top
Es wird per weiterem Aufruf aus einer BAT Datei gestartet ( CMD),
aber auch der Aufruf manuell aus dem entsprechenden Verzeichnis schlägt fehl.
Auch als Ausführen als Administrator gibt es Probleme.

Gäbe es sonst die Möglichkeit innerhalb von Dateien Inhalte Suchen und ersetzen zu lassen?

Wundert mich alles, da seit Sep. 2009. das Script jeden Tag ausgeführt wird.

Danke für die Antwort
thomas1972
thomas1972 20.12.2015 um 22:55:09 Uhr
Goto Top
Konnte den Fehler auf alle Ordern, welche Temp im Namen haben eingrenzen, sobald ich auf andere Ordner zurück greife geht dieses.
was kann hier die Ursache sein?
rubberman
rubberman 21.12.2015 um 12:08:44 Uhr
Goto Top
Hallo thomas1972,

eventuell solltest du mal versuchen explizit zum Lesen und Schreiben zu öffnen und ordnungsgemäß zu schließen. Ungetestet:
Ordner = "C:\Temp\"  
Typ = "csv" 'in Kleinbuchstaben  

Set fso = CreateObject("Scripting.FileSystemObject")  
For Each Datei In fso.GetFolder(Ordner).Files
    If LCase(fso.GetExtensionName(Datei.Name)) = Typ Then
        With Datei.OpenAsTextStream(1)
            T = .ReadAll
            .Close
        End With
        With Datei.OpenAsTextStream(2)
            .Write Mid(Replace(T, ",", ";"), InStr(T, vbNewline) + 2)  
            .Close
        End With
    End If
Next


Grüße
rubberman
114757
114757 21.12.2015 aktualisiert um 12:14:45 Uhr
Goto Top
Oder auch die Powershell in der CMD benutzen:
powershell -ExecutionPolicy ByPass -Command "gci 'c:\temp\*.csv' | %%{(gc $_.FullName) -replace ',',';' | set-content $_.FullName}"  
Gruß jodel32
sayyes2IT
sayyes2IT 23.05.2024 um 16:48:02 Uhr
Goto Top
Wir haben bei uns im Haus einen Server, auf dem über den Aufgabenplaner mehrere Scripte zu unterschiedlichen Zeiten gestartet werden. Das funktioniert auch schon seit Jahren soweit ohne Probleme.

Vor ein paar Tagen funktionierte dann plötzlich der zeitgesteuerte Aufruf eines dieser Scripte nicht mehr. Bei der Fehlersuche habe ich versucht, das Script manuell zu starten und bekam dann auch die Fehlermeldung "Code 800A0046 Erlaubnis Verweigert".

Nach 2tägiger Recherche und Fehlersuche innerhalb des Scripts, habe ich dann irgendwann festgestellt, dass im Taskmanager ca. 40 "Windows Scripting Host" Tasks liefen.

Nach beenden aller gleichnamigen Tasks hat alles wieder wie gewünscht funktioniert. Anscheinend ist es so, dass jeder Task eines verunglückten VB Scriptaufrufs, bis zum nächsten Neustart des entsprechenden Rechners im Arbeitsspeicher verweilt.

Ich werde jetzt in alle Scripte eine Abfrage einbauen, die im Falle eines Fehlers innerhalb des Scripts, den Task abschießt.

Gruß
sayYES2IT