簡體   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