2017-01-31 84 views
0

我有一個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'所需的對象'。

回答

0

處理回我不喜歡這樣做,但我的工作大約是從.bat啓動該.vbs(個人喜好 - 我喜歡將一件作業放在一個腳本中,以便將來我不必追逐文件)。

我在我的GPO中登錄logon.bat文件作爲登錄腳本。

@echo off 
echo Launching update script... 

cscript c:\folder1\script.vbs 

這似乎解決了我(有明顯錯誤)的權限問題。我仍然好奇,是否有人能夠確切地告訴我爲什麼我看到了我所看到的行爲。當調用OpenTextFile(直接從GPO啓動時)腳本引擎寫入臨時位置時,可能只有管理員用戶才能訪問?

0

On Error Resume Next會忽略錯誤,則On Error Goto 0會變成正常的錯誤上

+0

請看我的ETA。如果我做錯了,請告訴我。 – lightwing