为什么Win32_PingStatus返回不可用的服务器,但手动ping操作

时间:2015-08-06 19:54:44

标签: excel excel-vba server wmi ping vba

我有一个带有主机名列表的excel工作簿。我目前正在使用下面的代码获取每个主机名的IP,并根据服务器的状态将单元格颜色更改为红色和绿色。此代码可以在99%的时间内工作,但有时几次服务器将显示为不可用。但是当我在cmd中手动使用ping时,它显示服务器已启动。手动Ping它也表明往返不是特别长,所以我不认为超时是罪魁祸首。

有没有人知道为什么会这样?

<table id="customers">
    <tbody><tr class="alt"><th> </th>
        <th>1</th>
        <th>2</th>
        <th>3</th>
        <th>4</th>
        <th>5</th>
    </tr>
    <tr class="alt"><td>1</td>
        <td contenteditable='true'>asdasd</td>
        <td contenteditable='true'>153213 </td>
        <td contenteditable='true'>253625213</td>
        <td contenteditable='true'>026426</td>
        <td contenteditable='true' >asdasd</td>
    </tr>

1 个答案:

答案 0 :(得分:0)

有两个问题导致我无法ping某些服务器。

第一个小问题是其中一个主机名后面有一个额外的空格。这将阻止Win32_PingStatus ping正确的服务器。确保在主机名之前和之后删除所有空格。

第二个错误是超时时间。默认情况下,超时为1000毫秒。然而,对于更繁忙的服务器,它有时可能需要更长的时间。我将此添加到我的代码中以将超时延长到4000毫秒,从而解决了定期无法ping的所有服务器。

Set oPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
      ("select * from Win32_PingStatus where address = '" & sHost & "' and timeout = 4000")