'SetDescription.vbs
;'Adds virtual or physical descriptor to
;'computer description attribute.
'set variables
;'strPrefix -- physical or virtual identifier prefix
;' Prefix values:
;'; Ps – Physical server
;'; Vesx – VMware ESX VM
;'; Vms – Microsoft Virtual Server VM
;'; Vxen – Xen VM
;'; Vvi – Virtual Iron VM
;'; Vvz – SWsoft Virtuozzo virtual private server
;'; Vscon – Solaris Container
;strPrefix = "Vesx"
'strDomainTarget -- this is the AD container
;' where the target computer accounts are located
;strDomainTarget = "cn=computers,dc=virtual,dc=net"
'strSourceFile -- file that contains computer
;' account list
;strSourceFile = "c:computers.txt"
' Constants
;Const ForReading = 1
'Open Source File
;Set objFSO = CreateObject("Scripting.FileSystemObject")
;set objSourceFile = objFSO.OpenTextFile(strSourceFile,_
;;;;;ForReading, True)
'Connect to Directory Service
;'Modify computer description for each computer in
;' source file list
;Do Until objSourceFile.AtEndOfStream
;;;;;strcomputer = objSourceFile.Readline
;;;;;strADSpath = "LDAP://cn=" & strcomputer & _
"," & strDomainTarget
;;;;;Set objComputer = GetObject(strADSpath)
;;;;;strOldDes = objcomputer.description
;;;;;If strOldDes = "" then
; strNewDes = strPrefix
;;;;;Else
; strNewDes = strPrefix & " - " & strOldDes
;;;;;End If feedom.net
;;;;;objcomputer.Put "Description", strNewDes
;;;;;objcomputer.SetInfo
;Loop
注意:在上述脚本中,需要修改如下的三个变量:
●strPrefix
;●strDomainTarget
;●strSourceFile
;strPrefix标识虚拟机的前缀,用来给每台计算机Description属性赋值。例如,对于ESX虚拟机,就可以把strPrefix赋值为“Vesx;对于物理服务器,可以给strPrefix赋值为“Ps。strDomainTarget必须用来给容器设置不同的名字,在这些容器中包含有目标计算机。例如,如果计算机对象在TechTarget.com域的Computers容器中,这个strDomainTarget变量就应该设置为“cn=computers,dc=techtarget,dc=com;如果计算机对象在TechTarget.com域的Development OU中,这个strDomainTarget变量的值就应该设置为“ou=development,dc=techtarget,dc=com。需要注意的是脚本一次只能在一个Active Directory容器中运行,因此,如果需要修改多个容器中计算机对象的话,用户就需要在每一个Active Directory目标容器中运行一次脚本程序。
strSourceFile用来标识文本文件,在这些文本文件中是一个需要修改的计算机名列表。文件中的每一行都需要列出一个计算机主机名字。如下的链接中是一个样例:computers.txt。
在每一台计算对象的Description属性设定之后,用户就可以使用在本文中前面部分提到的Active Directory Users and Computers查询技术来定位虚拟机对象。另外,用户也可以使用一个脚本程序查询Active Directory或者输出一个计算机列表,这个列表包含有一个描述前缀符号,如“Vesx或者“V。在本系列文章的第二篇文章中,我们将讨论如何使用脚本进行Active Directory计算机对象Description查询;在第三部分中,我在Active Directory范式的基础上做了进一步扩展,其中包括用一个自定义属性来标识计算机是物理平台还是虚拟平台。在这系列第一部分中,我介绍了如何使用计算机对象Description属性标识出虚拟平台和物理平台的方法。同时我也阐述了如何使用vbscript为大量计算机修改Description属性。
在本文中,我将介绍查询Active Directory的方法,来查询匹配预定义Description属性前缀的计算机对象。例如,如果用户希望查找所有虚拟机,可能就需要找出所有Description属性以“V开始的计算机。如果要查找所有基于Xen的虚拟机,就需要查询所有Description属性以“Vxen开始的计算机。
在上一篇文章中我解释了如何使用Active Directory Users and Computers执行计算机对象查找,但是有时用户要么是为了和其它管理工具保持完整性,要么是为了长时期保存,也可能希望输出存储在一个文本文件中。考虑到这些的话,可以使用脚本程序QueryDescription.vbs(在我的个人主页上可以下载到文本格式)。执行这个脚本程序,可以返回一个计算机列表,这些计算机的Description属性都是以预定义字符串开始的。
为了在读者的工作环境中使用这个脚本程序,需要编辑三个变量:
●strPrefix
;●strDomainTarget
;●strLogFile
;strPrefix标识Description属性前缀,以包括查询使用。例如,把strPrefix设置为“V将会返回所有虚拟机列表。如果把strPrefix设置为“Ps,将会返回所有物理服务器列表。
strDomainTarget用来标明用户希望查询域的不同名字,这个变量的设置需要和用户的域名相匹配。因此如果用户管理的是searchservervirtualization.com域的话,strDomainTarget就需要设置为“dc=searchservervirtualization, dc=com。需要注意的是用户也可以通过新增一个不同的名字限制一个OU的连接范围,例如,为了连接TechTarget.net域中的“WebOU,strDomainTarget就应该设置为“ou=web,dc=techtarget, dc=net。
最后一个可能需要修改的变量是strLogFile。strLogFile标识脚本程序输出的日志文件所存储的位置。默认保存到C盘根目录下,下面是一个日志文件的样例:
The following computers have the vesx Description Prefix:
;Computer Name
;=============
;FS1
;FS2
;Hernandez
;Maine
;web1
;web2
;web3
相信读者也看到了,在Active Directory中跟踪虚拟机对象没有看起来那么难。使用脚本程序修改Description属性来标识计算机是特定的虚拟机类型或者是物理系统,使用该方法可以允许用户更迅速地合理部署一个系统,并且可以更轻松地跟踪整个企业内部系统中的所有虚拟机。在全部现有的物理计算机和虚拟机对象在它们的Description属性中都设置合适的前缀之后,用户应该确保所有新加入域的虚拟机也拥有正确的Description属性前缀(如Vesx、Vvi、Vms等)。企业内部的部署和更改控制流程也需要随之进行更新,以保证这些操作正常进行。