HOWTO · PowerShell
PowerShell で LDAP クエリを実行する方法
Active Directory モジュールを準備し、ディレクトリクエリには PowerShell 式フィルターまたは LDAP 検索フィルターを選択します。
このページの内容
Active Directory にクエリを実行するには、その構文が cmdlet でサポートされている場合に、PowerShell 式構文とともに Filter パラメーターを使用します。LDAP 検索フィルターを記述したい場合は -LDAPFilter を使用します。どちらの方法でも、Active Directory モジュールと、ドメイン コントローラーへの認証済み接続が必要です。以下のセクションでは、セットアップ、ユーザー検索、LDAP グループフィルターのパターンについて説明します。
PowerShell に Active Directory モジュールをインストールする
クエリを実行する前に、Active Directory モジュールをインストールし、ドメインに参加しているコンピューターを使用し、ドメイン コントローラーに対して認証を行います。このモジュールは Remote Server Administration Tools (RSAT) によって提供されます。Install-Module だけではインストールされません。
サポートされている Windows クライアント エディションでは、RSAT 機能を Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online で追加できます。その機能を提供する Windows Server エディションでは、Install-WindowsFeature -Name RSAT-AD-PowerShell -IncludeAllSubFeature を使用します。これらのコマンドはプラットフォームとバージョンに依存します。その機能が対象のオペレーティング システムに適用されることを確認し、適切に昇格された PowerShell セッションでコマンドを実行してください。RSAT コンポーネントをインストールすると、Windows PowerShell 用の Active Directory モジュールが提供されます。
Active Directory クエリに Filter パラメーターを使用する
Active Directory モジュールの Filter パラメーターは、PowerShell 式構文を受け入れます。サポートされているディレクトリ プロパティを -eq などの演算子で比較し、文字列値は引用符で囲みます。ワイルドカード * は文字列値内のテキストに一致します。たとえば、名前によるユーザー検索は Get-ADUser -Filter "Name -eq 'John'" と記述できます。サポートされているパラメーターとフィルター可能なプロパティについては、特定の cmdlet のドキュメントまたは Get-Help の出力を確認してください。パラメーターのサポートとプロパティ名は cmdlet によって異なる場合があります。
この自己完結型の例では、部門検索用のフィルター文字列を構築します。クエリに適合させる際はサンプル値を置き換えてください。Active Directory クエリ自体には、上記のモジュールとドメイン アクセスが必要です。
$department = 'Engineering'
$filter = "Department -eq '$department'"
Write-Output $filter
Department -eq 'Engineering'
この例は実行され、上に示したフィルター文字列が生成されました。これは文字列を構築するものであり、ディレクトリには接続しません。PowerShell 式は -Filter に渡す値の中に保持してください。
LDAP クエリに -LDAPFilter パラメーターを使用する
LDAP は、ディレクトリ データにアクセスして変更するためのベンダー中立のプロトコルです。それ自体はディレクトリ データを保護しません。お使いの環境用に構成された認証とトランスポートの保護を使用してください。Active Directory は LDAP を実装しており、その検索フィルター構文は RFC 4515 で定義されています。各フィルター ルールはかっこで囲まれます。cmdlet が -LDAPFilter をサポートしている場合、このパラメーターは LDAP 検索フィルター構文を受け入れます。選択する前に、該当する cmdlet でサポートされているパラメーターを確認してください。
以下は Get-ADGroup -LDAPFilter のフィルター値です。これらは構文の例示であり、単独のコマンドではなく、その結果はディレクトリに依存します。
- 共通名 (
cn) がDepartmentのグループに一致:Get-ADGroup -LDAPFilter '(cn=Department)'. - 共通名が
Departmentで説明がProdのグループに一致:Get-ADGroup -LDAPFilter '(&(cn=Department)(description=Prod))'. - 共通名が
Professional Services DepartmentまたはShare Accessのグループに一致:Get-ADGroup -LDAPFilter '(|(cn=Professional Services Department)(cn=Share Access))'. - 説明が
Prodではないグループに一致 (その属性を持たないエントリを含む):Get-ADGroup -LDAPFilter '(!(description=Prod))'. - 説明が
Prodで、共通名Departmentを除外するグループに一致:Get-ADGroup -LDAPFilter '(&(description=Prod)(!(cn=Department)))'. - パス
\\fileserver1\shareを含む説明に一致:Get-ADGroup -LDAPFilter '(description=\5c\5cfileserver1\5cshare)'. LDAP フィルターでは、\5cはリテラルのバックスラッシュを表します。入力からフィルターを構築する際は、RFC 4515 に従って値内の特殊なフィルター文字をエスケープしてください。