VBScript错误“权限被拒绝”,但无论如何工作

问题描述:

我有一个VBScript设置作为我的GPO登录脚本。我有一个问题,即在每次运行在登录时,我得到许可被拒绝上线:VBScript错误“权限被拒绝”,但无论如何工作

set lf = fso.opentextfile(lfp, 2, true) 

问题的兴趣:

  • 尽管出现错误,脚本成功完成。
  • 如果我手动运行脚本,脚本无错地执行。
  • lfp变量指向c:\ folder \ folder \ file.log。该文件被创建(必要时)并被适当地填充(覆盖,如预期的那样存在)。
  • 如果文件已创建,则在尝试打开文本文件之前关闭fso。
  • 当用户登录时,它通过继承的Authenticated Users权限(来自c:\ folder1 - 见下文)具有修改路径和正在替换的文件的权限。
  • 如果我在该行之前插入一个wscript.sleep 30000,它只会等待30秒抛出权限被拒绝。
  • 如果用户是PC上本地管理员组的成员,则不会出现错误。同样,当用户不是本地管理员时,它会出错,但成功完成。
  • 我看到在这两个Windows 7和10

我不知所措我在这里相同的行为。下面是代码的相关部分(请原谅任何糟糕的编码实践):

'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.... 

我想抑制所有错误是一种选择,但1)我宁愿不要,和2)我不是怎么清楚在VBScript中完成。

ETA:

On Error Resume Next 
    Set lf = fso.OpenTextFile(lfp, 2, True) 
On Error Goto 0 

我测试这一点,它打破了脚本。因为错误,lf未被设置,所以下面的行错误地出现'预期的对象'代码800a01a8'所需的对象'。

处理回我不喜欢这样做,但我的工作大约是从.bat启动该.vbs(个人喜好 - 我喜欢将一件作业放在一个脚本中,以便将来我不必追逐文件)。

我在我的GPO中登录logon.bat文件作为登录脚本。

@echo off 
echo Launching update script... 

cscript c:\folder1\script.vbs 

这似乎解决了我(有明显错误)的权限问题。我仍然好奇,是否有人能够确切地告诉我为什么我看到了我所看到的行为。当调用OpenTextFile(直接从GPO启动时)脚本引擎写入临时位置时,可能只有管理员用户才能访问?

On Error Resume Next会忽略错误,则On Error Goto 0会变成正常的错误上

+0

请看我的ETA。如果我做错了,请告诉我。 – lightwing