如何列出 Active Directory 中的所有站点及这些站点内的所有服务器?
来源:互联网 发布:软件快捷方式打不开 编辑:程序博客网 时间:2024/06/06 09:42
问:
您好,脚本专家!如何列出 Active Directory 中的所有站点及这些站点内的所有服务器?
-- DW
答:
您好,DW。您知道,您这是在考验我们。如果咨询有关用户和组的问题,我们会处理得很好;我们至少在一定程度上了解用户和组所涉及的内容。如果咨询有关计算机帐户或 OU 的问题;也不要紧。不过,如果问题是站点、站点链接及类似方面的问题,则我们就开始担心了;毕竟,我们连那些内容是什么都没有真正弄懂过,更别提您如何使用脚本处理它们了。
但是,缺少知识和理解不足曾经让脚本专家止步不前过吗?当然没有。下面的脚本会列出 Active Directory 中的所有站点以及所有这些站点中的服务器:
On Error Resume NextSet objRootDSE = GetObject("LDAP://RootDSE")strConfigurationNC = objRootDSE.Get("configurationNamingContext") strSitesContainer = "LDAP://cn=Sites," & strConfigurationNCSet objSitesContainer = GetObject(strSitesContainer)objSitesContainer.Filter = Array("site") For Each objSite In objSitesContainer Wscript.Echo objSite.CN strSiteName = objSite.Name strServerPath = "LDAP://cn=Servers," & strSiteName & ",cn=Sites," & _ strConfigurationNC Set colServers = GetObject(strServerPath) For Each objServer In colServers WScript.Echo vbTab & objServer.CN Next Wscript.EchoNext
那么,我们将通过这段代码执行何种操作呢?(实际上,这并不是一句反问句,我们希望有人就该段代码向我们做一下全面解释!)我们首先使用以下两行代码来绑定到 Active Directory 根目录,而后再绑定到 Configuration 容器 (configuringNamingContext):
Set objRootDSE = GetObject("LDAP://RootDSE")strConfigurationNC = objRootDSE.Get("configurationNamingContext")
我们为什么要这样开始呢?Configuration 容器中包含 Active Directory 的物理结构和布局方面的信息;我们还将在其中找到站点及分配给每个站点的服务器的信息。不管域名如何,我们都可通过先绑定到 Active Directory 根目录 (rootDSE),而后再使用 Get 方法检索 configurationNamingContext 的方式来获取 Configuration 容器的 Active Directory 路径。
注意:这意味着什么?其中一点,它意味着您可以按原样使用此脚本,而无需将 fabrikam.com 更改为您的域名;正如您所看到的,我们甚至没有在脚本中的任何位置引用 fabrikam.com(或任何其他域名)。 |
下一步将检索所有 Active Directory 站点的集合。这就是下面的代码所要执行的操作:
strSitesContainer = "LDAP://cn=Sites," & strConfigurationNCSet objSitesContainer = GetObject(strSitesContainer)objSitesContainer.Filter = Array("site")
在第一行中,我们构造了 Sites 容器的 ADsPath,方法是将 LDAP://cn=Sites 与 configurationNamingContext 合并到了一起。我们使用 GetObject 方法绑定到该容器,然后应用一个 Filter,将集合中的项目限定为 Site 对象。最终结果为:objSitesContainer 现在将包含一个所有 Active Directory 站点的集合。
好了,这也许不像我们事先所想的那么难。接下来,我们建立一个 For Each 循环,以遍历该站点集合。在该循环内,我们回显该集合中第一个站点的 CN,然后将该站点的 Name(其类似于 CN=Default-First-Site-Name)存储在变量 strSiteName 中:
Wscript.Echo objSite.CNstrSiteName = objSite.Name
实际上,每个 Active Directory 站点均有一个 Servers 容器,且每个 Servers 容器中均含有一个分配给该站点的服务器的列表。为了绑定到第一个站点的 Servers 容器,我们使用下面一行代码来构造 ADsPath(即,存储在变量 strServerPath 中的路径):
strServerPath = "LDAP://cn=Servers," & strSiteName & ",cn=Sites," & _ strConfigurationNC
获取 ADsPath 后,我们即可使用下面一行代码来绑定到第一个站点的 Servers 容器:
Set colServers = GetObject(strServerPath)
我们现在继续进行。接下来,我们再建立一个 For Each 循环,以遍历 Servers 容器中的项目的集合。对于集合中的每个服务器,我们只需回显该服务器的 CN:
For Each objServer In colServers WScript.Echo vbTab & objServer.CNNext
哦,好的:我们还会在服务器名称的前面加上一个制表符 (vbTab)。只要您看一看示例输出,您就会明白我们为什么要这样做了。
这就是您想要的结果:我们现在已经回显了第一个站点的名称和分配给该站点的所有服务器。然后,我们进入下一个循环并对集合中的第二个站点重复此过程。这样继续下去,直到我们处理完所有站点并回显了这些站点中的所有服务器的名称为止。完成后,应得到类似下面内容的输出:
Default-First-Site-Name atl-dc-01 atl-dc-02European-Site lon-dc-01 lon-dc-02 par-dc-01 bru-dc-01 bru-dc-02
还不错吧?设想一下,要是我们实际上知道正做的事情,我们会写出多么酷的脚本!
- 如何列出 Active Directory 中的所有站点及这些站点内的所有服务器?
- 列出当前站点所有Cache并清除
- 列出当前站点所有Cache并清除
- active directory如何访问遍历所有目录?
- C#列出局域网内所有的SQL SERVER服务器
- xendesktop 使用Active Directory来检测构成站点的控制器
- 字符的处理及列出文件夹中的所有文件名
- 什么是站点,Active Directory系列之十一
- 什么是站点,Active Directory系列之十一
- 什么是站点,Active Directory系列之十一
- 如何列出SQLite数据库中的所有表
- 如何将老站中的所有页面都301重定向到新站点
- c#修改注册表改变【对该区域中的所有站点要求服务器验证】
- 如何列出所有的空目录?
- 如何把web站点的所有.aspx.cs文件编译为.dll文件?
- 如何禁止知识一致性检查(KCC)站点间拓扑生成的所有网站
- 列出所有的索引
- 创建用 Active Directory 隔离用户的FTP 站点遇到的问题
- 如何计算某个域中的计算机数?
- SQL操作大全
- FTP收藏
- 如何从本地管理员组中删除管理员和域管理组之外的一切成员?
- PPC技巧
- 如何列出 Active Directory 中的所有站点及这些站点内的所有服务器?
- 个人站长不要把理想和青春赌到网站上
- 简单入门正则表达式 - 第二章 正则表达式应用范围
- python输出stdout定向文件
- 常用SQL时间格式
- 嵌入式(标准C环境下)下通用的内存池的实现---头文件
- 轻松安装、卸载Linux软件
- 超越时空的紫禁城
- Linux下常用压缩格式的压缩与解压方法