Active Directory内のオブジェクト(ユーザー、グループ、コンピューターなど)を名前で取得するのは、デフォルトでは少々不自然な制限があります。ADUCスナップイン(dsa.msc)は、ほとんどの場合ワイルドカードや正規表現パターンを処理できないため、「名前に「sql」を含むもの」を検索すると、実際の検索というよりは推測に近いものになります。「*sql*」などのワイルドカードを直接検索しようとすると、通常はうまくいきません。ワイルドカードはサポートされているはずなので、これはイライラさせられますよね?いいえ、そうではありません。しかし、ご安心ください。この問題を回避する方法がいくつかあります。特にLDAPクエリやPowerShellを使用すると、はるかに高度な制御が可能になります。この方法を使えば、「sql」グループやユーザーがAD内のどこに隠れていても、すぐに見つけることができます。
要点はこうです。組み込みツールは期待通りのワイルドカードをサポートしていませんが、特定のLDAPクエリやPowerShellコマンドを実行することで、必要な処理を自動化できます。GUIで頭を悩ませるのにうんざりしているなら、これらの方法を使えば、オブジェクトをより速く、より確実に見つけることができます。場合によっては部分一致でも見つかるかもしれません。必ずしも簡単ではありませんが、構文さえ理解してしまえば、あとはコピー&ペーストするだけです。Windowsは当然ながら、必要以上に検索を難しくしようとしているのですから。
ADUC を使用して Active Directory ユーザーまたはグループを検索する方法
ADUC でパターンマッチングに LDAP クエリを使用する
これはよくある不満です。LDAPでは「name contains ‘sql’」という検索が可能なのに、GUIでは直接検索できないのです。LDAPクエリウィザードを開くには、次のコマンドを実行してください。
%SystemRoot%\SYSTEM32\rundll32.exe dsquery, OpenQueryWindow
これにより、検索ウィンドウがポップアップ表示され、LDAP クエリを作成できます (例: name=*sql*)。ここで重要なのは、LDAP に、名前のどこかに「sql」が含まれるオブジェクトを検索するように指示することです。これは、ADUC GUI 自体の基本検索ボックスではサポートされていません。
検索ウィンドウで「カスタム検索」を選択し、 「詳細設定」タブに移動します。次に、 と入力しますname=*sql*。ADが名前に「sql」を含むすべてのオブジェクトを検索しているのが確認できます。一度使いこなせれば非常に便利です。グループのみを絞り込むには、 を使用します(&(objectcategory=group)(name=*sql*))。これは、LDAPに「名前に「sql」を含むグループのみ」と明示的に指示するのと同じです。
なぜこれが役立つのか、いつ使うべきか
名前の一部は分かっているものの、その部分を含むすべてのオブジェクトを、正確な位置に関係なく検索したい場合に便利です。これはデフォルトのGUIではうまく機能しません。「sql」が先頭、中間、末尾のどこにあっても、一致するすべてのオブジェクトが表示されます。ただし、LDAPクエリの構文が間違っている場合、または文字をエスケープし忘れた場合は、何も返されない可能性があります。設定によっては、動作が遅くなったり、最初は機能しなかったりすることがありますが、再試行するか再起動すると改善されます。
Active Directory 内のコンピュータの検索
コンピューターでのワイルドカード検索にLDAPを使用する
名前のどこかに「sql」が含まれるコンピュータを探す必要がある場合は、カスタム検索で同様の LDAP クエリを使用する必要があります。
(&(objectcategory=computer)(name=*sql*))
これは、命名規則を持つサーバーやワークステーションを監査する場合に特に便利です。デフォルトの検索では部分一致が見つからないため、より柔軟な検索にはLDAPが最適です。
PowerShell を使用して AD オブジェクトを検索する
PowerShellが真の救世主である理由
正直なところ、PowerShellを使えば構文さえ覚えてしまえば、全てが簡単になります。PowerShellの方が速く、柔軟性もはるかに高いです。肝心なのは、Active Directoryモジュールをインポートして特定のコマンドレットを実行することです。まだ試していない場合は、以下の手順から始めてみてください。
Import-Module ActiveDirectory
名前に「sql」が含まれるグループを検索するには、次のコマンドを実行します。
Get-ADGroup -Filter {name -like "*sql*"} -Properties Description, Info | Select-Object Name, SamAccountName, Description, Info | Sort-Object Name
同じ概念がユーザーとコンピュータにも適用されます。
Get-ADUser -Filter {name -like "*sql*"} Get-ADComputer -Filter {name -like "*sql*"}
すべてのオブジェクト タイプにわたってより広範囲に検索したい場合は、次の操作を試してください。
Get-ADObject -Filter {name -like "*sql*"} -Properties * | Select-Object sAMAccountName, ObjectClass, userPrincipalName, DisplayName, Description | Format-Table
もう1つのコツ:生のLDAPフィルターを直接使用することもできます。これは、特定のオブジェクトクラスを探している場合に非常に便利です。例:
Get-ADObject -LdapFilter "(&(objectCategory=person)(objectClass=user)(cn=*sql*))" -SearchBase "OU=DE, DC=woshub, DC=com"
なぜこれが機能するのか、いつ試すべきか
PowerShellコマンドはGUIの制限を回避し、ワイルドカードや正規表現のような一致検索が可能です。さらに、自動化スクリプトを作成したり、クエリを保存して後で実行したりすることも可能です。Windows環境でPowerShellの最新バージョンを使用している場合、これはかなり安定して動作します。ただし、応答が遅かったり、結果が空白になったりする場合もあります。これはおそらく権限の問題や検索ベースが間違っていることが原因です。しかし、全体的にはGUIを何度もクリックするよりもはるかに高速です。
まとめ
Active Directoryでワイルドカードを扱うのは、PowerShellやLDAPのテクニックを使わなければ簡単ではありませんが、これらのコマンドとクエリを設定すれば、名前の一部を含むオブジェクトを見つけるのは簡単です。主に構文の問題で、少し学習が必要ですが、見つけにくいアカウントやグループを探すときには、その価値は十分にあります。設定によっては、特にLDAPフィルターを使用する場合、多少の試行錯誤が必要になるかもしれませんが、数回試せばスムーズに進むでしょう。
ただし、ADツールは初期状態では機能が限られているため、LDAPとPowerShellを活用するのが最善策です。このアプローチは、特に大規模な環境や複雑な命名スキームを扱う場合、間違いなく時間を大幅に節約できます。この方法が、誰かの終わりのない手動検索地獄からの脱出に役立つことを願っています!
まとめ
- 高度な検索を行うには、 rundll32.exeを使用してLDAP クエリ ウィンドウを開きます。
name=*sql*パターン マッチング用のまたは のような LDAP クエリを作成します(&(objectcategory=group)(name=*sql*))。- ワイルドカードと LDAP フィルターを使用して、PowerShell のGet-ADGroup、Get-ADUser、およびGet-ADComputer を活用します。
- 結果が表示されない場合は、必ずSearchBaseと LDAP 構文を再確認してください。