当使用object.writeline时,Vbscript运行时错误对象变量未设置



我正在创建一个脚本,使用vbscript从远程服务器下载更新文件([server_path]local.swf)。该脚本将通过Windows命令行运行,并接受参数。其中一个参数是new_hash,它包含要下载的文件的哈希值。这个哈希值将用于与我的pc (c:mcgfilesavplocal.swf)中已经存在的文件的哈希值进行比较。如果相同,记录注释,什么都不做。如果没有,那么下载local.swf并将其放在临时文件夹c:mcgfilesavp-temp中。由于vbscript将访问sftp服务器来下载文件,我在脚本中做了一些延迟,并检查文件是否已下载,然后再进行下一步。如果文件已经到位,我将在同一个文件夹c:mcgfilesavp-temp中创建一个hash.txt,读取它,然后与通过脚本传递的哈希值进行比较。运行脚本时出现错误:

当使用object.writeline时,vbscript运行时错误对象变量未设置

下面是我的脚本:
Option Explicit
Dim Arg, hostname, new_hash, file_version
Dim obj, objLogActivity, objLogStatus, objLogProgram, objCurrHashFile, shellSFTP, WshShell
Dim tmp, datestamp, datestamp2, logCommand, current_hash, comparison, updateAVP, logfile, commandfile, retryLocalSWF
Dim tokenGenHash, retryHashTXT, tokenReadHash, objDownHashFile, downloaded_hash
Set Arg = WScript.Arguments
hostname = Arg(0)
new_hash = Arg(1)
file_version = Arg(2)
tmp=now()
datestamp = DatePart("yyyy",tmp) & "-" & Right("00" & DatePart("m",tmp),2) & "-" & Right("00" & DatePart("d",tmp),2)
datestamp2 = DatePart("yyyy",tmp)&Right("00" & DatePart("m",tmp),2)&Right("00" & DatePart("d",tmp),2)&Right("00" & DatePart("H",tmp),2)&Right("00" & DatePart("n",tmp),2)&Right("00" & DatePart("s",tmp),2)
Set obj = CreateObject("Scripting.FileSystemObject")
Set objLogActivity = obj.CreateTextFile("C:mcgfileslogsactivityactivity_"& hostname &"_"&datestamp&".log")
objLogActivity.Close
Set objLogStatus = obj.CreateTextFile("C:mcgfileslogsstatusstatus_"& hostname &"_"&datestamp&".log")
objLogStatus.Close
If obj.FileExists("C:mcgfileslogsprogramprogram_"&hostname&"_"&datestamp&".log") then
    logCommand = 8
Else
    logCommand = 2
    Set objLogProgram = obj.CreateTextFile("C:mcgfileslogsprogramprogram_"&hostname&"_"&datestamp&".log")
    objLogProgram.Close
End If
Set objLogActivity = obj.OpenTextFile("C:mcgfileslogsactivityactivity_"& hostname &"_"&datestamp&".log",2)
Set objLogStatus = obj.OpenTextFile("C:mcgfileslogsstatusstatus_"& hostname &"_"&datestamp&".log",2)
Set objLogProgram = obj.OpenTextFile("C:mcgfileslogsprogramprogram_"&hostname&"_"&datestamp&".log",logCommand)
Set objCurrHashFile = obj.OpenTextFile("C:mcgfilesavphash.txt",1)
current_hash = objCurrHashFile.ReadLine
objCurrHashFile.Close
comparison = StrComp(new_hash, current_hash)
If comparison = 0 Then
    objLogProgram.WriteLine datestamp2&vbTab&Wscript.ScriptName&vbTab&"INFO"&vbTab&"UPDATE STOPPED. AVP FILE IN LOCAL IS UPDATED."
    objLogProgram.Close
    objLogActivity.Write datestamp2&vbTab&Wscript.ScriptName&vbTab&"INFO"&vbTab&"AVP IN LOCAL IS CURRENTLY UPDATED."
    objLogActivity.Close
    objLogStatus.Write "8"&vbTab&datestamp2
    objLogStatus.Close
    updateAVP = False
