Ich habe ein VBScript-Setup als ein Anmeldeskript in meinem GPO. Ich bin ein Problem mit der jedesmal, wenn es bei der Anmeldung läuft, ich Erlaubnis auf der Linie verweigert bekommen:VBScript-Fehler "Zugriff verweigert" aber trotzdem funktioniert
set lf = fso.opentextfile(lfp, 2, true)
Points of Interest:
- Trotz der Fehler, vervollständigt das Skript erfolgreich.
- Das Skript wird ohne Fehler ausgeführt, wenn ich es manuell ausführe.
- Die Variable lfp verweist auf c: \ Ordner \ Ordner \ Datei.log. Die Datei wird erstellt (falls erforderlich) und entsprechend ausgefüllt (überschrieben, wie erwartet, wenn sie existiert).
- Wenn die Datei erstellt wird, wird der Fso geschlossen, bevor versucht wird, Textdatei zu öffnen.
- Der Benutzer, der sich anmeldet, hat Änderungsberechtigung für den Pfad und für die Datei, die ersetzt wird, wenn er über die geerbte Berechtigung für authentifizierte Benutzer existiert (von c: \ folder1 - siehe unten).
- Wenn ich ein wscript.sleep 30000 kurz vor dieser Zeile einwerfen, wartet es nur 30 Sekunden, um die verweigerten Berechtigungen zu werfen.
- Wenn Benutzer ein Mitglied der lokalen Administratorengruppe auf dem PC ist, erhalte ich keine Fehler. Wenn der Benutzer kein lokaler Administrator ist, wird er erneut ausgeführt, aber erfolgreich abgeschlossen.
- Ich sehe das gleiche Verhalten sowohl unter Windows 7 und 10.
ich hier bei einem Verlust bin. Hier ist der betreffende Abschnitt des Codes (bitte irgendeine schlechte Codierung Praxis entschuldigen):
'notify robocopy log file location
function seelog(log)
lf.writeline "[" & now & "] " & "See log file for details: " & log
end function
'process robocopy exit codes and write log
function writeerrors(items)
docs = items(0)
retcode = items(1)
logfile = items(2)
if docs = "c" then
name = "some stuff"
else
name = "some other stuff"
end if
If retcode = 0 Then
lf.writeline "[" & now & "] " & name & " folder was already up to date."
elseif retcode = 1 then
lf.writeline "[" & now & "] " & name & " folder was updated."
seelog(logfile)
else
lf.writeline "[" & now & "] " & name & " folder update exited with robocopy error code: " & retcode
seelog(logfile)
End If
end function
'get logged in user
un = CreateObject("WScript.Network").UserName
'check for logfile, and if not exist, create
'folder1 always exists, no need to check or create
lfp = "c:\folder1\folder2\folder3\logfile1.log"
ld1 = "c:\folder1\folder2"
ld2 = "c:\folder1\folder2\folder3"
set fso = createobject("scripting.filesystemobject")
if not fso.fileexists(lfp) then
if not fso.folderexists(ld1) then
fso.createfolder(ld1)
end if
if not fso.folderexists(ld2) then
fso.createfolder(ld2)
end if
set cf = fso.createtextfile(lfp)
cf.close
end if
'open logfile (lfp variable)
'for writing (2)
'overwrite if already exists (true)
wscript.sleep 30000
'************permission denied happens on next line on lfp var*************
Set lf = fso.OpenTextFile(lfp, 2, True)
lf.writeline "[" & now & "] " & "Script started."
lf.writeline "[" & now & "] " & "Logged in user: " & un
lf.writeline "[" & now & "] " & "========================================================="
more code writing to log file and executing robocopy....
Ich nehme an, alle Fehler zu unterdrücken ist eine Option, aber 1) Ich möchte lieber nicht, und 2) Ich bin mir nicht klar, wie man um das in VBScript zu erreichen.
ETA:
On Error Resume Next
Set lf = fso.OpenTextFile(lfp, 2, True)
On Error Goto 0
Getestet habe ich diese und es macht das Drehbuch brechen. Wenn der Fehler nicht gesetzt ist, werden die folgenden Zeilen mit 'object required' lf '' code 800a01a8 wie erwartet ausgegeben.
Bitte scheinen meine ETA. Wenn ich es falsch mache, lass es mich wissen. – lightwing