Get-AdUser:如何使用PowerShell审计Active Directory用户

PowerShell是IT管理員的必備工具,使用Get-AdUser命令可以輕鬆審核Active Directory使用者帳戶。在這個指南中,我們將詳細介紹如何使用流行的Active Directory cmdlet開始進行操作。

介紹Get-AdUser PowerShell cmdlet

Get-AdUser cmdlet是最受歡迎的Active Directory PowerShell cmdlets之一。它允許您獲取指定的使用者物件,或進行自定義搜索以獲取多個使用者物件。

廣告

Identity參數用於指定要獲取的Active Directory使用者。您可以選擇如何識別使用者:

  • 您可以使用其區分名稱(DN)、GUID、安全標識符(SID)或安全帳戶管理器(SAM)帳戶名稱。
  • 您也可以將該參數設置為使用者物件變數,例如$UserA,或將使用者物件通過流程引擎傳遞給Identity參數。

您可以使用Filter或LDAPFilter參數搜索並獲取多個使用者,Filter參數使用PowerShell表達式語言(PSL)查詢Active Directory。

PowerShell表達式語言語法為管理員提供了對由Filter參數接受的值類型進行豐富的類型轉換支持。如果您已經有輕量級目錄存取協定(LDAP)查詢字符串,請改用LDAPFilter參數。

如果未明確設置參數,Get-AdUser將顯示一組默認的用戶對象屬性。要檢索其他屬性,請使用Properties參數。我們稍後將介紹一些您可以使用的參數。

廣告

如何使用Get-AdUser及先決條件

在使用Get-AdUser和其他與Active Directory相關的PowerShell命令之前,您需要確保Active Directory模塊已安裝並加載到您的工作站上。根據您運行的Windows版本,您可以按照不同的方法來安裝此命令。

為了簡潔起見,我將介紹您作為管理員或IT專業人員管理本地Active Directory時可能遇到的兩種最普遍的方法。

首先,您可以使用以下PowerShell命令從Windows Update直接安裝遠程伺服器管理工具(RSAT)工具。

Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"

第二种方法是使用设置应用程序直接安装RSAT工具。点击开始-> 设置 -> 应用 -> 可选功能 -> 添加功能 -> 并在RSAT: Active Directory 域服务和轻量目录服务工具选项中打勾。

广告

点击安装按钮。

如何使用 -Identity 参数查找AD用户帐户

好的,让我们开始使用cmdlet,并向您展示如何帮助您变得更熟练(和更快!)以获取您所需的信息。我正在我的(Windows Server 2022 Active Directory)Hyper-V实验室环境中工作,并登录到Windows 10 21H1客户虚拟机(VM)。我在“开始菜单”中搜索了“Active Directory Module for Windows PowerShell”并通过“以管理员身份运行”来打开它。

Active Directory Module for Windows PowerShell

首先,让我根据属性找到一个域用户

Get-ADUser breinders
Finding a user account via their sAMAccountName

这样就可以了。现在我们可以使用(或GUID)属性来查找用户。让我们试一试:

Get-ADUser bdcaaf45-e993-4be7-83d2-c1d280edc250
Finding an account via their objectGUID (GUID)

啊,同一個使用者帳戶。太棒了。我們也可以根據他們的安全識別碼或SID搜索使用者。

Get-ADUser S-1-5-21-3437955921-3370966048-1812589592-1107
Finding an account via their Security IDentifier (SID)

是的,有點重複,但你懂的。你也可以使用使用者的姓氏、名字、UserPrincipalName等。

使用Get-AdUser過濾器

在更大的環境中,我不建議單獨輸入’Get-AdUser’,因為它會開始檢索附加的AD域中的所有使用者對象。這不僅會開始用數據淹沒您的控制台,還可能給您的工作站使用的任何域控制器帶來明顯的壓力。

如果我們能夠篩選出整個使用者群體並根據某些屬性搜索特定使用者那該多好啊。這正是’ -filter’ 參數的作用!

‘ -filter’ 參數指定檢索AD對象的查詢字符串。此字符串使用PowerShell表達式語言(PEL)語法。PEL語法為由Filter參數接收的值類型提供豐富的類型轉換支持。語法使用按順序表示,這意味著運算符位於運算元和值之間。讓我們通過一些示例來讓你更好地了解。

首先,讓我們發現所有“已啟用”的帳戶。

Get-ADUser -filter {Enabled -eq "true"} | ft
Locating all the enabled accounts

我們正在使用可愛的 PEL 語法來查找所有 ‘Enabled’ 欄位等於 True 的帳戶。我們還在使用 Format-Table PowerShell cmdlet 來輸出結果,以得到更易讀的格式。

接下來,讓我們顯示所有具有電子郵件地址的使用者。

Get-ADUser -Filter {mail -ne "null"} -Properties Name,GivenName,mail| ft Name,GivenName,mail
Finding all the user accounts with an email address

首先,請注意我們使用 ‘-filter’ 參數來僅包括沒有 ‘null’ 電子郵件地址的使用者帳戶。簡單來說,就是所有具有電子郵件地址的帳戶。我知道有時候試著像電腦那樣思考很困難。

其次,我們專注於三個屬性 Name、GivenName 和 mail(電子郵件地址)。我們使用 Format-Table 並列出這些屬性。輕而易舉!

您可能還想從安全角度來審核您的帳戶。您也可以使用 ‘-filter’ 參數來找到所有具有 ‘passwordneverexpires’ 屬性的帳戶。一般來說這是不建議的

取得帶有名稱類似的 AD 使用者?

另一個很酷的功能是使用各種參數與 -filter 來找到僅符合 AD 使用者物件各種屬性的特定使用者。雖然我的實驗環境非常小,只有大約十個使用者帳戶,但仍可以展示快速找到您想要的帳戶的強大靈活性。在這裡,讓我們找到所有名稱中含有 ‘Reinders’ 的使用者。

Get-ADUser -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

我們正在使用 ‘Name’ 參數,並找出名稱中任何地方包含 ‘Reinders’ 的所有帳戶。這可能包括他們的名字、姓氏,甚至是如果已輸入的話的中間名。如果您只想找到姓氏為 Reinders 的用戶,請將 -like 字段更改為 “Reinders”。(注意,字段末尾沒有星號 (*))。

限制 Get-AdUser 搜索範圍按組織單位

如果您有一個相對較大的域/企業,當運行這些命令時,您可能會遇到更長的查詢時間,或對您的域控制器造成不必要的性能影響。讓我們談談將這些搜索的範圍限制到特定的 組織單位 (OU)

我們可以使用 ‘ -SearchBase ‘ 參數,並使用以下語法指定一個 OU(或多個 OU)。

Get-ADUser -SearchBase 'OU="Test Users",DC=reinders,DC=local' -filter * -Properties Name,EmailAddress | ft Name,EmailAddress
Here, we’re limiting the search scope to the ‘Test Users’ Organization Unit (OU)

在這裡,我們將我們的範圍限制在“測試用戶”OU 中的所有用戶,然後以表格格式輸出他們的名稱和電子郵件地址。

使用具有備用憑據的 Get-AdUser

默認情況下,Get-AdUser cmdlet 是在當前登錄用戶的上下文中運行的。如果您希望使用備用憑據運行該命令,您可以使用一個變量,將備用憑據存儲在該變量中,然後使用 ‘ -Credential ‘ 開關運行該命令。

$cred = Get-Credential Get-ADUser -Credential $cred -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

再次,非常簡單直觀!

使用 Get-AdUser 屬性參數

I’ve shown a few examples of the ‘-Properties’ parameter, but let’s take a step back and explain it a bit.

「-Properties」參數指定從伺服器擷取的輸出物件的屬性。默認情況下,如果您不使用它,將返回並顯示十個屬性。這些屬性包括 DistinguishedName、帳戶是否為「已啟用」或「已停用」、用戶的 GivenName、Name、GUID 等更多類似系統的屬性。但還有許多可用的屬性。使用此參數檢索不包含在默認集合中的屬性。

為此參數指定屬性,作為一個逗號分隔的名稱列表。要顯示在物件上設置的所有屬性,請指定 *(星號)。

要訪問這些其他屬性,只需指定它;使用屬性的名稱。對於非默認或擴展屬性,必須指定輕量級目錄訪問協定(LDAP)屬性的顯示名稱。

讓我們通過一些示例來了解一下。

Get-ADUser -filter * -Properties Name,PasswordLastSet | ft Name,PasswordLastSet
Displaying all users with the date and time their password was last set/reset

上面的示例顯示了域中所有使用者及其名稱以及其密碼上次設置/重置的日期/時間。

Get-ADUser -filter * -Properties Name,whencreated | ft Name,WhenCreated
Another nice feature is listing every user’s Creation Date in Active Directory

這顯示了帳戶在 Active Directory 中的創建日期。最後,讓我們通過一個查詢來為每個帳戶帶來名稱、部門和經理。

Get-ADUser -filter * -Properties Name,Department,Manager | ft Name,Department,Manager
Listing the Department and the Manager of each user, if they’re populated in Active Directory

最後一個範例和對 Export-Csv 指令 的絕佳應用。如果您需要獲取域中所有使用者的清單並包含所有屬性,請運行此命令將所有內容匯出至便於使用的 CSV 檔案。

Get-ADUser -filter * -properties * | Export-CSV c:\temp\Users.csv

摘要

I hope you gained some knowledge about how to use the Get-AdUser PowerShell command. This really scratches the surface, however, this is one aspect I like about the power of PowerShell: Learning about the core properties of a cmdlet and extrapolating it out to your organization.

通常,您可以輕鬆想到許多用例來利用此指令解決問題,為其他工程師創建一些文件,以及協助整體故障排除過程。它非常方便。當然,使用某些指令來產生 PowerShell 指令碼… 總是能提高效率!

歡迎在下方留下任何問題或意見。

相關文章:

Source:
https://petri.com/get-aduser-how-to-audit-active-directory-users-with-powershell/