VBA获取计算机VPN状态

我试图build立到我的代码中,看看计算机是否可以访问它访问的SQL Server。

问题是,我不能只是得到networking状态,以达到计算机需要在VPN上的SQL Server(通过思科)

我已经看到了VBA中的思科API参考,但不知道如何使用它,也不能100%确定这是一个安全的testing方法

我有两个想法:

  1. 平的SQL Server(我的首选) – 我试过使用这个代码,但它只是回来与“通过”服务器是否连接

我的function:

Sub test() ' SQL Server address instead of xxxxxxx If Ping("xxxxxxx") Then MsgBox "Passed", vbOKOnly Else MsgBox "Failed", vbOKOnly End If End Sub Public Function Ping(ByVal ComputerIP As String) As Boolean 'You can use also name of computer ' Return TRUE, if pin was successful Dim oPingResult As Variant For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _ ("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerName & "'") If IsObject(oPingResult) Then If oPingResult.StatusCode = 0 Then Ping = True 'Debug.Print "ResponseTime", oPingResult.ResponseTime 'You can also return ping time Exit Function End If End If Next End Function 
  1. 我的另一个想法是,如果计算机连接到VPN以太网LAN适配器更改为具有连接特定的DNS后缀(但是,我认为这是一个虚拟适配器,所以我不能只testing名称,因为它可能不在在重复的testing中相同的适配器

因此,我的第二个想法是扫描所有连接检索其连接特定的dns后缀,并testing正确的名称,但我不知道如何提取此信息。

修正了上面的代码 – 刚才意识到我正在调用错误的variables来ping。

应该:

Sub test() ' SQL Server address instead of xxxxxxx If Ping("xxxxxxx") Then MsgBox "Passed", vbOKOnly Else MsgBox "Failed", vbOKOnly End If End Sub Public Function Ping(ByVal ComputerIP As String) As Boolean 'You can use also name of computer ' Return TRUE, if pin was successful Dim oPingResult As Variant For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _ ("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerIP & "'") If IsObject(oPingResult) Then If oPingResult.StatusCode = 0 Then Ping = True 'Debug.Print "ResponseTime", oPingResult.ResponseTime 'You can also return ping time Exit Function End If End If Next End Function

现在工作