使用 PowerShell 收集 AD 信息

    Collect Active Directory information by PowerShell.

    發現經常安排不過來去現場獲取基礎架構環境的信息,而客戶的維護人員有時候又不知道要幫助收集哪些信息。用韋小寶的話說,我們要運籌什麼什麼之中,決勝什麼什麼之外。所以要看看有沒有辦法不用人在現場就收集一些信息。

    在寫了一段用來收集Exchange架構的PowerShell之後,由於Exchange非常依賴於AD,我感覺有必要收集更多的AD的信息。所以嘗試增加一些AD的腳本。通常來說,瞭解AD的情況,可以分爲幾個部分:林和域的情況,站點和子網的情況,複製的情況,域間信任以及組織單元。

  • 林和域

    收集林的情況主要需要林的名稱、根域,功能級別,主機角色和包含站點等信息。

image

    收集域的情況主要需要域名,功能級別,主機角色等信息。

image

    獲取五個主機角色,使用兩條命令就可以。

Get-ADForest |fl RootDomain,ForestMode,DomainNamingMaster,SchemaMaster
Get-ADDomain |fl Name,DomainMode,InfrastructureMaster,RIDMaster,PDCemulator

image

    當然,每臺域控制器的信息也是需要的。

image

    有點雜亂,所以只看名稱、所在域、操作系統版本(也可以加上Build Number)和所在站點。

image

    當然,可以按照站點或者其他來記個數。

  • 站點和子網

    站點和子網的瞭解,往往是優化AD使用例如登錄慢、經常出錯的起點之一。而直接使用默認的Get-ADSite的命令,沒有我們想要的站點和子網的關聯關係。

    因此,需要一個有技巧的操作。使用Get-ADObject,直接查詢需要的AD對象。

image

    舉例來說,爲了查看站點及關聯的子網,我們可以直接從AD配置裏篩選對象類型是Site的AD對象,然後查看這個對象裏記錄的子網信息。

   我相信任何人第一次寫的時候一定有點懵,即使你是個AD的老司機。沒關係,讓我們掏出AD的神器ADExplorer。這是大神Mark好多年前做的工具,伴隨我從青春年少,走到了油膩蒼老……

image

    找到我們想要收集信息的站點,點擊站點對象,就能看到,其實它包含了子網的信息,這些信息在屬性siteObjectBL中,所以纔可以使用特定的過濾,把這些信息從浩如煙海的AD信息中篩選出來。

    過濾器的寫法,就是'objectClass –eq "site"',爲了避免搜索整個AD,我們加上起始搜索位置,即'CN=Configuration,DC=contoso,DC=com'。DC的名稱按照實際域名修改即可。

image

     我發現看上去結果不是很順眼,所以改從子網來顯示對應站點。這當然也沒有問題。把過濾器寫成'objectClass –eq "subnet"',然後收集屬性 siteObject即可:

Get-ADObject -Filter 'objectClass -eq "subnet"' –SearchBase 'CN=Configuration,DC=contoso,DC=Com'  -Properties siteObject | FT Name,siteObject

image

    站點鏈接的話,一條簡單的PowerShell就搞定了。可以用FormatList/fl 讓輸出看的清爽一些。

  • AD複製

Get-ADReplicationConnection

Get-ADReplicationSite

Get-ADReplicationSiteLink

Get-ADReplicationSiteLinkBridge

Get-ADReplicationSubnet

Get-ADReplicationFailure

    測試環境就一臺DC,先放着吧。

  • 信任關係

Get-ADTrust

   測試環境暫時沒做多域,先放着吧。

  • 組織單元

    想起十幾年前,用VB腳本加上遞歸查詢OU了……通常在初步瞭解AD信息時,其實很少馬上收集OU、用戶、組等信息,因爲數量太大。如果需要收集的話,當然也不是沒辦法。

    先用複雜的,上ADObject,使用過濾器只顯示類型是Organizational Unit的對象。於是我們得到了所有的OU的清單。

image

    相同的,直接使用簡單的Get-ADOrganizationalUnit,同樣可以得到一致的結果。

Get-ADObject -Filter 'objectclass -eq "organizationalunit"' –SearchBase 'DC=contoso,DC=Com' |fl DistinguishedName
Get-ADOrganizationalUnit -Filter * |fl DistinguishedName
  • 其他

    理論上AD裏需要的信息,都可以通過Get-ADObject來拿到。只是需要提前想好使用怎樣的過濾器,提取怎樣的對象屬性而已。

    我想起以前部署System Center Configuration Manager架構的時候,需要在AD的System下確認一個容器。以前很難跟不瞭解AD的去描述,所以大多需要自己動手使用工具查看。現在簡單了。

    舉個例子,我們要確認CN=System下有沒有CN=RpcServices的容器,簡單一條命令就可以了。

image

Get-ADObject -Filter 'cn -eq "rpcservices"' –SearchBase 'CN=System,DC=contoso,DC=Com'

    如何使用Get-ADObject的進一步信息,可以參考:https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-adobject

     對過濾器的使用語法,和PowerShell一致:

image

    所以,可以使用通配符來獲得多個結果~

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章