编程使用WMI 控制连接属性

原创 2004年08月14日 00:16:00
标题     编程使用WMI 控制连接属性    ArLi2003(原作)
关键字     编程使用WMI 控制连接属性,IP,DNS,Gateway,网关,WMI

using System;
using System.Management;

namespace ArLi.CommonPrj {
 public class ChangeIP {

  /// <summary>
  /// Build of ArLi 2003.6.3
  /// </summary>
  public static readonly System.Version myVersion = new System.Version(1,1);

  private ManagementBaseObject iObj = null;
  private ManagementBaseObject oObj = null;
  private ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  private readonly ManagementObjectCollection moc;

  /// <summary>
  /// 例:
  /// <code>
  /// ArLi.CommonPrj.ChangeIP o = new ArLi.CommonPrj.ChangeIP();
  /// string[] ipList = new string[]{"192.168.0.253","192.168.0.250"};
  /// string[] subnetList = new string[]{"255.255.255.0","255.255.255.0"};
  /// o.ChangeTo(ipList,subnetList);
  /// </code>
  /// </summary>
  public ChangeIP(){
   moc = mc.GetInstances(); 
  }
  
  /// <summary>控制连接</summary>
  /// <param name="ipAddr">IP地址列表</param>
  /// <param name="subnetMask">对应子网掩码列表</param>
  public void ChangeTo(string[] ipAddr,string[] subnetMask) {
   foreach(ManagementObject mo in moc) {
    if(! (bool) mo["IPEnabled"]) continue;

    iObj = mo.GetMethodParameters( "EnableStatic" );
    iObj["IPAddress"] = ipAddr;
    iObj["SubnetMask"] = subnetMask;
    oObj = mo.InvokeMethod("EnableStatic", iObj, null);
   }
  }

  /// <summary>控制连接</summary>
  /// <param name="ipAddr">IP地址列表</param>
  /// <param name="subnetMask">对应子网掩码列表</param>
  /// <param name="gateways">网关列表</param>
  /// <param name="gatewayCostMetric">网关接口跃点数列表</param>
  public void ChangeTo(string[] ipAddr, string[] subnetMask, string[] gateways, string[] gatewayCostMetric) {
   foreach(ManagementObject mo in moc) {
    if(! (bool) mo["IPEnabled"]) continue;

    iObj = mo.GetMethodParameters("EnableStatic");
    iObj["IPAddress"] = ipAddr;
    iObj["SubnetMask"] = subnetMask;
    oObj = mo.InvokeMethod("EnableStatic", iObj, null);

    iObj = mo.GetMethodParameters("SetGateways");
    iObj["DefaultIPGateway"] = gateways;
    iObj["GatewayCostMetric"] = gatewayCostMetric;
    oObj = mo.InvokeMethod("SetGateways", iObj, null);
   }
  }

  /// <summary>控制连接</summary>
  /// <param name="ipAddr">IP地址列表</param>
  /// <param name="subnetMask">对应子网掩码列表</param>
  /// <param name="gateways">网关列表</param>
  /// <param name="gatewayCostMetric">网关接口跃点数列表</param>
  /// <param name="dnsServer">DNS 服务器列表</param>
  public void ChangeTo(string[] ipAddr, string[] subnetMask, string[] gateways, string[] gatewayCostMetric, string[] dnsServer) {
   foreach(ManagementObject mo in moc) {
    if(! (bool) mo["IPEnabled"]) continue;

    iObj = mo.GetMethodParameters("EnableStatic");
    iObj["IPAddress"] = ipAddr;
    iObj["SubnetMask"] = subnetMask;
    oObj = mo.InvokeMethod("EnableStatic", iObj, null);

    iObj = mo.GetMethodParameters("SetGateways");
    iObj["DefaultIPGateway"] = gateways;
    iObj["GatewayCostMetric"] = gatewayCostMetric;
    oObj = mo.InvokeMethod("SetGateways", iObj, null);

    iObj = mo.GetMethodParameters("SetDNSServerSearchOrder");
    iObj["DNSServerSearchOrder"] = dnsServer;
    oObj = mo.InvokeMethod("SetDNSServerSearchOrder", iObj, null);
   }
  }

