我有一個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'所需的對象'。
請看我的ETA。如果我做錯了,請告訴我。 – lightwing