2017-01-31 5 views
0

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.

Antwort

0

Handhabung zurück ich mag das nicht tun, aber meine Arbeit um war, die vbs von einer .bat (persönliche Präferenz zu starten - Ich mag um alles von einem Job in einem Skript zu halten, muss ich in der Zukunft keine Dateien mehr durchsuchen.

Ich habe eine logon.bat-Datei in meinem Gruppenrichtlinienobjekt als Anmeldeskript platziert.

Dies scheint um das (scheinbar falsche) Berechtigungsproblem zu funktionieren, das ich hatte. Ich bin immer noch neugierig, ob mir jemand genau sagen kann, warum ich das Verhalten sah, das ich sah. Setzt die Skript-Engine möglicherweise an einen temporären Speicherort, wenn OpenTextFile aufgerufen wird (wenn direkt vom Gruppenrichtlinienobjekt aus gestartet wird), auf die nur Administratoren zugreifen können?

0

On Error Resume Next den Fehler ignorieren dann On Error Goto 0 wird die normale Fehler einschalten

+0

Bitte scheinen meine ETA. Wenn ich es falsch mache, lass es mich wissen. – lightwing

Verwandte Themen