  /// <summary>控制连接,使它使用 DHCP</summary>
  public void EnableDHCP() {
   foreach(ManagementObject mo in moc) {
    if(! (bool) mo["IPEnabled"]) continue;

    if(! (bool)mo["DHCPEnabled"]) {
     iObj = mo.GetMethodParameters("EnableDHCP");
     oObj = mo.InvokeMethod("EnableDHCP", iObj, null);
    }
   }
  }
 }
}

获取网络连接名称“本地连接”的两种方法

 方法一:通过WMI得到连接属性NETCON_PROPERTIES,这个结构体定义如下: typedef struct tagNETCON_PROPERTIES     {     ...
  • jiangqin115
  • jiangqin115
  • 2015年07月26日 14:12
  • 2408

WMI (VBScript) 学习2: 本地连接配置信息获取和修改

主要实现功能: 在 "192.168.0.120" and "192.168.0.8" 之间切换网关地址 有几点需要注意的:1. 带返回值函数需声明变量来接收其返回值。否则如 objItem.Enab...
  • TheGodOfGods
  • TheGodOfGods
  • 2010年03月24日 12:29
  • 2868

WMI技术介绍和应用——查询系统信息

本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。(转载请指明出于breaksoftware的csdn博客...
  • breaksoftware
  • breaksoftware
  • 2013年02月05日 18:07
  • 6892

WMI技术介绍和应用——查询硬件信息

这个月实在太忙了,一直没有时间去继续写WMI的应用例子。 本来是希望将《WMI技术介绍和应用》系列博文写的像WMI百科全书般,但是貌似对这个技术感兴趣的同学并不多,所以我决定对部分知识点点到为止,有需...
  • breaksoftware
  • breaksoftware
  • 2013年04月18日 22:50
  • 5431

主机性能监控之wmi 获取系统信息及内存性能信息

欢迎转帖 请保持文本完整并注明出处   这里参考了http://www.cnblogs.com/lxcsmallcity/archive/2009/10/11/1580803.html  ...
  • stecdeng
  • stecdeng
  • 2017年02月20日 11:49
  • 455

WMI技术介绍和应用——查询系统服务

本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。(转载请指明出于breaksoftware的csdn博客...
  • breaksoftware
  • breaksoftware
  • 2013年02月14日 21:51
  • 2218

WMI技术介绍和应用——查询本地用户和组

本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。(转载请指明出于breaksoftware的csdn博客...
  • breaksoftware
  • breaksoftware
  • 2013年03月07日 20:20
  • 5220

Sql Server 2008 配置管理器 无法连接WMI提供程序

好长一段时间没有碰SQL了,由于要做PB的毕业设计,结果打开数据库的时候却没办法连接了,不能连接的情况之前也遇到过,去配置管理器将相应的项启动即可,可是当我打开配置管理器的时候,有些吃惊,因为跳出来一...
  • jly4758
  • jly4758
  • 2014年03月06日 20:12
  • 18027

Python用WMI模块获取Windows系统的硬件信息

Python用WMI模块获取Windows系统的硬件信息:硬盘分区、使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息。 本文实例讲述了python使用wmi模块获取...
  • xy2953396112
  • xy2953396112
  • 2017年01月18日 11:29
  • 1171

解决“无法连接到WMI提供程序,您没有权限或者该服务器无法访问。“

最近在学习PowerDesigner,在创建PDM模型的时候,遇到了一点儿小问题,本以为要重装SQLServer,百度了一下,问题就轻松解决了。问题的背景是这样的,在创建数据源的时候,总是测试连接不成...
  • u012904383
  • u012904383
  • 2015年02月25日 19:55
  • 4574
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程使用WMI 控制连接属性
举报原因:
原因补充:

(最多只允许输入30个字)