隨著很多企業部署越來越多的虛擬化平台如何區分物理服務器和虛擬服務器也變得越來越難有些管理員在每台虛擬機的主機名後加上_vm以示區別然而很多企業不喜歡這種方法因為任何名字的變化都會影響到用戶和應用程序訪問虛擬機數據信息的方式在服務器轉變為虛擬機之後改變服務器的名字可能也會影響到服務器本地安裝的應用程序和服務如果管理員對一台遵循從物理平台到虛擬平台(PV)遷移的服務器重新命名他們通常使用DNS中的CNAME記錄以此來保證名字解析的透明性但是這種方法增加了對服務器資源管理的額外復雜度另外一種標識服務器對象(無論是虛擬環境還是物理環境)的方法是使用每一台計算機對象Active Directory中的Description屬性已經有一些企業使用Description屬性來標識一台計算機的位置部門或者角色考慮到這一點使用Description屬性可能要求用戶能夠簡潔地標識出是物理平台還是虛擬平台例如可以使用如下的命名規范
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
在所有Description屬性中我比較喜歡使用P作為物理平台的前綴V作為虛擬平台的前綴這樣做的話可以使用戶使用腳本語句對所有的虛擬機做查詢操作例如僅通過腳本查詢每一台計算對象的Description屬性的第一個字母
圖和圖給出了通過計算機對象的Description屬性標識虛擬機的兩種方法
圖使用Description屬性標識一台Xen虛擬機
圖使用Description屬性標識一台物理服務器以及其位置部門和角色
有了這些合適的命名規范通過使用Active Directory Users and Computers和給這些對象排序(使用Description屬性)就可以很快地在任何一個Active Directory容器中定位到虛擬機對象點擊Active Directory Users and Computers中的Description列就可以做到這些雙擊的話就可以按照降序排序如圖是一個通過Description排序計算機對象的例子
圖在Active Directory Users and Computers中排序虛擬機計算機對象
圖在Active Directory Users and Computers中排序虛擬機計算機對象
在大型企業中很多管理員發現Active Directory查詢屬性非常有用例如為了定位所用域中的成員計算機(這些計算機都是ESX虛擬機)以下幾個步驟就非常必要
在Active Directory Users and Computers窗口右鍵點擊Domain Object選擇Find
在Find對話框點擊Find Dropdown菜單選擇Computers
接下來點擊Advanced屬性頁在Advanced屬性頁下點擊Field按鈕在復合的dropdown菜單中選擇Description
在Condition Dropdown菜單中選擇Starts With
在Value屬性中輸入Vesx注意如果需要搜索所有虛擬機只需輸入V
接下來點擊Add按鈕
現在可以點擊Start開始查詢(如圖)就可以顯示出那些Description屬性以Vesx開頭的計算機對象
圖ESX虛擬機Active Directory查詢
當然使用Active Directory Users and Computers GUI只能完成這些工作在大型環境中用戶可能希望使用腳本語言來填充每一台計算機對象的Description屬性下面的SetDescriptionvbs腳本就可以從一個文本文件中讀取一個計算機列表也可以修改這些已有的Description屬性確保其有一個物理或者虛擬的標識符作為前綴
SetDescriptionvbs
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=computersdc=virtualdc=net
strSourceFile file that contains computer
account list
strSourceFile = c:\computerstxt
Constants
Const ForReading =
Open Source File
Set objFSO = CreateObject(ScriptingFileSystemObject)
set objSourceFile = objFSOOpenTextFile(strSourceFile_
ForReading True)
Connect to Directory Service
Modify computer description for each computer in
source file list
Do Until objSourceFileAtEndOfStream
strcomputer = objSourceFileReadline
strADSpath = LDAP://cn= & strcomputer & _
& strDomainTarget
Set objComputer = GetObject(strADSpath)
strOldDes = objcomputerdescription
If strOldDes = then
strNewDes = strPrefix
Else
strNewDes = strPrefix & & strOldDes
End If
objcomputerPut Description strNewDes
objcomputerSetInfo
Loop
注意在上述腳本中需要修改如下的三個變量
●strPrefix
●strDomainTarget
●strSourceFile
strPrefix標識虛擬機的前綴用來給每台計算機Description屬性賦值例如對於ESX虛擬機就可以把strPrefix賦值為Vesx對於物理服務器可以給strPrefix賦值為PsstrDomainTarget必須用來給容器設置不同的名字在這些容器中包含有目標計算機例如如果計算機對象在域的Computers容器中這個strDomainTarget變量就應該設置為cn=computersdc=techtargetdc=com如果計算機對象在域的Development OU中這個strDomainTarget變量的值就應該設置為ou=developmentdc=techtargetdc=com需要注意的是腳本一次只能在一個Active Directory容器中運行因此如果需要修改多個容器中計算機對象的話用戶就需要在每一個Active Directory目標容器中運行一次腳本程序
strSourceFile用來標識文本文件在這些文本文件中是一個需要修改的計算機名列表文件中的每一行都需要列出一個計算機主機名字如下的鏈接中是一個樣例computerstxt
在每一台計算對象的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執行計算機對象查找但是有時用戶要麼是為了和其它管理工具保持完整性要麼是為了長時期保存也可能希望輸出存儲在一個文本文件中考慮到這些的話可以使用腳本程序QueryDescriptionvbs(在我的個人主頁上可以下載到文本格式)執行這個腳本程序可以返回一個計算機列表這些計算機的Description屬性都是以預定義字符串開始的
為了在讀者的工作環境中使用這個腳本程序需要編輯三個變量
●strPrefix
●strDomainTarget
●strLogFile
strPrefix標識Description屬性前綴以包括查詢使用例如把strPrefix設置為V將會返回所有虛擬機列表如果把strPrefix設置為Ps將會返回所有物理服務器列表
strDomainTarget用來標明用戶希望查詢域的不同名字這個變量的設置需要和用戶的域名相匹配因此如果用戶管理的是searchserv域的話strDomainTarget就需要設置為dc=searchservervirtualization dc=com需要注意的是用戶也可以通過新增一個不同的名字限制一個OU的連接范圍例如為了連接域中的WebOUstrDomainTarget就應該設置為ou=webdc=techtarget dc=net
最後一個可能需要修改的變量是strLogFilestrLogFile標識腳本程序輸出的日志文件所存儲的位置默認保存到C盤根目錄下下面是一個日志文件的樣例
The following computers have the vesx Description Prefix:
Computer Name
=============
FS
FS
Hernandez
Maine
web
web
web
相信讀者也看到了在Active Directory中跟蹤虛擬機對象沒有看起來那麼難使用腳本程序修改Description屬性來標識計算機是特定的虛擬機類型或者是物理系統使用該方法可以允許用戶更迅速地合理部署一個系統並且可以更輕松地跟蹤整個企業內部系統中的所有虛擬機在全部現有的物理計算機和虛擬機對象在它們的Description屬性中都設置合適的前綴之後用戶應該確保所有新加入域的虛擬機也擁有正確的Description屬性前綴(如VesxVviVms等)企業內部的部署和更改控制流程也需要隨之進行更新以保證這些操作正常進行
在本系列文章的最後一部分我將探討自定義Active Directory的一些方法通過這些自定義Active Directory可以使用自定義虛擬機屬性如果使用已有Description屬性(其它屬主的Description屬性)下一篇文章中給出的解決方案或許正是讀者所需要的
在本系列文章的的前兩篇中我描述了一種通過計算機對象Active Directory中Description屬性來標識一個工作環境是物理環境還是虛擬環境的方法在本文中我將對Active Directory Integrity做進一步介紹探討自定義Active Directory模式用來支持新的虛擬化屬性
在本文中我給出了創建兩個自定義Active Directory屬性(isVirtual屬性和vmType屬性)的基本步驟isVirtual屬性是一個布爾變量用來標識一台計算機是物理計算機還是虛擬計算機如果isVirtual設置為True就說明該計算機對象是虛擬機如果用戶希望以更細的粒度標識虛擬機就需要增加vmType屬性vmType是一個字符串變量可以用來標識一台虛擬機的虛擬平台在此需要使用第一篇文章中所描述的命名規范
需要注意的是本文所述的過程要求Active Directory模式修改修改後是不可撤消的如果存在問題那麼你需要評估本系列前兩篇文章中所描述的解決方案對於擴展Active Directory模式的技術背景用戶需要看是TechNet的一篇文章《Extending the schema》在這篇文章中有幾個微軟文檔的鏈接微軟的這幾篇文檔解釋模式修改的程序及其微小差異一定要記住本文列出的幾個步驟在應用到產品領域之前一定要先在某個測試環境中進行評估
在開始之前如果還沒有對象標識符((OIDObject Identifier))的話需要為企業申請一個如果企業沒有OID就需要在MSDN的Active Directory Naming Registration網站申請一個另外在這篇之外也不失一般性最好的方案是在通用名字和LDAP顯示名字中使用企業指定的模式前綴例如我的模式前綴是cwolf因此不是使用通用名字isVirtual最好的方法是使用cwolfisVirtual關於模式命名更多的信息參看Microsoft Windows Server 應用程序規范請注意如果讀者希望在一個實驗室環境中測試這些流程可以使用我在本文中給出的OID變量
為了創建新isVirtual屬性和vmType屬性需要注冊Active Directory模式MMC嵌入式管理單元為了注冊這個管理單元需要登錄域控制器運行命令regsvr schmmgmtdll注意只有用戶是模式管理組成員才可以能夠對Active Directory模式做出改動
接下來就需要運行mmc目錄打開一個空MMC shell在shell上新增Active Directory模式管理單元如果創建一個自定義的虛擬機屬性以下幾個步驟是很有必要的
在Active Directory Schema MMC中右鍵點擊Attributes Container選擇Create Attribute
查看Schema Object Creation warning對話框點擊Continue一定要注意屬性增加將會導致Active Directory模式的永久性改變
在如圖所示的對話框中輸入如下變量
Common Name: isVirtual
LDAP Display Name: isVirtual
Unique X Object ID: Prefix value associated with organizations OID followed by a unique attribute identifier For example
Description: Identifies a computer as virtual
Syntax: Boolean
在Create New Attribute對話框中輸入要求的變量之後點擊OK就可以創建Description屬性
接下來需要創建vmType屬性右鍵點擊Attributes Container選擇Create Attribute
查看Schema Object Creation warning對話框點擊Continue
在Create New Attribute對話框中(如圖)輸入如下變量
Common Name: vmType
LDAP Display Name: vmType
Unique X Object ID: Prefix value associated with organizations OID followed by a unique attribute identifier For example
Description: Identifies the VMs virtualization platform
Syntax: Caseinsensitive string
刷新模式之後就可以看見新增的屬性右鍵點擊Active Directory Schema object選擇Reload the Schema
接下來點擊Attributes Container定位isVirtual屬性看到isVirtual屬性之後右鍵點擊選擇Properties
在isVirtual Properties對話框中檢查Index this Attribute in the Active Directory復選框點擊OK注意在此也需要選上 Attribute is Active框
如果新增vmType Attribute重復第步和第步
需要注意的是所創建的屬性必須和計算機類相關聯所以需要擴展類容器並且定位Computer類右鍵點擊Computer選擇Properties
在Computer Properties對話框中選擇Attributes屬性頁點擊Add按鈕
在Select Schema Object對話框中向下拉選擇isVirtual attribute然後選擇OK
在Computer Properties對話框的Attributes復選框內再次點擊Add按鈕
現在可以選擇vmType Attributes點擊OK
在在Computer Properties對話框的可選屬性中就可以看到isVirtual和vmType點擊OK保存更改
圖創建isVirtual屬性
圖創建vmType屬性
注意這些步驟將會改變模式對Active Directory模式的任何改變將會影響到整個集群所以需要確保在嘗試該流程之前對於這些變化有適當的符號結束指令
在屬性增加到模式之後就需要配置屬性使用setvirtualvbs vbscript腳本程序設置計算機isVirtual屬性
strComputerDN = CN=reyesCN=ComputersDC=virtualDC=net
Set objComputer = GetObject(LDAP:// & strComputerDN)
objComputerPut isVirtual true
objComputerSetInfo
另外還需要編輯strComputerDN變量的名字確保和要編輯的計算機的不同名字保持一致可以使用如下queryvirtualvbs 腳本查詢一台計算機的isVirtual屬性
strComputerDN = CN=reyesCN=ComputersDC=virtualDC=net
Set objComputer = GetObject(LDAP:// & strComputerDN)
isVirtual = objComputerget(isVirtual)
wscriptecho(strComputerDN & isVirtual = & isVirtual)
如果需要為很多計算機設置isVirtual和vmType屬性我的個人主頁上的setvirtualattributesvbs 腳本程序可以完成這項工作
但是需要修改腳本程序中的以下幾個變量
blnIsVirtual
strVMtype
strDomainTarget
strSourceFile
在使用腳本標識計算機對象為虛擬機的情況下blnIsVirtual需要被設置為True
strVMtype標識虛擬機類型代碼用來自定義每台計算的vmType屬性例如設置ESX虛擬機的strVMtype為Vesx
strDomainTarget必須用來給容器設置不同的名字在這些容器中包含有目標計算機例如如果計算機對象在域的Computers容器中這個strDomainTarget變量就應該設置為cn=computersdc=techtargetdc=com如果計算機對象在域的Development OU中這個strDomainTarget變量的值就應該設置為ou=developmentdc=techtargetdc=com需要注意的是腳本一次只能在一個Active Directory容器中運行因此如果需要修改多個容器中計算機對象的話用戶就需要在每一個Active Directory目標容器中運行一次腳本程序
strSourceFile用來標識文本文件在這些文本文件中是一個需要修改的計算機名列表文件中的每一行都需要列出一個計算機主機名字如下的鏈接中是一個樣例computerstxt
最後為了定位一個特定域內的所有虛擬機需要運行QueryVirtualAttributesvbs腳本該腳本程序可以在我的個人主頁上下載到文本格式為了在讀者的工作環境中運行該腳本需要修改三個變量
strVMtype
strDomainTarget
strLogFile
strVMtype標識用戶可能查詢的虛擬機平台類型例如設置strVMtype為Vxen將會輸出一個所有基於Xen的虛擬機列表使用V作為vmType變量將會輸出isVirtual屬性都是True的計算機列表同時還有vmType屬性的值
strDomainTarget用來標明用戶希望查詢域的不同名字這個變量的設置需要和用戶的域名相匹配因此如果用戶管理的是searchserv域的話strDomainTarget就需要設置為dc=searchservervirtualization dc=com需要注意的是用戶也可以通過新增一個不同的名字限制一個OU的連接范圍例如為了連接域中的WebOUstrDomainTarget就應該設置為ou=webdc=techtarget dc=net
最後一個可能需要修改的變量是strLogFilestrLogFile標識腳本程序輸出的日志文件所存儲的位置默認保存到C盤根目錄下下面是一個日志文件的樣例
The following computers have the Vesx vmType attribute
Name VM Type
==== =======
Reyes Vesx
Maine Vesx
Wagner Vesx
WS Vesx
從本系列文章的第一部分和第二部分中提到的技術可以看到每次一台新計算機對象創建時為isVirtual和vmType自定義AD屬性值是非常重要的
整合虛擬化管理和Active Directory可以給用戶對於審計和管理整個企業內部所有虛擬機更大控制權令人振奮的消息是本系列文章中提到的一個解決方案可以提供AD整合和管理這或許正是各位讀者正在尋找的如果不是的話請告知我還需要那些技術來簡化虛擬化工作環境的管理工作
From:http://tw.wingwit.com/Article/os/fwq/201311/10200.html