2017-01-31 15 views
0

GPOにログオンスクリプトとしてVBScriptセットアップがあります。関心のVBScriptエラー「アクセス許可が拒否されました」しかし、とにかく動作

set lf = fso.opentextfile(lfp, 2, true) 

ポイント:エラーが発生しても

  • 、スクリプトが正常に完了し、私はそれがログオン時に実行されるたびに、私はライン上で権限拒否を取得する問題を抱えています。
  • 手動で実行すると、スクリプトはエラーなく実行されます。
  • lfp変数がc:\ folder \ folder \ file.logを指しています。ファイルは(必要に応じて)作成され、適切に配置されます(存在する場合は、予想どおりに上書きされます)。
  • ファイルが作成された場合、opentextfileを実行する前にfsoが閉じられます。
  • ログインしたユーザーには、継承された認証済みユーザーアクセス許可(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"' code 800a01a8と期待通りにエラーアウトします。私が好き -

答えて

0

に戻って処理し、通常のエラーを向けるだろう、私はこれをやって好きではありませんが、周りの私の仕事は、.BAT(個人的な好みから.vbsファイルを起動することでしたエラーを無視します1つのスクリプトの中で1つのジョブからすべてを保持するように、将来私はファイルを追いかける必要はありません)。

ログオンスクリプトとして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

関連する問題