VBS怎么修改IP地址和DNS?

HCRM技术_小炮 DNS 2026-05-21 2 1

脚本代码(复制保存为.vbs 文件)

'==========================================================================
' VBScript: 设置静态 IP、子网掩码、网关及 DNS
' 使用方法:以管理员身份运行,修改下方变量值或通过命令行传参
'==========================================================================
' ===== 自定义参数(也可从命令行参数获取) =====
strIP       = "192.168.1.100"        ' 需要设置的 IP 地址
strSubnet   = "255.255.255.0"        ' 子网掩码
strGateway  = "192.168.1.1"          ' 默认网关(可选,可留空)
strDNS1     = "8.8.8.8"              ' 首选 DNS
strDNS2     = "8.8.4.4"              ' 备用 DNS(可选,可留空)
' 要修改的网络适配器描述(部分匹配即可,留空自动选择第一个启用的适配器)
strAdapter  = "以太网"               ' "以太网"、"Wi-Fi"、"" 表示自动
'==========================================================================
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colAdapters = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
Dim bFound : bFound = False
For Each objAdapter in colAdapters
    If strAdapter = "" Or InStr(objAdapter.Description, strAdapter) > 0 Then
        bFound = True
        WScript.Echo "正在修改适配器: " & objAdapter.Description
        
        ' ---------- 1. 设置静态 IP ----------
        arrIP      = Array(strIP)
        arrSubnet  = Array(strSubnet)
        
        ' 如果原来启用了 DHCP,需先禁用
        If objAdapter.DHCPEnabled Then
            objAdapter.EnableStatic arrIP, arrSubnet
        Else
            objAdapter.EnableStatic arrIP, arrSubnet
        End If
        
        ' 检查 EnableStatic 的返回值(0=成功, 1=需要重启, 其它=失败)
        Dim retIP
        retIP = Err.Number   ' 某些情况需要实际返回值,这里简化处理
        If Err.Number <> 0 Then
            WScript.Echo "警告:设置 IP 时出现错误,可能已有相同 IP 或权限不足。"
        End If
        
        ' ---------- 2. 设置网关(如果提供了网关) ----------
        If strGateway <> "" Then
            arrGateway      = Array(strGateway)
            arrGatewayMetric = Array(1)    ' 跃点(通常为 1)
            objAdapter.SetGateways arrGateway, arrGatewayMetric
        End If
        
        ' ---------- 3. 设置 DNS ----------
        ' 构建 DNS 数组(至少包含一个有效 DNS)
        If strDNS2 <> "" Then
            arrDNS = Array(strDNS1, strDNS2)
        ElseIf strDNS1 <> "" Then
            arrDNS = Array(strDNS1)
        Else
            arrDNS = Array()    ' 清空 DNS 设置(使用空数组)
        End If
        
        objAdapter.SetDNSServerSearchOrder arrDNS
        
        ' 检查 SetDNSServerSearchOrder 返回值
        If Err.Number <> 0 Then
            WScript.Echo "警告:设置 DNS 时出现错误,请检查输入格式。"
        End If
        
        WScript.Echo "修改完成!"
        Exit For
    End If
Next
If Not bFound Then
    WScript.Echo "未找到符合要求的网络适配器(" & strAdapter & "),请检查适配器名称。"
End If

如何使用

1、修改参数

直接编辑脚本开头的变量:

strIPstrSubnetstrGatewaystrDNS1strDNS2

strAdapter:网卡描述(可通过ipconfig /all 查看),留空则自动选择第一个启用网卡。

2、以管理员身份运行

- 右键点击脚本文件 → 选择“以管理员身份运行”。

- 或者在管理员命令提示符中执行:cscript //nologo 脚本路径.vbs

3、查看结果

执行完毕后会弹出对话框显示成功与否(如果无交互,可使用cscript 在命令行运行,输出文字)。

常见问题

“拒绝访问”或“权限不足”

请确保以管理员身份运行脚本。

“找不到适配器”

检查strAdapter 是否匹配实际网卡描述(如“以太网”、“WLAN”),可用ipconfig /all 查看。

设置后未生效

某些配置需要重新启动网卡或重启计算机,脚本执行后一般即时生效,但也可用ipconfig /renew 刷新。

想回退到 DHCP

使用以下脚本片段:

  objAdapter.EnableDHCP
  objAdapter.SetDNSServerSearchOrder Array()  ' 清空 DNS,使其自动获取

补充说明

- 本脚本通过WMI 方式修改,兼容 Windows 7/8/10/11 及 Server 系统。

- 如果需要多个网卡同时修改,删除Exit For 即可遍历所有匹配网卡。

- 更健壮的版本还可以检查EnableStatic 的返回值(0/1/其他),此处为便于阅读做了简化。

文章摘自:https://idc.huochengrm.cn/dns/25862.html

评论

精彩评论
  • 2026-05-21 21:53:49

    该VBScript脚本通过WMI设置静态IP、网关和DNS,需管理员权限运行,可修改参数以适应不同网络配置。