如何通过WMI启用DHCP并从适配器中删除IP

时间:2019-04-12 14:19:49

标签: c#

我正在制作某种IP设置工具,并且我通过WMI(Win32_NetworkAdapterConfiguration)遇到EnableDHCP方法问题。适配器设置为DHCP,但是仍然有IP和网关。所以我正在使用对我有用的netsh函数,但是我只想使用WMI。有什么建议吗?

我尝试了一些诸如Lease之类的方法,并将null发送给静态对象,但它不起作用。

                s//THIS ONE I WANT TO USE BUT ITS LET IP AT ADAPTER EVEN DHCP IS ENABLED

    public void button1_Click(object sender, EventArgs e)
    {

        ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection objMOC = objMC.GetInstances();
        //check numbe of aktive ports

            foreach (ManagementObject objMO in objMOC)
            {

                if ((bool)objMO["IPEnabled"])
                {

                try
                {
                    // write parameters to active port
                    ManagementBaseObject setIP;
                    setIP = objMO.InvokeMethod("EnableDHCP", null, null);
                }
                catch (Exception x)
                {

                }                   
                }               
            }
    }





                                        Process p = new Process();//netsh work well but i dont want to use
                                        ProcessStartInfo psi = new ProcessStartInfo("netsh", "interface ip set address \"" + adapter.Name + "\" dhcp");
                                        p.StartInfo = psi;
                                        p.Start();

我希望可以通过WMI使用EnableDHCP,并且IP地址已经清除,但是IP地址仍然存在

This(Picture)

1 个答案:

答案 0 :(得分:0)

  public Collection<PSObject> Invoke(string Query)
    {
        Collection<PSObject> ps = new Collection<PSObject>();
        try
        {
            using (PowerShell PSI = PowerShell.Create())
            {
                PSI.AddScript(Query);

                ps = PSI.Invoke();
            }
        }
        catch (Exception ex)
        {
            ps = null;

            throw;
        }

        return ps;

    }

创建一个类以调用PS查询

 public List<YourObjectList> GetInfo(string ParametersIFYouWant)
        {
List<YourObjectList> ListInfo = new List<YourObjectList>();

            InvokePowerShellQuery powerShellQuery = new InvokePowerShellQuery();

            string PSQuery = "Query Here as a string";
            try
            {
                var PSOutput = powerShellQuery.Invoke(PSQuery);
//In your case you wont need unless in you PS Query you return a message or some other object you want to report back for success or failure.
                foreach (var item in PSOutput)
                {
                  //Fill ListInfo 
                }

            }
            catch (Exception ex)
            {
                Listinfo = null;
                 //handle however you want here
            }

            return Listinfo;
        }

将查询发送到您的班级

您可以使用的PS查询上的Google快速搜索

https://www.pdq.com/blog/using-powershell-to-set-static-and-dhcp-ip-addresses-part-1/ https://4sysops.com/archives/set-an-ip-address-and-configure-dhcp-with-powershell