【Windows】dsqueryとdsgetでActive Directoryを検索・管理する方法

未分類

今回は、Active Directory環境において非常に強力なコマンドラインツールである「dsquery」と「dsget」について、実務での活用方法を詳しく解説していきます。

GUIツールの「Active Directoryユーザーとコンピューター」に慣れている方も多いと思いますが、コマンドラインツールを使いこなすことで、トラブルシューティングの効率化や日常業務の大幅な時短が実現できます。

  1. dsqueryとdsgetとは
  2. 実行に必要な権限と環境
    1. 必要な権限
    2. 実行環境
    3. コマンド実行時の注意事項
  3. dsqueryの基本構文とオプション
    1. 基本構文
    2. 主なオブジェクトタイプ
    3. dsquery 主要オプション一覧
  4. dsgetの基本構文とオプション
    1. 基本構文
    2. dsget user 主要オプション一覧
    3. dsget computer 主要オプション一覧
    4. dsget group 主要オプション一覧
  5. 実践的なコマンド例:基本編
    1. 1. 特定のユーザーを検索する
    2. 2. ユーザーの詳細情報を取得する
    3. 3. 特定のOUに所属するすべてのユーザーを検索
    4. 4. コンピューターアカウントを検索する
    5. 5. グループのメンバーを確認する
  6. 実践的なコマンド例:応用編
    1. 6. 無効化されているユーザーアカウントを検索
    2. 7. 一定期間非アクティブなアカウントを検索
    3. 8. パスワードが長期間変更されていないアカウントを検索
    4. 9. 特定の部署に所属するユーザーをすべて検索
    5. 10. ユーザーの上司情報を確認
    6. 11. 特定のグループに所属するユーザーを検索
    7. 12. アカウント有効期限が近いユーザーを検索
    8. 13. すべてのOUをリスト表示
    9. 14. 特定のサブネットに属するコンピューターを検索
    10. 15. パスワード無期限設定のアカウントを検索
  7. トラブルシューティングでの活用シナリオ
    1. シナリオ1: ログオンできないユーザーのアカウント状態確認
    2. シナリオ2: 大量のアカウントロックアウト発生時の原因調査
    3. シナリオ3: 退職者アカウントの棚卸し
    4. シナリオ4: 特定サーバーにアクセスできるユーザーの確認
    5. シナリオ5: コンピューターアカウントの重複確認
  8. 実務での時短テクニック
    1. テクニック1: 検索結果をファイルに出力して共有
    2. テクニック2: 複数の条件を組み合わせたフィルタリング
    3. テクニック3: バッチファイルで定期チェックを自動化
    4. テクニック4: グループメンバーシップの一括確認
    5. テクニック5: カスタム形式でのレポート作成
  9. まとめ

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から実行可能
  • ドメインに参加しているコンピューターから実行

コマンド実行時の注意事項

  1. 本番環境での実行前にテスト: 特に大量のオブジェクトを対象とする場合、検証環境で動作確認を推奨
  2. 出力結果の確認: パイプで複数コマンドを繋げる際は、途中結果を確認してから次のステップへ
  3. 権限の最小化原則: 必要最小限の権限で実行し、不要な高権限での実行は避ける
  4. ログの記録: 重要な操作は結果をファイルに出力して記録を残す
  5. ワイルドカードの使用: 意図しないオブジェクトを対象としないよう、検索条件は慎重に設定

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 電話番号を表示
-email メールアドレスを表示
-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管理の実現に、この記事が少しでもお役に立てれば幸いです。

 

【注意】

このブログは技術に関する知識や経験を共有することを目的としており、情報の正確性に努めていますが、その内容の正確性や完全性を保証するものではありません。ブログの情報を利用する場合は、自己の責任において行動してください。ブログの内容に基づいて行った行動や決定によって生じた損害や被害について、筆者は一切の責任を負いません。

 

記事の内容の一部は、生成AIで作成しています。

未分類
この記事の作者
StarTeller

30歳で異業種からITエンジニアへ転身し、10年以上にわたりインフラエンジニアとして様々な現場でシステム構築・運用に携わってきました。
得意分野はLinux/Windowsのサーバー構築・運用で、ネットワークやAWSなども実務で活用しています。このブログでは、これまでの業務で培った経験を基に、日々の業務で遭遇した問題の解決方法や、システム構築の具体的な手順を解説。現場のエンジニアが実際に「困ったとき」に参照できる情報を意識して投稿していこうと思っています。
※サーバ運用費がかかっているので、広告を掲載させて頂いてます。

StarTellerをフォローする
シェアする
StarTellerをフォローする

コメント

タイトルとURLをコピーしました