我正在尝试使用 netsh 脚本更改无头机箱的 IP 地址。除非发生 IP 冲突,否则此方法可行。当发生 IP 地址冲突时,我会看到一个对话框,其中显示“刚刚配置的静态 IP 地址已在网络上使用。请重新配置其他 IP 地址。”在这种情况下,netsh 会挂起,等待有人确认对话框。
我不会使用脚本,而使用脚本的用户有时肯定会导致 IP 冲突。有没有办法让 netsh 只返回错误代码?任何方法都比挂起要好。
答案1
我怀疑该对话框不是由 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 数据包,间隔 2 秒,并检查包含“回复来自”的响应。您甚至可以配置脚本以增加 IP 地址并重试,直到找到未使用的地址。
您也可以尝试使用 nslookup 进行类似的操作,因为仅当具有冲突 IP 的计算机当前处于打开状态时,ping 才会起作用。
答案2
我发现最好的方法是等待一段时间,然后如果 netsh 进程尚未完成,则终止该进程。我通过从 C# 为 netsh 生成一个单独的进程来实现这一点。