首页 > 系统相关 >利用PowerShell修改网络配置

利用PowerShell修改网络配置

时间:2024-01-14 20:58:36浏览次数:27  
标签:CheckReturn SetDNSServerSearchOrder mo 网络 修改 wmi inPar inputNum PowerShell

title: 利用PowerShell修改网络配置
date: 2022-03-30
categories: 编程
tags:
- PowerShell
- 网络
- Windows

前言

修改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


  1. Get-CimInstance ↩︎

  2. Get-WmiObject ↩︎

标签:CheckReturn,SetDNSServerSearchOrder,mo,网络,修改,wmi,inPar,inputNum,PowerShell
From: https://www.cnblogs.com/pokersang/p/17964160

相关文章

  • 初始网络编程
    CS架构与BS架构在互联网中,通信协议一般分为两种:CS架构以及BS架构CS指的是ClientServer代表客户端和服务端BS指的是BrowserServer代表浏览器和服务端客户端send服务端recv操作系统操作系统计算机硬件<=====物理......
  • MySQL修改安全策略时报错:ERROR 1193 (HY000): Unknown system variable ‘validate_pa
    我使用的版本是MySQL5.73,环境是LinuxCentOS7,其他版本不知道是否可行,望谅解。当我们想设置简单的密码的时候,看了别人发的如何修改安全策略的代码,如下:setglobalvalidate_password_policy=0;setglobalvalidate_password_length=1;但是当我们使用的时候,却报了这样一个......
  • 网络爬虫-梨视频下载
    一、分析要在地址https://www.pearvideo.com/video_1747820中下载视频,首先要找打视频的源地址,查看源代码未发现有源代码,在元素中找,视频播放的时候,在<video>标签中找下载链接 注意:视频不播放,是看不到视频源地址的,把视频下载地址单独复制下来如下src="https://video.pearvi......
  • 计算机网络——应用层(1)
    (计算机网络——应用层(1))小程一言我的计算机网络专栏,是自己在计算机网络学习过程中的学习笔记与心得,在参考相关教材,网络搜素的前提下,结合自己过去一段时间笔记整理,而推出的该专栏,整体架构是根据计算机网络自顶向下方法而整理的,包括各大高校教学都是以此顺序进行的。面向群体:在学......
  • 网络爬虫-处理cookie登录的问题,seesion的用法
    一、以17k的小说网的登录为例,网址小说_17K小说网|最新小说下载-一起免费看小说当想要在小说网中看一下书架上的书都有哪些,必须得先登录一个账户才能看到,不同的用户登录看到内容也是不一样的,服务器是如何区分的呢?这里要引入cookie,不同的用户访问到服务器的时候,除了访问地......
  • js 合并、复制和修改定型数组
    定型数组同样使用数组缓冲来存储数据,而数组缓冲无法调整大小。因此,下列方法不适用于定型数组:concat()pop()push()shift()splice()unshift()不过,定型数组也提供了两个新方法,可以快速向外或向内复制数据:set()和subarray()。set()从提供的数组或定型数组中把值复制到当前定型数组......
  • 深入理解 Hadoop (一)网络通信架构与源码浅析
    HadoopRPC网络通信框架原理剖析YARNRPC服务端的工作大致可以分为四个阶段:第一个阶段:Server初始化和启动在Server初始化的时候,会初始化Listener组件(内部启动了一个AcceptSelector绑定了相应的端口,用来处理客户端的OP_ACCEPT事件),内部还初始化了一组Reader线程,其......
  • 深度学习3D网格分割网络---MeshCNN
    MeshCNN是2019年提出的直接在3DMesh上进行分类和分割的网络,MeshCNN在3D网格上定义了定义了卷积和池化层,依据三维模型边的连通关系将其转换为一个图来研究。最终能够在来自SHREC11数据集的30个类上达到98.6%的精度,并且在部件和人体数据集上有很好的分割性能。论文主页:https://ra......
  • 神经网络训练中的欠拟合、过拟合问题
    神经网络训练中的问题神经网络在数据之海中打捞规律,自成模型。这个过程全权由电脑完成,也因此我们担心它是否是一种泛化的模式,在其它「海域」继续工作时,它能否也能得到正确的结果?如何发现可以泛化的模式是机器学习的根本问题。过拟合与欠拟合我们的数据通常分成3份:训练数......
  • IDEA项目名称后面出现中括号,模块Modules的名子和文件夹名称不同,可以右键修改名称也可
    IDEA项目名称后面出现中括号,Modules的名子和文件夹名称不同,可以右键修改名称也可以在File->ProjectStructure修改Modules的Name(快捷键ctrl+Shift+Alt+s)Project中出现中括号如:原因:Modules的名子和文件夹名称不同解决主要是通过修改名称一致就可以可以右键修改名称也可......