繁体   English   中英

VBScript错误“权限被拒绝”但仍然有效

[英]VBScript Error “Permission Denied” But Works Anyway

我在我的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,因此以下各行均出现错误,如预期的那样,出现了“ object required“ lf””代码800a01a8。

On Error Resume Next将忽略该错误,然后On Error Goto 0将重新打开常规错误处理

我不喜欢这样做,但是我的解决方法是从.bat中启动.vbs(个人喜好-我喜欢将一项工作中的所有内容保留在一个脚本中,因此将来不必去追逐文件周围)。

我在我的GPO中放置了一个logon.bat文件作为登录脚本。

@echo off
echo Launching update script...

cscript c:\folder1\script.vbs

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM