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
会变成正常的错误上
请看我的ETA。如果我做错了,请告诉我。 – lightwing