• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

基于工作实际需求的Ext.Net和C#搭配应用之一取出网域(AD)中所有计算机名及位置描述等 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

应用技术:DirectoryServices、DataTable、Ext.Net(数据和相关控件、事件与后台C#交互)、数据库操作、LDAP

需求背景:公司应用了Windows2008的域(从2003升级),所有的电脑都加入了网域,但是维护人员常更换,有时也没有认真填写电脑在网域中的描述信息,有的人员离职了或更换工作地点、部门、电脑也可能更换了,但是都没有更新(好像是咱公司网管工作不到位)。现在由于特别的需要,要得到当前网域中在中国区的所有电脑名,包括描述、LDAP地址、所在的OU等信息。

需求内容:给出一个OU的LDAP地址,取出其所有的(包括子OU和组)电脑信息,在WEB中可以实时查询,以EXT做前台显示。可以通过前台实现更新CN下的所有电脑信息到数据库表中,以便信息应用。

实际图片:

前台实时查询

 

保存到数据库的信息

设计:用一个类实现取指定LDAP地址下的所有电脑名及信息;用一个页面做实时查询,EXT做前台显示;用一个地址实现数据更新到数据库指定的表中。

实现过程:

建立一个类用于存储电脑信息(电脑名、描述、操作系统的名称和版本、登录的时间、加入网域的时间和更改的时间),PC.CS内容如下:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:   
   6:  namespace Core.DarrenAdHelper
   7:  {
   8:      /// <summary>
   9:      /// 描述:
  10:      /// 程序員:谢堂文(Darren Xie)
  11:      /// 創建日期:
  12:      /// 版本:1.0
  13:      /// </summary>
  14:      public class PC
  15:      {
  16:          string cn;
  17:          /// <summary>
  18:          /// 电脑名
  19:          /// </summary>
  20:          public string Cn
  21:          {
  22:              get { return cn; }
  23:              set { cn = value; }
  24:          }
  25:          string description;
  26:          /// <summary>
  27:          /// 描述信息
  28:          /// </summary>
  29:          public string Description
  30:          {
  31:              get { return description; }
  32:              set { description = value; }
  33:          }
  34:          string whenCreated;
  35:          /// <summary>
  36:          /// 加入网域的时间
  37:          /// </summary>
  38:          public string WhenCreated
  39:          {
  40:              get { return whenCreated; }
  41:              set { whenCreated = value; }
  42:          }
  43:          string whenChanged;
  44:          /// <summary>
  45:          /// 最后更改时间
  46:          /// </summary>
  47:          public string WhenChanged
  48:          {
  49:              get { return whenChanged; }
  50:              set { whenChanged = value; }
  51:          }
  52:          string lastLogoff;
  53:          /// <summary>
  54:          /// 最后注消时间
  55:          /// </summary>
  56:          public string LastLogoff
  57:          {
  58:              get { return lastLogoff; }
  59:              set { lastLogoff = value; }
  60:          }
  61:          string lastLogon;
  62:          /// <summary>
  63:          /// 最后登录时间
  64:          /// </summary>
  65:          public string LastLogon
  66:          {
  67:              get { return lastLogon; }
  68:              set { lastLogon = value; }
  69:          }
  70:          string operatingSystem;
  71:          /// <summary>
  72:          /// 操作系统名称
  73:          /// </summary>
  74:          public string OperatingSystem
  75:          {
  76:              get { return operatingSystem; }
  77:              set { operatingSystem = value; }
  78:          }
  79:          string operatingSystemVersion;
  80:          /// <summary>
  81:          /// 操作系统版本
  82:          /// </summary>
  83:          public string OperatingSystemVersion
  84:          {
  85:              get { return operatingSystemVersion; }
  86:              set { operatingSystemVersion = value; }
  87:          }
  88:          string operatingSystemServicePack;
  89:          /// <summary>
  90:          /// 操作系统补丁
  91:          /// </summary>
  92:          public string OperatingSystemServicePack
  93:          {
  94:              get { return operatingSystemServicePack; }
  95:              set { operatingSystemServicePack = value; }
  96:          }
  97:          string distinguishedName;
  98:          /// <summary>
  99:          /// LDAP地址
 100:          /// </summary>
 101:          public string DistinguishedName
 102:          {
 103:              get { return distinguishedName; }
 104:              set { distinguishedName = value; }
 105:          }
 106:      }
 107:  }

 

扫描AD信息取计算机名的类的关键代码如下:

   1:          #region 取出AD中的电脑名
   2:          public DataTable GetPCInfoTab()
   3:          {
   4:              return GetPCInfoTab(this.ADPath);
   5:          }
   6:          public DataTable GetPCInfoTab(string path)
   7:          {
   8:              return GetPCInfoTab(GetPC(path));
   9:          }
  10:          public DataTable GetPCInfoTab(List<Core.DarrenAdHelper.PC> l)
  11:          {
  12:              DataTable dt = new DataTable("pc");
  13:              dt.Columns.Add("cn");
  14:              dt.Columns.Add("Description");
  15:              dt.Columns.Add("OperatingSystem");
  16:              dt.Columns.Add("OperatingSystemVersion");
  17:              dt.Columns.Add("OperatingSystemServicePack");
  18:              dt.Columns.Add("WhenCreated");
  19:              dt.Columns.Add("WhenChanged");
  20:              dt.Columns.Add("LastLogon");
  21:              dt.Columns.Add("LastLogoff");
  22:              dt.Columns.Add("DistinguishedName");
  23:              foreach (Core.DarrenAdHelper.PC pc in l)
  24:              {
  25:                  DataRow dr = dt.NewRow();
  26:                  dr["cn"] = pc.Cn;
  27:                  dr["Description"] = pc.Description;
  28:                  dr["OperatingSystem"] = pc.OperatingSystem;
  29:                  dr["OperatingSystemVersion"] = pc.OperatingSystemVersion;
  30:                  dr["OperatingSystemServicePack"] = pc.OperatingSystemServicePack;
  31:                  dr["WhenCreated"] = pc.WhenCreated;
  32:                  dr["WhenChanged"] = pc.WhenChanged;
  33:                  dr["LastLogon"] = pc.LastLogon;
  34:                  dr["LastLogoff"] = pc.LastLogoff;
  35:                  dr["DistinguishedName"] = pc.DistinguishedName;
  36:                  dt.Rows.Add(dr);
  37:              }
  38:              return dt;
  39:          }
  40:          public List<Core.DarrenAdHelper.PC> GetPC()
  41:          {
  42:              return GetPC(this.ADPath);
  43:          }
  44:          public List<Core.DarrenAdHelper.PC> GetPC(string path)
  45:          {
  46:              using (DirectoryEntry de = new DirectoryEntry())
  47:              {
  48:   
  49:                  de.Path = path;
  50:                  List<Core.DarrenAdHelper.PC> l = new List<Core.DarrenAdHelper.PC>();
  51:   
  52:                  List<string> o = new List<string>();
  53:                  foreach (DirectoryEntry obj in de.Children)
  54:                  {
  55:                      if (obj.SchemaClassName == "computer" && obj.Name.Length >= 3)
  56:                      {
  57:                          Core.DarrenAdHelper.PC pc = new Core.DarrenAdHelper.PC();
  58:                          pc.Cn = obj.Properties.Contains("cn") == true ? obj.Properties["cn"].Value.ToString() : "-";
  59:                          pc.Description = obj.Properties.Contains("description") == true ? obj.Properties["description"].Value.ToString() : "-";
  60:                          pc.WhenCreated = obj.Properties.Contains("whenCreated") == true ? obj.Properties["whenCreated"].Value.ToString() : "-";
  61:                          pc.WhenChanged = obj.Properties.Contains("whenChanged") == true ? obj.Properties["whenChanged"].Value.ToString() : "-";
  62:                          pc.LastLogoff = obj.Properties.Contains("lastLogoff") == true ? obj.Properties["lastLogoff"].Value.ToString() : "-";
  63:                          pc.LastLogon = obj.Properties.Contains("lastLogon") == true ? obj.Properties["lastLogon"].Value.ToString() : "-";
  64:                          pc.OperatingSystem = obj.Properties.Contains("operatingSystem") == true ? obj.Properties["operatingSystem"].Value.ToString() : "-";
  65:                          pc.OperatingSystemVersion = obj.Properties.Contains("operatingSystemVersion") == true ? obj.Properties["operatingSystemVersion"].Value.ToString() : "-";
  66:                          pc.OperatingSystemServicePack = obj.Properties.Contains("operatingSystemServicePack") == true ? obj.Properties["operatingSystemServicePack"].Value.ToString() : "-";
  67:                          pc.DistinguishedName = obj.Properties.Contains("distinguishedName") == true ? obj.Properties["distinguishedName"].Value.ToString() : "-";
  68:                          l.Add(pc);
  69:                      }
  70:                      else if (obj.SchemaClassName == "organizationalUnit")
  71:                      {
  72:                          o.Add(obj.Path);
  73:   
  74:                      }
  75:   
  76:                  }
  77:                  foreach (string stroupath in o)
  78:                  {
  79:                      foreach (Core.DarrenAdHelper.PC pc1 in GetPC(stroupath))
  80:                      {
  81:                          l.Add(pc1);
  82:                      }
  83:                  }
  84:                  return l;
  85:              }
  86:          }
  87:   
  88:          #endregion

 

页面前台代码:

ADPCInfo.aspx

   1:  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ADPCInfo.aspx.cs" Inherits="ADPCInfo" %>
   2:   
   3:  <%@ Import Namespace="System.Data" %>
   4:  <%@ Import Namespace="System.Xml.Xsl" %>
   5:  <%@ Import Namespace="System.Xml" %>
   6:  <%@ Import Namespace="System.Linq" %>
   7:  <%@ Import Namespace="Ext" %>
   8:  <%@ Import Namespace="Core.DarrenCoreLib.DB" %>
   9:  <%@ Import Namespace="Core.DarrenEncodeOrDecode" %>
  10:  <%@ Import Namespace="Core.DarrenAdHelper" %>
  11:  <%@ Import Namespace="System.Collections.Generic" %>
  12:  <%@ Import Namespace="System.DirectoryServices" %>
  13:  <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
  14:   
  15:  <script runat="server">
  16:      private void GetInfo(object sender, DirectEventArgs e)
  17:      {
  18:          try
  19:          {
  20:              this.Store1.DataSource = this.GetDataTable();
  21:              this.Store1.DataBind();
  22:          }
  23:          catch (Exception ee)
  24:          {
  25:   
  26:              this.Store1.DataSource =  GetDataTableByErr(ee.Message);
  27:              this.Store1.DataBind();
  28:          }
  29:      }
  30:      public DataTable GetPCInfoTab(string path)
  31:      {
  32:          return GetPCInfoTab(GetPC(path));
  33:      }
  34:      public DataTable GetPCInfoTab(List<Core.DarrenAdHelper.PC> l)
  35:      {
  36:          DataTable dt = new DataTable("pc");        
  37:          dt.Columns.Add("cn");
  38:          dt.Columns.Add("Description");
  39:          dt.Columns.Add("OperatingSystem");
  40:          dt.Columns.Add("OperatingSystemVersion");
  41:          dt.Columns.Add("OperatingSystemServicePack");
  42:          dt.Columns.Add("WhenCreated");
  43:          dt.Columns.Add("WhenChanged");
  44:          dt.Columns.Add("LastLogon");
  45:          dt.Columns.Add("LastLogoff");
  46:          dt.Columns.Add("DistinguishedName");
  47:          dt.Columns.Add("spath");
  48:          foreach (Core.DarrenAdHelper.PC pc in l)
  49:          {
  50:              DataRow dr = dt.NewRow();
  51:              dr["cn"] = pc.Cn;
  52:              dr["Description"] = pc.Description;
  53:              dr["OperatingSystem"] = pc.OperatingSystem;
  54:              dr["OperatingSystemVersion"] = pc.OperatingSystemVersion;
  55:              dr["OperatingSystemServicePack"] = pc.OperatingSystemServicePack;
  56:              dr["WhenCreated"] = pc.WhenCreated;
  57:              dr["WhenChanged"] = pc.WhenChanged;
  58:              dr["LastLogon"] = pc.LastLogon;
  59:              dr["LastLogoff"] = pc.LastLogoff;
  60:              dr["DistinguishedName"] = pc.DistinguishedName;
  61:              string[] strpath = pc.DistinguishedName.Replace(",", "").Split(new string[] { "OU=", "DC=", "CN=" }, StringSplitOptions.RemoveEmptyEntries);
  62:              string spath = string.Empty;
  63:              for (int i = strpath.Length - 3; i >= 1; i--)
  64:              {
  65:                  spath += strpath[i] + @"\";
  66:              }
  67:              dr["spath"] = spath;
  68:              dt.Rows.Add(dr);
  69:          }
  70:          return dt;
  71:      }
  72:      public List<Core.DarrenAdHelper.PC> GetPC(string path)
  73:      {
  74:          using (DirectoryEntry de = new DirectoryEntry())
  75:          {
  76:   
  77:              de.Path = path;
  78:              System.Collections.Generic.List<Core.DarrenAdHelper.PC> l = new List<Core.DarrenAdHelper.PC>();
  79:   
  80:              List<string> o = new List<string>();
  81:              foreach (DirectoryEntry obj in de.Children)
  82:              {
  83:                  if (obj.SchemaClassName == "computer" && obj.Name.Length >= 3)
  84:                  {
  85:                      Core.DarrenAdHelper.PC pc = new Core.DarrenAdHelper.PC();
  86:                      pc.Cn = obj.Properties.Contains("cn") == true ? obj.Properties["cn"].Value.ToString() : "-";
  87:                      pc.Description = obj.Properties.Contains("description") == true ? obj.Properties["description"].Value.ToString() : "-";
  88:                      pc.WhenCreated = obj.Properties.Contains("whenCreated") == true ? obj.Properties["whenCreated"].Value.ToString() : "-";
  89:                      pc.WhenChanged = obj.Properties.Contains("whenChanged") == true ? obj.Properties["whenChanged"].Value.ToString() : "-";
  90:                      pc.LastLogoff = obj.Properties.Contains("lastLogoff") == true ? obj.Properties["lastLogoff"].Value.ToString() : "-";
  91:                      pc.LastLogon = obj.Properties.Contains("lastLogon") == true ? obj.Properties["lastLogon"].Value.ToString() : "-";
  92:                      pc.OperatingSystem = obj.Properties.Contains("operatingSystem") == true ? obj.Properties["operatingSystem"].Value.ToString() : "-";
  93:                      pc.OperatingSystemVersion = obj.Properties.Contains("operatingSystemVersion") == true ? obj.Properties["operatingSystemVersion"].Value.ToString() : "-";
  94:                      pc.OperatingSystemServicePack = obj.Properties.Contains("operatingSystemServicePack") == true ? obj.Properties["operatingSystemServicePack"].Value.ToString() : "-";
  95:                      pc.DistinguishedName = obj.Properties.Contains("distinguishedName") == true ? obj.Properties["distinguishedName"].Value.ToString() : "-";
  96:                      l.Add(pc);
  97:                  }
  98:                  else if (obj.SchemaClassName == "organizationalUnit")
  99:                  {
 100:                      o.Add(obj.Path);
 101:   
 102:                  }
 103:   
 104:              }
 105:              foreach (string stroupath in o)
 106:              {
 107:                  foreach (Core.DarrenAdHelper.PC pc1 in GetPC(stroupath))
 108:                  {
 109:                      l.Add(pc1);
 110:                  }
 111:              }
 112:              return l;
 113:          }
 114:      }
 115:      private System.Data.DataTable GetDataTable()
 116:      {
 117:          try
 118:          {
 119:              System.Collections.Generic.List<Core.DarrenAdHelper.PC> l = GetPC(path.Text + ",DC=cree1, DC=com");
 120:              
 121:              if(l.Count>0)
 122:              {
 123:                  return GetPCInfoTab(l);
 124:              }
 125:              else
 126:              {
 127:                  return GetDataTableByErr("沒有任何信息.");
 128:              }
 129:          }
 130:          catch (Exception ee)
 131:          {
 132:              try
 133:              {
 134:                  if (Session["sv"] == "")
 135:                  {
 136:                      return GetDataTableByErr("請從菜單中選取你要檢查的對象.");
 137:                  }
 138:                  else
 139:                  {
 140:                      return GetDataTableByErr(ee.Message);
 141:                  }
 142:              }
 143:              catch (Exception er)
 144:              {
 145:                  return GetDataTableByErr(er.Message);
 146:              }
 147:              
 148:          }
 149:      }
 150:      private System.Data.DataTable GetDataTableByErr(string errmsg)
 151:      {
 152:          try
 153:          {
 154:              DataTable dt = new DataTable("err");
 155:              
 156:             
 157:              DataColumn dc = new DataColumn("cn");
 158:   
 159:              dc.DataType = System.Type.GetType("System.String");
 160:              dc.DefaultValue = "ERR:"+errmsg;
 161:              dt.Columns.Add(dc);
 162:              DataRow dw = dt.NewRow();
 163:              dt.Rows.Add(dw);
 164:              return dt;
 165:          }
 166:          catch (Exception ee)
 167:          {
 168:              throw new Exception(ee.Message);
 169:          }
 170:      }
 171:      protected void Page_Load(object sender, EventArgs e)
 172:      {
 173:   
 174:          if (!X.IsAjaxRequest)
 175:          {
 176:              try
 177:              {
 178:                  this.Store1.DataSource = this.GetDataTable();
 179:                  this.Store1.DataBind();
 180:              }
 181:              catch (Exception ee)
 182:              {
 183:                  this.Store1.DataSource = this.GetDataTableByErr(ee.Message);
 184:                  this.Store1.DataBind();
 185:              }
 186:          }
 187:         
 188:          
 189:      }
 190:   
 191:      protected void Store1_RefreshData(object sender, StoreRefreshDataEventArgs e)
 192:      {
 193:          this.Store1.DataSource = this.GetDataTable();
 194:          this.Store1.DataBind(); 
 195:      }
 196:   
 197:      protected void Store1_Submit(object sender, StoreSubmitDataEventArgs e)
 198:      {
 199:          string format = this.FormatType.Value.ToString();
 200:   
 201:          XmlNode xml = e.Xml;
 202:   
 203:          this.Response.Clear();
 204:   
 205:          switch (format)
 206:          {
 207:              case "xml":
 208:                  string strXml = xml.OuterXml;
 209:                  this.Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.xml");
 210:                  this.Response.AddHeader("Content-Length", strXml.Length.ToString());
 211:                  this.Response.ContentType = "application/xml";
 212:                  this.Response.Write(strXml);
 213:   
 214:                  break;
 215:              case "xls":
 216:                  this.Response.ContentType = "application/vnd.ms-excel";
 217:                  this.Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.xls");
 218:                  XslCompiledTransform xtExcel = new XslCompiledTransform();
 219:                  xtExcel.Load(Server.MapPath("Excel.xsl"));
 220:                  xtExcel.Transform(xml, null, Response.OutputStream);
 221:   
 222:                  break;
 223:              case "csv":
 224:                  this.Response.ContentType = "application/octet-stream";
 225:                  this.Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.csv");
 226:                  XslCompiledTransform xtCsv = new XslCompiledTransform();
 227:                  xtCsv.Load(Server.MapPath("Csv.xsl"));
 228:                  xtCsv.Transform(xml, null, Response.OutputStream);
 229:   
 230:                  break;
 231:          }
 232:   
 233:          this.Response.End();
 234:      }
 235:  </script>
 236:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 237:   
 238:  <html xmlns="http://www.w3.org/1999/xhtml">
 239:  <head runat="server">
 240:      <title>AD PC Info
 241:      </title>
 242:      <link href="../../../../resources/css/examples.css" rel="stylesheet" type="text/css" />
 243:   
 244:      <script type="text/javascript">
 245:          var template = '<span style="color:{0};">{1}</span>';
 246:   
 247:          var change = function (value) {
 248:              return String.format(template, (value > 0) ? "green" : "red", value);
 249:          };
 250:   
 251:          var pctChange = function (value) {
 252:              return String.format(template, (value > 0) ? "green" : "red", value + "%");
 253:          };
 254:   
 255:          var exportData = function (format) {
 256:              FormatType.setValue(format);
 257:              var store = GridPanel1.store;
 258:              store.directEventConfig.isUpload = true;
 259:   
 260:              var records = store.reader.readRecords(store.proxy.data).records,
 261:                  values = [];
 262:              
 263:              for (i = 0; i < records.length; i++) {
 264:                  var obj = {}, dataR;
 265:                  
 266:                  if (store.reader.meta.id) {
 267:                      obj[store.reader.meta.id] = records[i].id;
 268:                  }
 269:   
 270:                  dataR = Ext.apply(obj, records[i].data);                
 271:                  
 272:                  if (!Ext.isEmptyObj(dataR)) {
 273:                      values.push(dataR);
 274:                  }
 275:              }
 276:              
 277:              store.submitData(values);
 278:   
 279:              store.directEventConfig.isUpload = false;
 280:          };
 281:      </script>
 282:  </head>
 283:  <body>
 284:      <form id="Form1" runat="server">
 285:      <ext:ResourceManager ID="ResourceManager1" runat="server" />
 286:      <ext:Store ID="Store1" runat="server" AutoDataBind="true" remarks="" OnRefreshData="Store1_RefreshData"
 287:          OnSubmitData="Store1_Submit">
 288:          <Reader>
 289:              <ext:JsonReader>
 290:                  <Fields>
 291:                      <ext:RecordField Name="cn">
 292:                      </ext:RecordField>
 293:                      <ext:RecordField Name="Description">
 294:                      </ext:RecordField>
 295:                      <ext:RecordField Name="OperatingSystem">
 296:                      </ext:RecordField>
 297:                      <ext:RecordField Name="OperatingSystemVersion">
 298:                      </ext:RecordField>
 299:                      <ext:RecordField Name="OperatingSystemServicePack">
 300:                      </ext:RecordField>
 301:                      <ext:RecordField Name="WhenCreated">
 302:                      </ext:RecordField>
 303:                      <ext:RecordField Name="WhenChanged">
 304:                      </ext:RecordField>
 305:                      <ext:RecordField Name="LastLogon">
 306:                      </ext:RecordField>
 307:                      <ext:RecordField Name="LastLogoff">
 308:                      </ext:RecordField>
 309:                      <ext:RecordField Name="DistinguishedName">
 310:                      </ext:RecordField>
 311:                      <ext:RecordField Name="spath">
 312:                      </ext:RecordField>
 313:                  </Fields>
 314:              </ext:JsonReader>
 315:          </Reader>
 316:      </ext:Store>
 317:      <ext:Hidden ID="FormatType" runat="server" />
 318:      <ext:Panel ID="Panel1" runat="server" Height="470" Title="" Width="600">
 319:          <Items>
 320:              <ext:Toolbar ID="Toolbar2" runat="server" Width="600">
 321:                  <Items>
 322:                      <ext:TextField ID="path" runat="server" Text="LDAP://hzrdc01/OU=Huizhou2,OU=CN"  Width="500" MinWidth="200">
 323:                      </ext:TextField>
 324:                      <ext:Button ID="btnAddNe 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#AD验证登陆发布时间:2022-07-18
下一篇:
C#Listobject按特定字段排序发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap