日期:2015-03-14  浏览次数:3290 次

  看了一天的活动目录 相关解释  自己写了个程序  出现了错误  
 错误:System.Runtime.InteropServices.COMException   (0x80005000):   未知错误   (0x80005000)  
很不得其解。看了篇比较好的文章
利用DirectoryEntry组件来查看网络
 现在又点明白了。 是自己的路径错误了,所以会报错。另外需要注意的是路径最好大写。采用上面文章中所说的方法,得到的效果图
 
 
 
同理 我们可以得到IIS的相关信息
 
 
 
  //IIS://ComputerName/Service/Website/Directory 
     //IIS://localhost/W3SVC/1/root
//ComputerName:即操作的服务器的名字,可以是名字也可以是IP,经常用的就是localhost 
//Service:即操作的服务器,IIS中有Web,也有FTP,还有SMTP这些服务,我们主要是操作IIS的Web功能,因此此处就是"W3SVC",如果是FTP则应是"MSFTPSVC" 
//WebSite:一个IIS服务中可以包括很多的站点,这个就用于设置操作的站点。他的值是一个数字,默认是1,表示缺省站点,如果有其它,则从1开始依次类推。
//Directory:不用说,即操作的目录名称,一个站点一般顶层目录为"ROOT",其它目录则是他的孩子(Child)。 
//首先我们获取一个站点的顶层目录(根目录):
 
 
截图如下
 
 
 
相关代码  参见下面的摘抄

 
 
 

 

 

 

下面是摘自  http://www.microsoft.com/china/community/program/originalarticles/techdoc/DirectoryEntry.mspx

 

 
DirectoryEntry组件提供了Path属性,根据文档,此属性指定了目录服务中用来访问对象的对象名,其格式如下:
protocol://servername:port number/distinguished name
此语句的第一部分定义了访问将使用的协议,如
LDAP: (Lightweight Directory Access Protocol)
IIS: (提供IIS元数据来读及配置Internet Infomation Server)
WinNT: (提供在非常有限的性能下对Windows NT域的访问)
NDS: (提供对Novell Directory Service的访问)
等等(详细信息清参考MSDN)。

 
新建一个Windows Application[C#],在Form上添加一个TreeView,命名为treeView1。
添加以下几个函数:
//用指定的文本构造一个节点,将其添加为参数parant的子节点,并返回刚构造的节点
private TreeNode AddNode(TreeNode parant,string text)
{
	TreeNode node = new TreeNode(text);
	parant.Nodes.Add(node);
	return node;
}

//递归地找到参数entry的所有子节点,并在treeView1中显示;这里的entry与entryNode需相对应
private void EnumChildren(DirectoryEntry entry,TreeNode entryNode)
{
	if(entry.Children!=null)		//如果无子节点则结束
	{
		foreach(DirectoryEntry i in entry.Children)
		{
			//将各子节点加入TreeView,并进行递归
			EnumChildren(i,AddNode(entryNode,i.Name));
		}
	}
}

//用给定的字符串构造根节点,并列出其所有子节点
private void Enumerate(string path)
{
	try 
	{
		using(DirectoryEntry root = new DirectoryEntry(path))
		{
			TreeNode node = new TreeNode(root.Name);
			treeView1.Nodes.Add(node);
			EnumChildren(root,node);
		}
	}
	catch {}
}
这样,通过传递 "WinNT:" 给函数Enumerate(string),就可以在TreeView中看到网络上的所有计算机,以及每台计算机上的用户、组、服务等资源,效果如图:


总结
本文主要介绍了用DirectoryEntry组件来浏览网络中的各节点计算机的信息,实际上,DirectoryEntry组件功能强大,例如将"IIS:"作为DirectoryEntry的Path属性,就可以列出域中运行着IIS(Internet Infomation Server)的服务器,并可获得IIS元数据等属性;此外,还可以用它来对网络进行远程管理与配置,有兴趣者不妨一试。
附注
如果你编译并运行了第一个例子(记得添加对System.DirectoryServices.dll的引用),你会发现它会在列出计算机名的同时,还输出了
Computer: Schema
这并不是出了什么错误,对这个叫做Schema的DirectoryEntry得子项进行枚举可以发现,它正如其名,描述了Computer项的模式。当然,为了结果的有效性,我们可以滤掉它。