在 PowerShell 中執行 LDAP 查詢

Marion Paul Kenneth Mendoza 2023年1月30日
  1. 在 PowerShell 中安裝 Active Directory 模組
  2. 為 PowerShell 過濾器使用 Filter 引數
  3. 在 PowerShell 中為 LDAP 過濾器使用 -LDAPFilter 引數
在 PowerShell 中執行 LDAP 查詢

使用 PowerShell 查詢 Active Directory 時最常見的挑戰之一是如何正確構建過濾器語法。

不幸的是,所有 Active Directory PowerShell 模組 cmdlet 上的過濾器和 LDAP 過濾器引數對許多人來說都是一個黑匣子。

本文將深入瞭解如何使用 Active Directory 過濾器和 LDAP 過濾器。

在 PowerShell 中安裝 Active Directory 模組

在繼續之前,需要一些先決條件。

  • 已安裝 PowerShell Active Directory 模組。
  • 加入域的計算機。
  • 成功連線並驗證到 Active Directory 域控制器。

通常,執行命令 Install-Module 應該從遠端 CDN 獲取軟體包並將其安裝在你的計算機上。儘管如此,對於 Active Directory 模組,我們必須建立一個先決條件包才能成功。

我們需要安裝的必備包是 `RSAT 或 Remote Server Administration Tools。

你可以執行下面的 PowerShell 指令碼在你的計算機或伺服器上安裝 RSAT

為 Windows 10 安裝 RSAT:

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online

為 Windows Server 安裝遠端伺服器管理工​​具(2008 至 2016 的多個版本):

Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature

在你的計算機上安裝遠端伺服器管理工​​具功能還將安裝適用於 Windows PowerShell 的 Active Directory 模組。

為 PowerShell 過濾器使用 Filter 引數

PowerShell 篩選器使用標準的 Windows PowerShell 表示式語法。此方法通常稱為 Active Directory 搜尋篩選器語法。

這些過濾器與 Filter 引數一起使用。

在過濾器中,你將使用運算子比較各種 AD 物件屬性。例如,Get-ADUser 命令返回 Name 屬性。

因此,如果我們想查詢與特定名稱匹配的所有使用者,你可以使用:

Get-ADUser -Filter "Name -eq 'John'"

屬性名稱可以是 LDAP 名稱或隨 Active Directory cmdlet 返回的屬性的規範名稱。

屬性值通常用單引號或雙引號括起來。唯一接受的萬用字元是星號*

我們可以在上面看到過濾器周圍有雙引號,但 John 被單引號覆蓋。

在 PowerShell 中為 LDAP 過濾器使用 -LDAPFilter 引數

輕量級目錄訪問協議 (LDAP) 是一種與供應商無關的協議,用於訪問和修改目錄資料。

當聽到目錄這個詞時,我們可能會想到電話簿,但這在 Active Directory 的上下文中意味著更多。

AD 儲存和訪問了許多不同的物件型別,LDAP 協議用於保護這些資料。由於 AD 可以保留許多不同的資料型別,因此應用程式和使用者需要輕鬆查詢該目錄。

Active Directory 實現了 LDAP,即輕量級目錄訪問協議。將 -LDAPFilter 引數與 cmdlet 一起使用,你可以使用 LDAP 過濾器,例如在 Active Directory 使用者和計算機中建立的過濾器。

LDAP 搜尋過濾器的語法在 RFC 編號 4515 中定義。每個過濾器規則都用圓括號 () 括起來。

以下是一些使用 Active Directory 組過濾器作為基礎開始建立你自己的過濾器的示例。

  • 所有名稱 (CN) 為 Department 的組。
`'(cn=Department)'
  • 名稱為 Department 且描述為 Prod 的所有組。
'(&(cn=Department)(description=Prod))'
  • 名稱為部門共享訪問的所有組。
'(|(cn=Professional Services Department)(cn=Share Access))'
  • 所有組都沒有 Prod 的描述。包括根本沒有描述欄位的那些。
'(!(description=Prod))'
  • 所有帶有 Prod 描述但不帶有 Department 名稱的組。
'(&(description=Prod)(!(cn=Department)))'
  • 描述為 \\fileserver1\share 的所有組。
'(description=\5c\5cfileserver1\5cshare)'
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn