0

我必须编写一个文件以使用静态 IP 的输入将 IP 设置更改为静态。编写一个执行此操作的文件(通过 BATCH 或 VBS)并不难,但问题是连接的名称,标准窗口是本地连接,但它必须适用于每个连接,即使 i(对于示例)重命名我的连接以进行测试。还有一些人有2个或更多的连接,只有标准的一个应该被改变,其他的应该被禁用(WIFI,Hamachi等)。它将在 LAN-Party 上用于快速将每个人的 IP 地址更改为给定的 IP 地址(必须有某种输入),而不是手动工作(需要 200 多人的大量时间)。

你们能给我一些提示/例子吗?

提前致谢, 巴特

4

1 回答 1

0

我不久前出于类似的目的写了这篇文章。

它有点费力,但基本上它会询问用户要修改哪个网络连接,然后询问他们是否要打开 DHCP 或键入手动 IP 地址。我想登录的用户需要管理权限来改变这个

Option Explicit

Const SCRIPT_NAME = "Set IP"
Const SUBNET_MASK = "255.255.255.0"

Dim objWMI
Dim arrNANames
Dim colNa, objNa
Dim colNAConfig, objNAConfig
Dim strIP
Dim intIPRet
Dim intCount, strSelectString, intSelected

Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
Set colNA = objWMI.ExecQuery("select * from Win32_NetworkAdapter")

ReDim arrNANames(colNA.Count)
intCount = 0
strSelectString = "Select a network adapter to modify:" & vbCrLf
For Each objNa In colNa
    arrNANames(intCount) = objNA.Name
    strSelectString = strSelectString & intCount & ")  " & arrNANames(intCount) & vbCrLf
    intCount = intCount + 1
Next

Do
    intSelected = inputbox(strSelectString, SCRIPT_NAME)
    If intSelected = "" Or Not IsNumeric(intSelected) Then
        quitScript
    End If
Loop Until CInt(intSelected) < UBound(arrNANames) And CInt(intSelected) > -1

Set colNA = objWMI.ExecQuery("select * from Win32_NetworkAdapter where Name='" & arrNANames(intSelected) & "'")

For Each objNA In colNA
    Set colNAConfig = objWMI.ExecQuery("ASSOCIATORS OF {Win32_NetworkAdapter.DeviceID='" & objNA.DeviceID & "'} WHERE resultClass = win32_NetworkAdapterConfiguration ")
    For Each objNAConfig In colNAConfig
        If MsgBox("Do you want to enable automatic IP (DHCP/APIPA) for device " & chr(34) & objNa.Name & chr(34), vbQuestion+vbYesNo, SCRIPT_NAME) = vbYes Then
            intIPRet = objNAConfig.EnableDHCP
            Select Case intIPRet
                Case 0      MsgBox "DHCP enabled successfully", vbInformation, SCRIPT_NAME
                Case 1      MsgBox "DHCP enabled successfully" & vbCrLf & "Please reboot for changes to take effect", vbInformation, SCRIPT_NAME
                Case Else   MsgBox "Could not enable DHCP", vbCritical, SCRIPT_NAME
            End Select
        Else
            Do
                strIP = inputbox("Type an IP for network adapter: " & objNA.Name, SCRIPT_NAME)
                If strIP = "" Then
                    quitScript
                End If
            Loop Until isValidIP(strIP)
            intIPRet = objNAConfig.EnableStatic(Array(strIP),Array(SUBNET_MASK))
            Select Case intIPRet
                Case 0      MsgBox "IP changed to " & strIP, vbInformation, SCRIPT_NAME
                Case 1      MsgBox "IP changed to " & strIP & vbCrLf & "Please reboot for changes to take effect", vbInformation, SCRIPT_NAME
                Case Else   MsgBox "Could not change IP", vbCritical, SCRIPT_NAME
            End Select
        End If
    Next
Next

quitScript

'returns true if the parameter is a valid IP address
Function isValidIP(ip)
    Dim arrNums, intNum

    arrNums = Split(ip, ".")
    If UBound(arrNums) <> 3 Then
        isValidIP = False
        Exit Function
    End If
    For Each intNum In arrNums
        If Not IsNumeric(intNum) Then
            isValidIP = False
            Exit Function
        End If
        If intNum < 0 Or intNum > 255 Then
            isValidIP = False
            Exit Function
        End If
        If Len(intNum) > 1 And Left(intNum,1) = "0" Then
            isValidIP = False
            Exit Function
        End If
    Next
    isValidIP = True
End Function

Sub quitScript
    Set objWMI = Nothing
    Set colNa = Nothing
    WScript.Quit
End Sub
于 2013-11-11T11:34:33.363 回答