前言
修改IP、网关、子网掩码、DNS等配置时需要打开网络配置器配置,有些麻烦。尤其是经常需要重复性操作时(例如去学校图书馆蹭网)。用PowerShell脚本自动修改,方便简单而且十分轻量,程序只需占用1KB空间。
新的修改方法:Common Information Model (CIM)
参考[1]
param([int] $inputNum) $cim = Get-CimInstance Win32_NetworkAdapterConfiguration -Filter "IPEnabled = True" function CheckReturn { param ($obj) if ($obj.ReturnValue -eq 0) { "Successed" } else { "Failed" } } if ($inputNum -eq 0) { CheckReturn(Invoke-CimMethod $cim -MethodName EnableDHCP) CheckReturn(Invoke-CimMethod $cim -MethodName SetDNSServerSearchOrder) } elseif (($inputNum -gt 0) -and ($inputNum -lt 254)) { CheckReturn(Invoke-CimMethod $cim -MethodName EnableStatic -Arguments @{ IPAddress = @("10.200.200." + $inputNum.ToString()); SubnetMask = @("255.255.255.0") }) CheckReturn(Invoke-CimMethod $cim -MethodName SetGateways -Arguments @{ DefaultIPGateway = @("10.200.200.254") }) CheckReturn(Invoke-CimMethod $cim -MethodName SetDNSServerSearchOrder -Arguments @{ DNSServerSearchOrder = @("114.114.114.114") }) } else { "Input number between 1 to 253 to set network adapter, or 0 to disable network adapter" }
旧的修改方法:Windows Management Instrumentation (WMI)
参考[2]
param([int] $inputNum) $wmi = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled = True" function CheckReturn { param ($obj) if ($obj.ReturnValue -eq 0) { "Successed" } else { "Failed" } } if ($inputNum -eq 0) { CheckReturn($wmi.EnableDHCP()) CheckReturn($wmi.SetDNSServerSearchOrder()) } elseif (($inputNum -gt 0) -and ($inputNum -lt 254)) { CheckReturn($wmi.EnableStatic("10.200.200." + $inputNum.ToString(), "255.255.255.0")) CheckReturn($wmi.SetGateways("10.200.200.254")) CheckReturn($wmi.SetDNSServerSearchOrder("114.114.114.114")) } else { "Input number between 1 to 253 to set network adapter, or 0 to disable network adapter" }
附:C#代码
#nullable enable using System.Management; using System.Runtime.InteropServices; using System.Runtime.Versioning; namespace NetworkAdapter; [SupportedOSPlatform(nameof(OSPlatform.Windows))] public static class NetworkAdapter { public static void Main() { while (true) { if (!int.TryParse(Console.ReadLine(), out var temp)) continue; switch (temp) { case 0: DisableNetworkAdapter(); return; case > 0 and < 254: SetNetworkAdapter("10.200.200." + temp, "255.255.255.0", "10.200.200.254", "114.114.114.114"); return; default: Console.WriteLine("输入错误:请输入机房电脑序号(1-253),输入0恢复默认网络设置"); break; } } } private static void SetNetworkAdapter(string ipAddress, string subnetMask, string gateway, string dns) { if (GetManagementObject() is { } mo) { var inPar = mo.GetMethodParameters("EnableStatic"); //设置ip地址和子网掩码 inPar["IPAddress"] = new[] { ipAddress }; inPar["SubnetMask"] = new[] { subnetMask }; _ = mo.InvokeMethod("EnableStatic", inPar, null!); //设置网关地址 inPar = mo.GetMethodParameters("SetGateways"); inPar["DefaultIPGateway"] = new[] { gateway }; _ = mo.InvokeMethod("SetGateways", inPar, null!); //设置DNS inPar = mo.GetMethodParameters("SetDNSServerSearchOrder"); inPar["DNSServerSearchOrder"] = new[] { dns }; _ = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null!); } } private static void DisableNetworkAdapter() { if (GetManagementObject() is { } mo) { _ = mo.InvokeMethod("SetDNSServerSearchOrder", Array.Empty<object>()); _ = mo.InvokeMethod("EnableDHCP", Array.Empty<object>()); } } private static ManagementObject? GetManagementObject() { var mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); var moc = mc.GetInstances(); foreach (var o in moc) if ((bool)o["IPEnabled"]) return (ManagementObject)o; return null; } }
完整代码(Github)
https://github.com/Poker-sang/NetworkAdapter
分类:
编程
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 易语言 —— 开山篇