Vba 确定远程PC是否联机的最快方法

Vba 确定远程PC是否联机的最快方法,vba,ping,filesystemobject,Vba,Ping,Filesystemobject,我倾向于对远程PC运行很多命令,但我总是先检查它们是否在线。我目前使用以下代码: If objFSO.FolderExists("\\" & strHost & "\c$") Then 'The PC is online so do your thing 但是,当远程电脑不在线时,我的笔记本电脑需要约45秒才会超时,并解析为FALSE 有没有办法加快超时时间?或者是否有另一种易于实施的解决方案来确定PC是否在线 您可以使用WMI对其进行ping操作 Function I

我倾向于对远程PC运行很多命令,但我总是先检查它们是否在线。我目前使用以下代码:

If objFSO.FolderExists("\\" & strHost & "\c$") Then
    'The PC is online so do your thing
但是,当远程电脑不在线时,我的笔记本电脑需要约45秒才会超时,并解析为
FALSE


有没有办法加快超时时间?或者是否有另一种易于实施的解决方案来确定PC是否在线

您可以使用
WMI
对其进行ping操作

Function IsOnline(strHost As String) As Boolean

    Dim strQuery As String
    strQuery = "select * from Win32_PingStatus where Address = '" & strHost & "'"

    Dim colItems As Object
    Set colItems = GetObject("winmgmts://./root/cimv2").ExecQuery(strQuery)

    Dim objItem As Object
    For Each objItem In colItems
        If IsObject(objItem) Then
            If objItem.StatusCode = 0 Then
                IsOnline = True
                Exit Function
            End If
        End If
    Next

End Function

您可以使用
WMI
对其进行ping操作

Function IsOnline(strHost As String) As Boolean

    Dim strQuery As String
    strQuery = "select * from Win32_PingStatus where Address = '" & strHost & "'"

    Dim colItems As Object
    Set colItems = GetObject("winmgmts://./root/cimv2").ExecQuery(strQuery)

    Dim objItem As Object
    For Each objItem In colItems
        If IsObject(objItem) Then
            If objItem.StatusCode = 0 Then
                IsOnline = True
                Exit Function
            End If
        End If
    Next

End Function

您可以使用ping请求的返回代码:

Function HostIsOnline(hostname)
    Set oShell     = WScript.CreateObject("WScript.Shell")
    Set oShellExec = oShell.Exec("ping -n 1 " & hostname)

    While oShellExec.Status = 0
        WScript.Sleep(100)
    Wend

    HostIsOnline = (oShellExec.ExitCode = 0)
End Function

您可以使用ping请求的返回代码:

Function HostIsOnline(hostname)
    Set oShell     = WScript.CreateObject("WScript.Shell")
    Set oShellExec = oShell.Exec("ping -n 1 " & hostname)

    While oShellExec.Status = 0
        WScript.Sleep(100)
    Wend

    HostIsOnline = (oShellExec.ExitCode = 0)
End Function

我曾想过在VBA中实现ping,但是…我很懒:)。我从来没有想过创建一个WScript对象并像那样ping。它工作平稳(约4秒确定电脑处于脱机状态)。WMI方法也很好。这也需要大约4秒钟,这是我最终要走的路线,因为我已经创建了WMI对象,并因此引用了库。另外,它不会弹出dos窗口来短暂窃取焦点。两个答案都很好!我曾想过在VBA中实现ping,但是…我很懒:)。我从来没有想过创建一个WScript对象并像那样ping。它工作平稳(约4秒确定电脑处于脱机状态)。WMI方法也很好。这也需要大约4秒钟,这是我最终要走的路线,因为我已经创建了WMI对象,并因此引用了库。另外,它不会弹出dos窗口来短暂窃取焦点。两个答案都很好!仅供参考。问题被标记为[vba],因此
WScript
对象将不可用。这意味着
CreateObject()
而不是
WScript.CreateObject()
,并且不能使用
WScript.Sleep()
@Bond True。我完全错过了那个标签。我只是基于我错误地认为是VBScript代码的答案。为了子孙后代,我会把它留在这里。仅供参考。问题被标记为[vba],因此
WScript
对象将不可用。这意味着
CreateObject()
而不是
WScript.CreateObject()
,并且不能使用
WScript.Sleep()
@Bond True。我完全错过了那个标签。我只是基于我错误地认为是VBScript代码的答案。为了子孙后代,我将把它留在这里。