0

如果它有效,应该检查互联网连接,如果有连接它什么都不做。如果没有连接,它应该在 txtfile 中写入一个错误,如果这种情况发生 5 次,它应该会产生一个错误,但它不会

我将向您展示我现在拥有的整个代码以及我想要循环的一段代码。我无法以我想要的方式得到它。我希望它在写入文件 5 次后创建 1 个事件错误。

这是整个代码,我将把我想要的代码放在它下面的循环中

strDirectory = "Z:\text2"
strFile = "\foutmelding.txt"
strText = "De connectie is verbroken" 
strWebsite = "www.helmichbeens.com"


If PingSite(strWebsite) Then WScript.Quit    'Website is pingable - no further action required
Set objFSO = CreateObject("Scripting.FileSystemObject")

RecordSingleEvent
Dim fout 
For fout = 1 To 5 : Do
    If fout = 5 Then Exit Do

        Set WshShell = WScript.CreateObject("WScript.Shell")
        Call WshShell.LogEvent(1, "Test Event")
Loop While False : next

'------------------------------------
'Record a single event in a text file
'------------------------------------
Sub RecordSingleEvent
    If Not objFSO.FolderExists(strDirectory) Then objFSO.CreateFolder(strDirectory)
    Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, 8, True)
    objTextFile.WriteLine(Now & strText)
    objTextFile.Close
End sub
'----------------
'Ping my web site
'----------------
Function PingSite( myWebsite )
    Set objHTTP = CreateObject( "WinHttp.WinHttpRequest.5.1" )
    objHTTP.Open "GET", "http://" & myWebsite & "/", False
    objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MyApp 1.0; Windows NT 5.1)"
    On Error Resume Next
    objHTTP.Send
    PingSite = (objHTTP.Status = 200)
    On Error Goto 0
End Function
'-----------------------------------------------
'Counts the number of lines inside the text file
'-----------------------------------------------
Function EventCount(fout)
    strData = objFSO.OpenTextFile(strDirectory & strFile,ForReading).ReadAll
    arrLines = Split(strData,vbCrLf)
    EventCount = UBound(arrLines)
End Function

这是整个代码,它不能正常工作,因为它会立即创建一个事件日志,并且应该在脚本向文本文件写入 5 次后这样做

这是写入文本文件的代码

Sub RecordSingleEvent
    If Not objFSO.FolderExists(strDirectory) Then objFSO.CreateFolder(strDirectory)
    Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, 8, True)
    objTextFile.WriteLine(Now & strText)
    objTextFile.Close
End sub

这是代码,但这部分不起作用或至少我认为是这部分

Dim fout 
For fout = 1 To 5 : Do
    If fout = 5 Then Exit Do

        Set WshShell = WScript.CreateObject("WScript.Shell")
        Call WshShell.LogEvent(1, "Test Event")
Loop While False : next

Function EventCount(fout)
    strData = objFSO.OpenTextFile(strDirectory & strFile,ForReading).ReadAll
    arrLines = Split(strData,vbCrLf)
    EventCount = UBound(arrLines)
End Function

这是不工作的部分,我不知道该怎么做,所以你能不能看看它让你非常沮丧。

顺便说一句:此代码对网络管理员非常有用

4

1 回答 1

0

你用你的for do while false next loop. 早期转义也可以通过 for 循环本身来完成:

Dim fout, WshShell
Set WshShell = WScript.CreateObject("WScript.Shell") ' Get this out of the loop, you only have to create it once.

For fout = 1 To 5
    if fout = 5 then exit for
    Call WshShell.LogEvent(1, "Test Event")
next

我建议使用Option Explicit. 你使用了很多我从未见过初始化的变量。此外,您使用ForReading的 this 不是 VBScript 关键字,您必须为其分配正确的值。您可以将其设为全局常量:

Const ForReading = 1

如果您使用 Option Explicit,您会发现这一点。

尝试制作适用于其参数而不是外部全局变量的函数。因此将函数重构EventCount为:

Function EventCount(logFilePath)
    dim strData, arrLines
    strData = objFSO.OpenTextFile(logFilePath, ForReading).ReadAll
    arrLines = Split(strData,vbCrLf)
    EventCount = UBound(arrLines) + 1
End Function

您是否注意到foutEventCount 函数中从未使用过?

您还希望将 EventCount 增加 1,因为数组的索引为零(对于空数组,ubound 将返回 -1)。计数始终定义为与索引相反的项目的确切数量。

编辑:阅读您的逻辑,我认为您想这样做:

Dim fout, objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Ping the website five times
For fout = 1 to 5
    If PingSite(strWebsite) Then Exit For    'Website is pingable - no further action required

    ' The website was not pingable, write it to a logfile
    RecordSingleEvent

    ' The website was not pingable five times in a row, log it to the eventlogger
    If fout = 5 then
        Set WshShell = WScript.CreateObject("WScript.Shell")
        Call WshShell.LogEvent(1, "Test Event")
    End if

Next

' We are done.
WScript.Quit
于 2013-11-06T09:49:59.377 回答