Else
    logfile = "c:mcgfileslogsprogramupdateAVPSFTPLogs_"&datestamp&".log"
    commandfile = "c:scriptsupdateAVPSFTPCommands.txt"
    Set shellSFTP=createobject("wscript.shell")
    shellSFTP.run "cmd /k c:scriptspsftp -i c:scriptsrsa_id.ppk root@192.168.22.144 -be -b "&commandfile&" >"&logfile,0
    Set shellSFTP = Nothing
    updateAVP = True
End If
If updateAVP = True Then
    objLogProgram.WriteLine datestamp2&vbTab&Wscript.ScriptName&vbTab&"INFO"&vbTab&"OPENING SFTP FOR AVP FILE TRANSFER"
    objLogProgram.Close
    retryLocalSWF = 3
    Do While retryLocalSWF > 0
        If obj.FileExists("C:mcgfilesavp-templocal.swf") Then
            tokenGenHash = True 
            retryLocalSWF = retryLocalSWF - 3
        Else
            Wscript.Sleep 10000
            tokenGenHash = False
            retryLocalSWF = retryLocalSWF - 1           
        End If
    Loop
End If
If tokenGenHash = True Then
    objLogProgram.WriteLine datestamp2&vbTab&Wscript.ScriptName&vbTab&"SUCCESS"&vbTab&"AVP SUCCESSFULLY DOWNLOADED. GENERATING HASH FOR VALIDITY"
    objLogProgram.Close
    Set WshShell= Wscript.CreateObject("Wscript.Shell")
    WshShell.Run "C:windowssystem32WindowsPowerShellv1.0powershell.exe $someFilePath = 'C:mcgfilesavp-templocal.swf';$md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider;$md5hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($someFilePath)));$newmd5hash = $md5hash -replace '-','';$newmd5hash.ToLower() | Out-File 'C:mcgfilesavp-temphash.txt' -Encoding Default; return $newmd5hash.ToLower()",0
    retryHashTXT = 0
    Do While retryHashTXT < 3
        If obj.FileExists("C:mcgfilesavp-temphash.txt") Then
            tokenReadHash = True
            retryHashTXT = retryHashTXT + 3
        Else
            Wscript.Sleep 10000
            tokenReadHash = False
            retryHashTXT = retryHashTXT + 1
        End If
    Loop        
Else
    objLogProgram.WriteLine datestamp2&vbTab&Wscript.ScriptName&vbTab&"ERROR"&vbTab&"AVP WAS NOT TRANSFERRED PROPERLY."
    objLogProgram.Close
    objLogActivity.WriteLine datestamp2&vbTab&Wscript.ScriptName&vbTab&"ERROR"&vbTab&"AVP WAS NOT TRANSFERRED PROPERLY."
    objLogActivity.Close
    objLogStatus.Write "9"&vbTab&datestamp2
    objLogStatus.Close
End If
If tokenReadHash = True Then
    Set objDownHashFile = obj.OpenTextFile("C:mcgfilesavp-temphash.txt",1)
    downloaded_hash = objDownHashFile.ReadLine
    objDownHashFile.close
End If

Thanks in advance

看起来它可能取决于参数,但似乎脚本有可能在关闭objLogProgram后尝试写入

If comparison = 0 Then
    objLogProgram.WriteLine datestamp2&vbTab&Wscript.ScriptName&vbTab&"INFO"&vbTab&"UPDATE STOPPED. AVP FILE IN LOCAL IS UPDATED."
    objLogProgram.Close

If tokenGenHash = True Then
    objLogProgram.WriteLine datestamp2&vbTab&Wscript.ScriptName&vbTab&"SUCCESS"&vbTab&"AVP SUCCESSFULLY DOWNLOADED. GENERATING HASH FOR VALIDITY"
    objLogProgram.Close
    ' ...
Else
    objLogProgram.WriteLine datestamp2&vbTab&Wscript.ScriptName&vbTab&"ERROR"&vbTab&"AVP WAS NOT TRANSFERRED PROPERLY."
    objLogProgram.Close
    ' ...

最新更新