今回は、Active Directory環境において非常に強力なコマンドラインツールである「dsquery」と「dsget」について、実務での活用方法を詳しく解説していきます。
GUIツールの「Active Directoryユーザーとコンピューター」に慣れている方も多いと思いますが、コマンドラインツールを使いこなすことで、トラブルシューティングの効率化や日常業務の大幅な時短が実現できます。
dsqueryとdsgetとは
dsqueryとdsgetは、Windows Server環境に標準で搭載されているActive Directoryのコマンドラインツールです。dsqueryは「検索」、dsgetは「情報取得」を担当し、この2つを組み合わせることで、GUI操作では時間がかかる作業を瞬時に完了できます。
特に大規模なActive Directory環境では、数百から数千のオブジェクトを効率的に管理する必要があり、これらのツールは欠かせない存在となります。
実行に必要な権限と環境
必要な権限
dsqueryとdsgetを実行するには、以下の権限が必要です。
- 読み取り専用操作: Domain Usersグループのメンバーであれば、基本的な検索と情報取得が可能
- 詳細情報の取得: 一部の機密情報(パスワード最終変更日など)にアクセスする場合は、適切な委任された権限が必要
- 推奨: Account Operators以上の権限があれば、ほとんどの操作が問題なく実行可能
実行環境
- Windows Server 2008以降(ドメインコントローラーまたはRSAT導入済みクライアント)
- コマンドプロンプトまたはPowerShellから実行可能
- ドメインに参加しているコンピューターから実行
コマンド実行時の注意事項
- 本番環境での実行前にテスト: 特に大量のオブジェクトを対象とする場合、検証環境で動作確認を推奨
- 出力結果の確認: パイプで複数コマンドを繋げる際は、途中結果を確認してから次のステップへ
- 権限の最小化原則: 必要最小限の権限で実行し、不要な高権限での実行は避ける
- ログの記録: 重要な操作は結果をファイルに出力して記録を残す
- ワイルドカードの使用: 意図しないオブジェクトを対象としないよう、検索条件は慎重に設定
dsqueryの基本構文とオプション
基本構文
dsquery [オブジェクトタイプ] [検索パラメータ] [オプション]
主なオブジェクトタイプ
| オブジェクトタイプ | 説明 |
|---|---|
| user | ユーザーアカウントの検索 |
| computer | コンピューターオブジェクトの検索 |
| group | グループの検索 |
| ou | 組織単位(OU)の検索 |
| contact | 連絡先オブジェクトの検索 |
| subnet | サブネットの検索 |
| site | サイトの検索 |
| server | サーバーの検索 |
| * | すべてのオブジェクトタイプを対象 |
dsquery 主要オプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
| -name | 名前で検索(ワイルドカード使用可) | -name “田中*” |
| -samid | SAMアカウント名で検索 | -samid “tanaka” |
| -desc | 説明フィールドで検索 | -desc “*営業*” |
| -disabled | 無効化されたアカウントのみ検索 | -disabled |
| -inactive | 指定週数以上非アクティブなアカウント検索 | -inactive 4 |
| -stalepwd | パスワード未変更日数で検索 | -stalepwd 90 |
| -limit | 検索結果の上限数を指定 | -limit 100 |
| -o | 出力形式を指定(rdn/dn) | -o rdn |
| -scope | 検索範囲(subtree/onelevel/base) | -scope subtree |
| -s | 接続先ドメインコントローラー指定 | -s dc01.example.com |
| -u | 実行ユーザー名を指定 | -u DOMAIN\username |
| -p | パスワードを指定 | -p password |
dsgetの基本構文とオプション
基本構文
dsget [オブジェクトタイプ] [識別名] [オプション]
dsget user 主要オプション一覧
| オプション | 説明 |
|---|---|
| -samid | SAMアカウント名を表示 |
| -sid | セキュリティ識別子(SID)を表示 |
| -upn | ユーザープリンシパル名を表示 |
| -fn | 名を表示 |
| -ln | 姓を表示 |
| -display | 表示名を表示 |
| -empid | 従業員IDを表示 |
| -desc | 説明を表示 |
| -office | オフィス情報を表示 |
| -tel | 電話番号を表示 |
| メールアドレスを表示 | |
| -title | 役職を表示 |
| -dept | 部署を表示 |
| -company | 会社名を表示 |
| -mgr | 上司の識別名を表示 |
| -hmdir | ホームディレクトリを表示 |
| -hmdrv | ホームドライブを表示 |
| -profile | プロファイルパスを表示 |
| -loscr | ログオンスクリプトを表示 |
| -mustchpwd | パスワード変更が必要かを表示 |
| -canchpwd | パスワード変更可能かを表示 |
| -pwdneverexpires | パスワード無期限設定を表示 |
| -disabled | アカウント無効化状態を表示 |
| -acctexpires | アカウント有効期限を表示 |
| -reversiblepwd | 可逆暗号化パスワード設定を表示 |
dsget computer 主要オプション一覧
| オプション | 説明 |
|---|---|
| -samid | SAMアカウント名を表示 |
| -sid | セキュリティ識別子(SID)を表示 |
| -desc | 説明を表示 |
| -loc | 場所情報を表示 |
| -disabled | アカウント無効化状態を表示 |
dsget group 主要オプション一覧
| オプション | 説明 |
|---|---|
| -samid | SAMアカウント名を表示 |
| -sid | セキュリティ識別子(SID)を表示 |
| -desc | 説明を表示 |
| -secgrp | セキュリティグループかを表示 |
| -scope | グループスコープを表示 |
| -members | グループメンバーを表示 |
| -memberof | 所属グループを表示 |
実践的なコマンド例:基本編
1. 特定のユーザーを検索する
dsquery user -name "山田太郎"
ワイルドカードを使用した部分一致検索:
dsquery user -name "山田*"
2. ユーザーの詳細情報を取得する
dsquery user -name "山田太郎" | dsget user -samid -email -display
このコマンドでは、山田太郎さんのSAMアカウント名、メールアドレス、表示名を一度に取得できます。
3. 特定のOUに所属するすべてのユーザーを検索
dsquery user "OU=営業部,DC=example,DC=com"
4. コンピューターアカウントを検索する
dsquery computer -name "WS-*"
5. グループのメンバーを確認する
dsquery group -name "Domain Admins" | dsget group -members
実践的なコマンド例:応用編
6. 無効化されているユーザーアカウントを検索
dsquery user -disabled
さらに詳細情報も取得:
dsquery user -disabled | dsget user -samid -display -desc
7. 一定期間非アクティブなアカウントを検索
dsquery user -inactive 8
このコマンドは、過去8週間ログオンしていないユーザーを検索します。セキュリティ監査やアカウントクリーンアップに非常に有効です。
8. パスワードが長期間変更されていないアカウントを検索
dsquery user -stalepwd 90
90日以上パスワードが変更されていないユーザーを検索します。セキュリティポリシーの確認に役立ちます。
9. 特定の部署に所属するユーザーをすべて検索
dsquery user | dsget user -samid -dept | findstr "営業部"
10. ユーザーの上司情報を確認
dsquery user -name "佐藤花子" | dsget user -samid -mgr
11. 特定のグループに所属するユーザーを検索
dsget group "CN=管理者グループ,OU=Groups,DC=example,DC=com" -members | dsget user -samid -display
12. アカウント有効期限が近いユーザーを検索
dsquery user | dsget user -samid -acctexpires | findstr /V "never"
13. すべてのOUをリスト表示
dsquery ou -limit 0
-limit 0 オプションで、すべての結果を取得します(デフォルトは100件まで)。
14. 特定のサブネットに属するコンピューターを検索
dsquery computer "OU=東京オフィス,DC=example,DC=com" | dsget computer -samid -desc -loc
15. パスワード無期限設定のアカウントを検索
dsquery user | dsget user -samid -pwdneverexpires | findstr "yes"
トラブルシューティングでの活用シナリオ
シナリオ1: ログオンできないユーザーのアカウント状態確認
ユーザーから「ログオンできない」という問い合わせがあった場合:
dsquery user -samid "tanaka_t" | dsget user -samid -disabled -acctexpires -mustchpwd
このコマンドで、アカウントが無効化されているか、有効期限切れか、パスワード変更が必要かを一度に確認できます。
シナリオ2: 大量のアカウントロックアウト発生時の原因調査
dsquery user -inactive 0 | dsget user -samid -display -desc > active_users.txt
現在アクティブなユーザーリストを作成し、特定のパターンがないか確認します。
シナリオ3: 退職者アカウントの棚卸し
dsquery user "OU=退職者,DC=example,DC=com" -limit 0 | dsget user -samid -disabled -acctexpires > retired_accounts.csv
退職者OUに残っているアカウントの状態を一覧化し、削除や完全無効化の判断材料にします。
シナリオ4: 特定サーバーにアクセスできるユーザーの確認
特定のセキュリティグループのメンバーを確認:
dsquery group -name "FileServer_Access" | dsget group -members | dsget user -samid -display -dept
これにより、アクセス権限を持つユーザーの所属部署まで一度に確認できます。
シナリオ5: コンピューターアカウントの重複確認
dsquery computer -name "WS-001*" | dsget computer -samid -desc
命名規則に従わないコンピューターアカウントや、重複の可能性があるアカウントを発見できます。
実務での時短テクニック
テクニック1: 検索結果をファイルに出力して共有
dsquery user "OU=営業部,DC=example,DC=com" | dsget user -samid -display -email -tel > eigyobu_users.txt
定期的なユーザーリストの作成やドキュメント化作業を自動化できます。
テクニック2: 複数の条件を組み合わせたフィルタリング
dsquery user | dsget user -samid -disabled -inactive | findstr "no" | findstr /V "never"
有効かつアクティブなアカウントのみを抽出する複合条件の検索が可能です。
テクニック3: バッチファイルで定期チェックを自動化
以下の内容をbatファイルとして保存し、タスクスケジューラーで定期実行:
@echo off echo セキュリティチェック開始: %date% %time% > security_check.log echo. >> security_check.log echo === 無効化されていないアカウントで90日以上非アクティブ === >> security_check.log dsquery user -inactive 13 | dsget user -samid -display >> security_check.log echo. >> security_check.log echo === パスワード180日以上未変更のアカウント === >> security_check.log dsquery user -stalepwd 180 | dsget user -samid -display >> security_check.log
テクニック4: グループメンバーシップの一括確認
for /F "tokens=*" %%A in ('dsquery user "OU=IT部,DC=example,DC=com"') do @dsget user "%%A" -samid -memberof
特定OUの全ユーザーの所属グループを一括確認できます。
テクニック5: カスタム形式でのレポート作成
dsquery user -limit 0 | dsget user -samid -display -dept -disabled -inactive > user_report.csv
CSVファイルとして出力し、Excelで開いて並べ替えやフィルタリングが可能です。
まとめ
dsqueryとdsgetは、Active Directory管理における強力な武器です。GUIでは時間がかかる作業も、これらのコマンドを使いこなすことで、数秒から数分で完了できます。
特に以下のような場面で威力を発揮します。
- 大規模環境での情報収集: 数百から数千のオブジェクトを対象とした一括検索
- 定期的な監査作業: セキュリティポリシー順守の確認を自動化
- トラブルシューティング: 問題の原因を迅速に特定
- レポート作成: 経営層や監査部門への報告資料を効率的に作成
最初は基本的なコマンドから始めて、徐々に複雑な条件を組み合わせていくことで、自分の業務に最適化されたコマンドセットを構築できます。また、バッチファイルやスクリプトと組み合わせることで、さらなる業務効率化が実現できるでしょう。
コマンドラインツールに慣れることで、Active Directory管理者としてのスキルが一段階上がります。ぜひ日常業務に取り入れて、その効果を実感してください。
今回紹介したコマンドは、すべて実際の業務で頻繁に使用されているものばかりです。まずは自分の環境で試してみて、必要に応じてカスタマイズしながら活用してください。効率的なActive Directory管理の実現に、この記事が少しでもお役に立てれば幸いです。

コメント