运行netsh时如何避免对话框

我试图用一个netsh脚本来改变一个无框的IP地址。 这工作正常,除非有知识产权冲突。 发生IP地址冲突时,会看到一个对话框,提示“刚刚configuration的静态IP地址已在networking中使用,请重新configuration其他IP地址”。 在这种情况下,netsh只是等待有人确认对话框。

我不会是使用这个脚本的人,而且这个用户有时会造成IP冲突。 有没有办法让netsh只是返回一个错误代码呢? 任何事情都会比悬挂更好。

我怀疑netsh没有显示对话框,而是在操作系统检测到IP地址冲突时显示。

您可以尝试ping所需的IP地址,如果没有获得响应,则假定地址是空闲的,并使用netsh进行设置。 下面的vbscript提供了一个例子:

Set oShell = CreateObject("WScript.Shell") Set oExec = oShell.Exec("ping -n 2 -w 2000 192.168.2.3") sResult = LCase(oExec.StdOut.ReadAll) If InStr(sResult, "reply from") Then WScript.Echo "IP address is in use" Else oShell.Run "netsh interface ip set address name=" _ & Chr(34) & "Local Area Connection" _ & Chr(34) & " static 192.168.2.3 255.255.255.0 192.168.2.1 1", 1, 1 End If 

该脚本发送两个相隔2秒的ping数据包,并检查包含“reply from”的响应。 您甚至可以configuration脚本来增加IP地址,然后重试,直到find未使用的地址。

您也可以使用nslookup尝试类似的方法,因为只有当冲突IP的计算机当前处于打开状态时,ping才会起作用。

我发现最好的办法是等待一段时间,然后杀死netsh进程,如果没有完成的话。 我是通过从C#中为netsh产生一个单独的进程来完成的。