← ADSearch の紹介ページへ(yorozu-craft)

ADSearch リファレンスマニュアル

Version 1.4.1  |  RSAT 不要の Active Directory / Exchange 構成・受信者情報取得ライブラリ

概要

ADSearch は System.DirectoryServices(ADSI/LDAP)を使用して Active Directory 情報を取得する PowerShell ライブラリです。RSAT(Remote Server Administration Tools)のインストールを必要とせず、ドメイン参加済みの一般端末・一般ユーザーで実行できます。

コマンド名と使い方は RSAT の ActiveDirectory モジュールに合わせており、実環境のサーバーで RSAT を使うときとのギャップを最小限にするよう設計されています。

前提条件

要件内容
PowerShell5.1 以上(Windows PowerShell)
OSドメイン参加済み Windows 端末、または DC への TCP 389(LDAPS は 636)が疎通できる端末
権限ドメインユーザー(Domain Users)で大半の機能が動作。PSO の読み取りは Domain Admins 以上が必要
RSAT不要
ネットワークDC への LDAP/LDAPS ポートが開いていること。UNC パスから読み込む場合は SMB(445)も必要
実行ポリシーについて: UNC パスからのスクリプト実行には RemoteSigned または Unrestricted ポリシーが必要です。RemoteSigned の場合、ネットワーク上のスクリプトは署名が必要になります。環境に合わせて対応してください。

読み込み方法

モジュールとして(推奨)

Import-Module を使うと公開関数のみがエクスポートされ、内部関数は隠蔽されます。RSAT との共存も明示的に管理できます。

# ローカルパスから
Import-Module C:\Tools\ADSearch\ADSearch.psd1

# UNC パス(ファイルサーバー上に配置して共有)
Import-Module \\fileserver\tools\ADSearch\ADSearch.psd1

# ファイルが更新された場合の再読み込み
Import-Module \\fileserver\tools\ADSearch\ADSearch.psd1 -Force

dot-source(スクリプト内・一時利用)

dot-source では内部関数(ADSI_*)も現在スコープに展開されます。デバッグや一時利用向けです。

. \\fileserver\tools\ADSearch\ADSearch.ps1

RSAT との共存

Import-Module ActiveDirectory
Import-Module \\server\tools\ADSearch\ADSearch.psd1

# モジュール名を明示してどちらを使うか指定
ADSearch\Get-ADUser    -Identity yamada -Server dc01
ActiveDirectory\Get-ADUser -Identity yamada

共通パラメータ

以下のパラメータはほぼすべての関数で共通です。

パラメータ説明
-Serverstring接続先 DC のホスト名または FQDN。省略時は現在ログオン中のドメインの DC に自動接続
-UseSSLswitchLDAPS(ポート 636)を使用。DC に有効な証明書が必要。-Server の指定が必須です(v1.4 から。-Server を省略したサーバーレス接続は LDAPS に対応しないため、-UseSSL だけを指定するとエラーになります)
-CredentialPSCredential接続に使用する資格情報。省略時は現在のログオンユーザー
-SearchBasestring検索ルートとなる DN(例: OU=Tokyo,DC=corp,DC=local)。省略時はドメインルート
-SearchScopestringSubtree(既定)/ OneLevel / BaseGet-ADUser / Get-ADGroup / Get-ADComputer / Get-ADServiceAccount で指定可能
-Propertiesstring[]追加取得する属性名。* で全属性取得
-FilterstringPowerShell 形式のフィルター(例: "Name -like 'srv*'")。使える演算子とプロパティは「フィルター構文」を参照
-LDAPFilterstring生の LDAP フィルター(例: "(sAMAccountName=yamada)"
-IdentitystringDN / ObjectGUID / SID / sAMAccountName のいずれかで指定(v1.4 から。UPN・メールアドレス・表示名では指定できません)。詳しくは次の「-Identity の指定」を参照

-Identity の指定(v1.4 で変更)

v1.4 から -Identity は RSAT と同じ規則になりました。値の形から次のように判定し、1 つの属性だけで照合します。

指定した値照合する属性
CN= / OU= / DC= で始まるdistinguishedName(DN)"CN=yamada,OU=Users,DC=corp,DC=local"
GUID として読めるobjectGUID"0b1c2d3e-4f50-6172-8394-a5b6c7d8e9f0"
S-1- で始まるobjectSid"S-1-5-21-1111111111-2222222222-3333333333-1105"
上記以外sAMAccountName(完全一致)yamada
コマンド-Identity の扱い(上の規則と異なる点)
Get-ADUserHealth上の 4 形式に加えて、@ を含む値は UPN またはメールアドレスとして検索します。見つからないときは例外
Get-ADComputerHealthコンピュータ名は末尾 $ の有無どちらでも指定できます($ 無しで見つからなければ $ 付きで再検索)。見つからないときは例外
Get-ADOrganizationalUnitOU には sAMAccountName と SID がないため、実際に一致するのは DN と ObjectGUID だけです。名前で探すときは -Filter "Name -eq 'Tokyo'"
Get-ADTrust / Get-ADReplicationSite / Get-ADReplicationSiteLink / Get-ADReplicationSubnet / Get-ADReplicationConnection / Exchange 構成系(Get-ExchangeServer ほか 12 コマンド)これらのオブジェクトには sAMAccountName がないため、DN・ObjectGUID に加えて名前(name 属性の完全一致)で照合します(例: Get-ADTrust -Identity child.corp.localGet-AddressList -Identity "All Users"。v1.4.1 から。v1.4.0 では名前を指定しても一致しませんでした)。見つからないときは例外ではなく空を返します
Get-ADDomain / Get-ADForest-Server を省略したときに限り、-Identity の値(ドメイン名など)を接続先として使います
Get-ADDomainController取得した DC の Name / HostName とワイルドカードで照合します(例: dc0*)。見つからないときは空
Exchange 受信者系(Get-Recipient ほか)独自の規則です(「Exchange 受信者系」参照)。v1.4 の変更の対象外です
# sAMAccountName で取得
Get-ADUser -Identity yamada -Server dc01.corp.local

# UPN で探す場合は -Filter(-Identity に UPN を渡すと sAMAccountName として照合され、見つからず例外になる)
Get-ADUser -Filter "UserPrincipalName -eq 'yamada@corp.local'" -Server dc01.corp.local

# 見つからない場合は例外。存在確認に使うときは try/catch で受ける
try   { Get-ADUser -Identity nonexistent -Server dc01.corp.local }
catch { "見つかりません: $($_.Exception.Message)" }

SID / ObjectGUID の型(v1.4 で変更)

SID[System.Security.Principal.SecurityIdentifier]ObjectGUID[guid] のオブジェクトで返します(RSAT と同じ型)。-Properties * で取得したときの objectSid / objectGUIDGet-ADGroupMemberSID も同じです。文字列として比較するときは .Value(SID)/ .Guid(GUID)または .ToString() を使ってください。

$u = Get-ADUser -Identity yamada -Server dc01.corp.local
$u.SID.Value                   # "S-1-5-21-..."
$u.ObjectGUID.Guid             # "0b1c2d3e-..."
$u.SID -eq 'S-1-5-21-...'      # 文字列とは直接比較しない。$u.SID.Value -eq '...' とする
Get-ADDomainDomainSID と、Exchange 受信者系の ExchangeGuid / ArchiveGuid は文字列で返します。

フィルター構文

-Filter では以下の演算子が使用できます。

演算子意味
-eq等しい"SamAccountName -eq 'yamada'"
-ne等しくない'Enabled -ne $true'
-likeワイルドカード(* を使用可)"Name -like 'srv*'"
-notlikeワイルドカード否定"Name -notlike 'test*'"
-ge / -le以上 / 以下"LastLogonDate -ge '2024-01-01'"
-gt / -ltより大きい / より小さい"Created -gt '2024-04-01'"
-approxLDAP の近似一致(~="DisplayName -approx 'yamada'"
-andAND 結合'Enabled -eq $true -and Name -like "srv*"'
-orOR 結合"Name -like 'web*' -or Name -like 'app*'"
括弧でグループ化すれば -and-or を入れ子・混在できます(v1.1 から。例: "Department -eq 'IT' -and (Title -like '*Manager*' -or Title -like '*Director*')")。演算子を含まない ( で始まる文字列は生の LDAP フィルターとしてそのまま使います。-Filter * は全件です。
$true / $false の書き方: 'Enabled -eq $false'"Enabled -eq 'False'""Enabled -eq '`$false'" のどれでも同じ意味になります(v1.4.1 から。v1.4.0 までは $false そのものを引用符で囲むと真偽値として解釈されず、正しく絞り込めませんでした)。

-Filter で使える拡張プロパティ(v1.4)

次のプロパティは LDAP 属性の形式に合わせて自動変換します(プロパティ名の大文字小文字は区別しません)。

種別プロパティ使える演算子右辺の書き方
日時(FileTime 属性)LastLogonDate / PasswordLastSet / AccountExpirationDate / LastBadPasswordAttempt / AccountLockoutTime-eq -ne -ge -le -gt -lt日時文字列、または FileTime の整数値
日時(Generalized-Time 属性)Created(whenCreated)/ Modified(whenChanged)同上日時文字列
userAccountControl のビットEnabled / PasswordNeverExpires / PasswordNotRequired / SmartcardLogonRequired / TrustedForDelegation-eq -ne$true / $false(ビット判定の拡張マッチルール 1.2.840.113556.1.4.803 に変換)

日時文字列として受け付ける形式は yyyy-MM-ddyyyy-MM-dd HH:mmyyyy-MM-dd HH:mm:ssyyyy-MM-ddTHH:mm:ssyyyy/MM/ddyyyy/MM/dd HH:mmyyyy/MM/dd HH:mm:ss です。月・日・時は 1 桁でも構いません(2026/1/5 9:05。v1.4.1 から)。端末の地域設定に左右されないよう、これ以外の形式(01/05/2026Jan 5 2026 など)はエラーにしています。タイムゾーンの指定がない値はローカル時刻として扱います。

# 90 日以上パスワードを変更していないユーザー
$d = (Get-Date).AddDays(-90).ToString('yyyy-MM-dd')
Get-ADUser -Filter "PasswordLastSet -le '$d'" -Server dc01.corp.local

# 2024 年 4 月 1 日以降に作成されたコンピュータ
Get-ADComputer -Filter "Created -ge '2024-04-01'" -Server dc01.corp.local

# パスワード無期限のユーザー
Get-ADUser -Filter 'PasswordNeverExpires -eq $true' -Server dc01.corp.local
-Filter で使えないプロパティ: LockedOut / PasswordExpired / PasswordExpiryDate / MachinePasswordAge / IPv4Address / IPv6Address / LinkedGroupPolicyObjects は、DC が計算する構築属性や、取得後にこのライブラリが計算する値のため、サーバー側で絞り込めません。-Filter に指定するとエラーになります。取得後に Where-Object で絞り込んでください。
Get-ADUser -Filter 'Enabled -eq $true' -Server dc01.corp.local | Where-Object LockedOut

Get-ADUser

ユーザーオブジェクトを検索・取得します。

構文

Get-ADUser [-Identity] <string> [-Server <string>] [-UseSSL] [-Credential <PSCredential>]
           [-SearchBase <string>] [-SearchScope <string>] [-Properties <string[]>]
           [-ResultSetSize <int>] [-Timeout <int>]

Get-ADUser [-Filter <string>] [-LDAPFilter <string>] [-Server <string>] [-UseSSL]
           [-Credential <PSCredential>] [-SearchBase <string>] [-SearchScope <string>]
           [-Properties <string[]>] [-ResultSetSize <int>] [-Timeout <int>]

-Identity は DN / ObjectGUID / SID / sAMAccountName で指定し、見つからないときは例外になります(「-Identity の指定」参照)。-Identity-Filter は同時に指定できません。

既定の出力プロパティ

DistinguishedName, Name, SamAccountName, UserPrincipalName, DisplayName, EmailAddress, Enabled, LockedOut, PasswordExpired, AccountExpirationDate, LastLogonDate, PasswordLastSet, MemberOf, ObjectClass, SID, ObjectGUID

SIDObjectGUID は RSAT の既定出力に含まれるため、既定の出力に入れています。型は「SID / ObjectGUID の型」を参照してください。

アカウント状態のプロパティ(ログイントラブルの切り分け)

プロパティ意味取得元
Enabledアカウントが有効かuserAccountControl(bit 0x2 が立っていれば無効)
LockedOut現在ロックアウト中かmsDS-User-Account-Control-Computed(DC が計算。bit 0x10)
PasswordExpiredパスワードが期限切れかmsDS-User-Account-Control-Computed(DC が計算。bit 0x800000)
AccountExpirationDateアカウントの有効期限(無期限は空)accountExpires
PasswordExpiryDate ※既定外パスワードの期限日時(無期限は空)msDS-UserPasswordExpiryTimeComputed(DC が計算)
PasswordNeverExpires ※既定外パスワード無期限の設定かuserAccountControl(bit 0x10000)

※既定外のプロパティは -Properties で指定したときだけ返します。

LockedOut / PasswordExpired / PasswordExpiryDate は DC が計算する構築属性を読むため、ドメインのポリシー(lockoutDuration / maxPwdAge)やきめ細かいパスワードポリシーを別に調べる必要はありません。値は問い合わせた DC がその時点で計算したものです。これらは -Filter には使えないため、取得後に Where-Object で絞り込みます。
LastLogonDate の複製遅延: LastLogonDatelastLogonTimestamp から求めるため、最大で約 14 日の遅れがあります。「昨日ログオンしたのに古い日付が出る」のは正常な動作です。正確な最終ログオンが必要な場合は、すべての DC の lastLogon(DC 間で複製されない属性)を集める必要があります。

使用例

# アカウント名(sAMAccountName)で取得
Get-ADUser -Identity yamada -Server dc01.corp.local

# 表示名で絞り込み
Get-ADUser -Filter "DisplayName -like '山田*'" -Server dc01.corp.local

# メールアドレスで探す(-Identity ではなく -Filter / -LDAPFilter を使う)
Get-ADUser -Filter "EmailAddress -eq 'yamada@corp.local'" -Server dc01.corp.local
Get-ADUser -LDAPFilter "(mail=yamada@corp.local)" -Server dc01.corp.local

# パスワードの期限日と無期限設定も取得
Get-ADUser -Identity yamada -Properties PasswordExpiryDate,PasswordNeverExpires -Server dc01.corp.local

# ロックアウト中の有効なユーザー
Get-ADUser -Filter 'Enabled -eq $true' -Server dc01.corp.local | Where-Object LockedOut

# 追加属性を取得
Get-ADUser -Identity yamada -Properties description,telephoneNumber -Server dc01.corp.local

# 全属性取得
Get-ADUser -Identity yamada -Properties * -Server dc01.corp.local

# 特定 OU 内のみ検索(OneLevel)
Get-ADUser -LDAPFilter "(objectClass=user)" -SearchBase "OU=Tokyo,DC=corp,DC=local" `
           -SearchScope OneLevel -Server dc01.corp.local

# 無効ユーザーをすべて取得
Get-ADUser -Filter 'Enabled -eq $false' -Server dc01.corp.local

Get-ADGroup

グループオブジェクトを検索・取得します。

構文

Get-ADGroup [-Identity] <string> [-Server <string>] [-UseSSL] [-Credential <PSCredential>]
            [-SearchBase <string>] [-SearchScope <string>] [-Properties <string[]>]
            [-ResultSetSize <int>] [-Timeout <int>]

Get-ADGroup [-Filter <string>] [-LDAPFilter <string>] [-Server <string>] [-UseSSL]
            [-Credential <PSCredential>] [-SearchBase <string>] [-SearchScope <string>]
            [-Properties <string[]>] [-ResultSetSize <int>] [-Timeout <int>]

-Identity はグループの DN / ObjectGUID / SID / sAMAccountName で指定し、見つからないときは例外になります。グループの表示名や cn で探すときは -Filter "Name -eq '…'" を使ってください。

既定の出力プロパティ

DistinguishedName, Name, SamAccountName, GroupScope, GroupCategory, Description, Member, MemberOf, ObjectGUID, SID, ObjectClass

使用例

# グループ名で取得
Get-ADGroup -Identity "IT-Staff" -Server dc01.corp.local

# セキュリティグループのみ取得
Get-ADGroup -LDAPFilter "(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648))" `
            -Server dc01.corp.local

# グローバルスコープのグループを検索
Get-ADGroup -Filter "GroupScope -eq 'Global'" -Server dc01.corp.local

# メンバー一覧を含めて取得
Get-ADGroup -Identity "IT-Staff" -Properties member -Server dc01.corp.local

Get-ADGroupMember

グループのメンバーを取得します。

構文

Get-ADGroupMember [-Identity] <string> [-Recursive] [-Server <string>] [-UseSSL]
                  [-Credential <PSCredential>] [-SearchBase <string>]
                  [-ResultSetSize <int>] [-Timeout <int>]

パラメータ

パラメータ説明
-Identity 必須グループの DN / ObjectGUID / SID / sAMAccountName。グループが見つからないときは例外
-Recursiveネストされたグループを再帰的に展開してすべてのメンバーを返す(ネストされたグループ自体は出力しない。RSAT と同じ)

出力プロパティ

DistinguishedName, Name, SamAccountName, ObjectClass, SID(SID は SecurityIdentifier 型)

primaryGroupID によるメンバー(v1.4)

Domain UsersDomain Computers などのグループは member 属性が空で、メンバーはメンバー側の primaryGroupID 属性で表されています。v1.4 から Get-ADGroupMember はこの経路のメンバーも RSAT と同じように返します(-Recursive の有無どちらでも)。グループの SID の末尾(RID)で (primaryGroupID=<RID>) を検索し、member 属性のメンバーと重複を除いて連結します。

使用例

# 直接メンバーのみ取得
Get-ADGroupMember -Identity "IT-Staff" -Server dc01.corp.local

# 再帰展開(ネストグループのメンバーも含む)
Get-ADGroupMember -Identity "IT-Staff" -Recursive -Server dc01.corp.local

# 結果をユーザーのみに絞り込む
Get-ADGroupMember -Identity "IT-Staff" -Recursive -Server dc01.corp.local |
    Where-Object ObjectClass -eq 'user'
-Recursive はグループを 1 つずつ段階的に展開します(v1.1 から)。循環参照の検出と重複の除去を行い、1500 件を超えるグループも range 取得で取りこぼしません。大規模グループでは時間がかかるため、必要に応じて -ResultSetSize / -Timeout を指定してください。検索ベースの外(他ドメインのメンバーや ForeignSecurityPrincipal)で解決できなかったメンバーがあると、件数を警告で表示します。

Get-ADComputer

コンピュータオブジェクトを検索・取得します。

構文

Get-ADComputer [-Identity] <string> [-Server <string>] [-UseSSL] [-Credential <PSCredential>]
               [-SearchBase <string>] [-SearchScope <string>] [-Properties <string[]>]
               [-ResultSetSize <int>] [-Timeout <int>]

Get-ADComputer [-Filter <string>] [-LDAPFilter <string>] [-Server <string>] [-UseSSL]
               [-Credential <PSCredential>] [-SearchBase <string>] [-SearchScope <string>]
               [-Properties <string[]>] [-ResultSetSize <int>] [-Timeout <int>]

-Identity は DN / ObjectGUID / SID / sAMAccountName で指定し、見つからないときは例外になります。コンピュータの sAMAccountName は末尾に $ が付きます(PC001$)が、RSAT と同じく $ を省いて Get-ADComputer PC001 と指定しても一致します(v1.4.1 から)。

既定の出力プロパティ

DistinguishedName, Name, SamAccountName, DNSHostName, OperatingSystem, Enabled, LastLogonDate, PasswordLastSet, MachinePasswordAge, IPv4Address, ObjectGUID, SID, ObjectClass

MachinePasswordAge はマシンアカウントのパスワードを最後に設定してからの経過日数です(pwdLastSet から計算)。既定の更新周期は 30 日なので、30 日を大きく超えている場合は長期間オフラインか、セキュアチャネル(信頼関係)が壊れている可能性があります。IPv4AddressdNSHostName を DNS で名前解決した結果です。どちらも -Filter には使えません。

使用例

# コンピュータ名で取得(sAMAccountName は末尾 $ 付き)
Get-ADComputer -Identity 'PC001$' -Server dc01.corp.local

# $ を省いても同じ(v1.4.1 から)
Get-ADComputer PC001 -Server dc01.corp.local

# OS で絞り込み
Get-ADComputer -Filter "OperatingSystem -like '*Server 2022*'" -Server dc01.corp.local

# 無効なコンピュータ一覧
Get-ADComputer -Filter 'Enabled -eq $false' -Server dc01.corp.local

# マシンパスワードが 30 日以上更新されていないコンピュータ(信頼関係失敗の疑い)
Get-ADComputer -Filter "OperatingSystem -like '*Windows 1*'" -Server dc01.corp.local |
    Where-Object { $_.MachinePasswordAge -gt 30 }

# IPv6 アドレスも含めて取得(DNS で名前解決)
Get-ADComputer -Identity 'PC001$' -Properties IPv6Address -Server dc01.corp.local

Get-ADOrganizationalUnit

OU(組織単位)オブジェクトを検索・取得します。

構文

Get-ADOrganizationalUnit [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                         [-Server <string>] [-UseSSL] [-Credential <PSCredential>]
                         [-SearchBase <string>] [-Properties <string[]>]
                         [-ResultSetSize <int>] [-Timeout <int>]

-Identity は OU の DN または ObjectGUID で指定します(OU には sAMAccountName がないため、名前では一致しません)。見つからないときは例外になります。

既定の出力プロパティ

DistinguishedName, Name, Description, Created, Modified, ObjectGUID, ObjectClass, LinkedGroupPolicyObjects

LinkedGroupPolicyObjectsgPLink 属性から取り出した、リンクされている GPO の DN の配列です(v1.3 で追加。-Filter には使えません)。

使用例

# すべての OU を取得
Get-ADOrganizationalUnit -Filter * -Server dc01.corp.local

# 名前で絞り込み
Get-ADOrganizationalUnit -Filter "Name -like 'Tokyo*'" -Server dc01.corp.local

# DN で指定
Get-ADOrganizationalUnit -Identity "OU=Tokyo,OU=Corp,DC=corp,DC=local" -Server dc01.corp.local

# GPO リンク情報を含めて取得
Get-ADOrganizationalUnit -Filter * -Properties gPLink -Server dc01.corp.local

Get-ADObject

種類を問わず AD オブジェクトを検索・取得します。削除済みオブジェクトの検索も可能です。

構文

Get-ADObject [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
             [-IncludeDeletedObjects] [-Server <string>] [-UseSSL] [-Credential <PSCredential>]
             [-SearchBase <string>] [-Properties <string[]>] [-ResultSetSize <int>] [-Timeout <int>]

-Identity は DN / ObjectGUID / SID / sAMAccountName で指定し、見つからないときは例外になります。

既定の出力プロパティ

DistinguishedName, Name, ObjectClass, ObjectGUID, SID, Created, Modified

パラメータ(追加)

パラメータ説明
-IncludeDeletedObjectsAD ごみ箱が有効な環境で削除済みオブジェクトも検索対象に含める

使用例

# DN で任意のオブジェクトを取得
Get-ADObject -Identity "CN=yamada,OU=Users,DC=corp,DC=local" -Server dc01.corp.local

# すべてのオブジェクトタイプを検索
Get-ADObject -LDAPFilter "(name=yamada)" -Server dc01.corp.local

# 削除済みオブジェクトを検索(AD ごみ箱が有効な環境のみ)
Get-ADObject -LDAPFilter "(isDeleted=TRUE)" -IncludeDeletedObjects -Server dc01.corp.local
-IncludeDeletedObjects は AD ごみ箱(Recycle Bin)が有効な環境でのみ機能します。無効な環境では削除済みオブジェクトはすぐに消去されます。

Get-ADServiceAccount

管理サービスアカウント(gMSA / sMSA)を検索・取得します。

構文

Get-ADServiceAccount [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                     [-Server <string>] [-UseSSL] [-Credential <PSCredential>]
                     [-SearchBase <string>] [-Properties <string[]>] [-SearchScope <string>]
                     [-ResultSetSize <int>] [-Timeout <int>]

-Identity は DN / ObjectGUID / SID / sAMAccountName で指定し、見つからないときは例外になります。サービスアカウントの sAMAccountName は末尾に $ が付きます(例: svc-web$)。-SearchScope / -ResultSetSize / -Timeout は v1.3 で追加しました。

既定の出力プロパティ

DistinguishedName, Name, SamAccountName, DNSHostName, Enabled, ObjectGUID, SID, ObjectClass

使用例

# すべての管理サービスアカウントを取得
Get-ADServiceAccount -Server dc01.corp.local

# gMSA のみ取得
Get-ADServiceAccount -LDAPFilter "(objectClass=msDS-GroupManagedServiceAccount)" -Server dc01.corp.local

# 名前で検索
Get-ADServiceAccount -Filter "Name -like 'svc-*'" -Server dc01.corp.local
gMSA の作成には KDS ルートキーが必要です。読み取りはドメインユーザーで可能です。

Get-ADDomain

ドメイン情報を取得します。

構文

Get-ADDomain [-Identity <string>] [-Server <string>] [-UseSSL] [-Credential <PSCredential>]

出力プロパティ

プロパティ説明
DNSRootドメインの DNS 名(例: corp.local)
DistinguishedNameドメインの DN(例: DC=corp,DC=local)
Forestフォレストルートの DNS 名
NetBIOSNameドメインの NetBIOS 名(構成パーティションの crossRef の nETBIOSName)
DomainModeドメイン機能レベル名(例: Windows2016Domain)
DomainSIDドメインの SID(文字列)
PDCEmulator / RIDMaster / InfrastructureMaster各 FSMO 役割を持つ DC のホスト名

-Identity-Server を省略したときだけ接続先として使います。

使用例

Get-ADDomain -Server dc01.corp.local

# Identity にドメイン名を指定(Server として扱われる)
Get-ADDomain -Identity corp.local

Get-ADDomainController

ドメインコントローラー情報を取得します。

構文

Get-ADDomainController [-Identity <string>] [-Filter <string>] [-Discover]
                       [-Server <string>] [-UseSSL] [-Credential <PSCredential>]

出力プロパティ

プロパティ説明
NameDC のホスト名
HostNameDC の FQDN
SiteDC が所属するサイト名
IsGlobalCatalogグローバルカタログか(NTDS Settings の options bit 0x1)
IsReadOnly読み取り専用 DC(RODC)か
Domain接続先 DC のドメインの DNS 名
Forestフォレストルートの DNS 名

構成パーティションの NTDS Settings(nTDSDSA)を列挙し、フォレスト内のすべての DC を返します(v1.3 から)。-Discover を付けると、以前と同じく接続先 DC 1 台だけを返します(このとき Site / IsGlobalCatalog / IsReadOnly は空)。

-Identity は取得した DC の Name / HostName とワイルドカードで照合します(例: -Identity 'dc0*')。-Filter* または省略で全件です。それ以外の -Filter は現在は解釈されず、全件を返します。Domain は各 DC の所属ドメインではなく、接続先 DC のドメインです。

使用例

Get-ADDomainController -Server dc01.corp.local
Get-ADDomainController -Identity 'dc0*' -Server dc01.corp.local
Get-ADDomainController -Discover -Server dc01.corp.local

Get-ADForest

フォレスト情報を取得します。

構文

Get-ADForest [-Identity <string>] [-Server <string>] [-UseSSL] [-Credential <PSCredential>]

出力プロパティ

プロパティ説明
Nameフォレストルートの DNS 名
RootDomainフォレストルートドメインの DNS 名
ForestModeフォレスト機能レベル名(例: Windows2016Forest)
SchemaMaster / DomainNamingMaster各 FSMO 役割を持つ DC のホスト名
Domainsフォレスト内のドメインの DNS 名の一覧
UPNSuffixes追加の UPN サフィックスの一覧
Sitesサイト名の一覧

-Identity-Server を省略したときだけ接続先として使います。

使用例

Get-ADForest -Server dc01.corp.local

Get-ADDefaultDomainPasswordPolicy

ドメインの既定パスワードポリシーを取得します。

構文

Get-ADDefaultDomainPasswordPolicy [-Server <string>] [-UseSSL] [-Credential <PSCredential>]

出力プロパティ

プロパティ説明
DistinguishedNameドメインの DN
MinPasswordLength最小パスワード長
PasswordHistoryCountパスワード履歴の保存件数
LockoutThresholdアカウントロックアウトのしきい値
MaxPasswordAge / MinPasswordAgeパスワードの最大 / 最小有効期間(TimeSpan。無期限は空)
LockoutDurationロックアウトの継続時間(TimeSpan)
LockoutObservationWindowロックアウトカウンターのリセットまでの時間(TimeSpan)
ComplexityEnabled複雑さの要件が有効か(pwdProperties bit 0x1)
ReversibleEncryptionEnabled元に戻せる暗号化で保存するか(pwdProperties bit 0x10)

使用例

Get-ADDefaultDomainPasswordPolicy -Server dc01.corp.local
きめ細かいパスワードポリシー(PSO)は CN=Password Settings Container の ACL 制限のため、LDAP では通常ユーザーから読み取れません。PSO の確認は DC 上で RSAT を使用してください。

Get-ADTrust

ドメイン信頼関係を取得します。

構文

Get-ADTrust [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
            [-Server <string>] [-UseSSL] [-Credential <PSCredential>]

出力プロパティ

プロパティ説明
DistinguishedName / Name信頼オブジェクト(CN=System 配下の trustedDomain)の DN と名前
Source接続先ドメインの DNS 名
Target信頼先(trustPartner)
DirectionDisabled / Inbound / Outbound / Bidirectional
TrustTypeDownlevel / Uplevel / MIT / DCE
ForestTransitiveフォレストの推移的な信頼か(trustAttributes bit 0x8)
IntraForest同じフォレスト内の信頼か(trustAttributes bit 0x20)

-Identity は DN / ObjectGUID で指定します。信頼先の名前で探すときは -Filter を使ってください。見つからないときは空を返します。

使用例

# すべての信頼関係を取得
Get-ADTrust -Server dc01.corp.local

# 信頼先ドメイン名で検索
Get-ADTrust -Filter "Name -like 'partner*'" -Server dc01.corp.local

Get-ADReplicationSite

AD サイトを取得します。サイト情報はフォレスト共通です。

構文

Get-ADReplicationSite [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                      [-Server <string>] [-UseSSL] [-Credential <PSCredential>]

出力: Name, DistinguishedName, Description。-Identity は DN / ObjectGUID で指定します(サイト名では一致しません)。見つからないときは空を返します。

使用例

Get-ADReplicationSite -Server dc01.corp.local
# サイト名で絞り込む場合は -Filter
Get-ADReplicationSite -Filter "Name -eq 'Default-First-Site-Name'" -Server dc01.corp.local

サイトリンクを取得します。

構文

Get-ADReplicationSiteLink [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                          [-Server <string>] [-UseSSL] [-Credential <PSCredential>]

出力: Name, DistinguishedName, siteList(リンクされているサイトの DN), cost。-Identity は DN / ObjectGUID で指定します。見つからないときは空を返します。

使用例

Get-ADReplicationSiteLink -Server dc01.corp.local
Get-ADReplicationSiteLink -Filter "Name -like 'DEFAULTIPSITELINK*'" -Server dc01.corp.local

Get-ADReplicationSubnet

サイトに関連付けられたサブネットを取得します。

構文

Get-ADReplicationSubnet [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                        [-Server <string>] [-UseSSL] [-Credential <PSCredential>]

出力: Name, DistinguishedName, siteObject(関連付けられたサイトの DN), location。-Identity は DN / ObjectGUID で指定します(サブネット名では一致しません)。見つからないときは空を返します。

使用例

Get-ADReplicationSubnet -Server dc01.corp.local
# サブネット名で絞り込む場合は -Filter
Get-ADReplicationSubnet -Filter "Name -eq '192.168.10.0/24'" -Server dc01.corp.local

Get-ADReplicationConnection

DC 間のレプリケーション接続オブジェクトを取得します。

構文

Get-ADReplicationConnection [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                            [-Server <string>] [-UseSSL] [-Credential <PSCredential>]

出力: Name, DistinguishedName, fromServer(複製元 DC の NTDS Settings の DN), options。-Identity は DN / ObjectGUID で指定します。見つからないときは空を返します。

使用例

Get-ADReplicationConnection -Server dc01.corp.local
シングル DC 環境では結果が 0 件になります(DC 間のオブジェクトのため)。

指定した OU にリンクされている GPO の一覧と状態を取得します。

構文

Get-ADGpoLink [-Target] <string> [-Server <string>] [-UseSSL] [-Credential <PSCredential>]

パラメータ

パラメータ説明
-Target 必須対象 OU の DN(例: OU=Tokyo,OU=Corp,DC=corp,DC=local)。内部で Get-ADOrganizationalUnit -Identity を呼ぶため、OU が見つからないときは例外になります

出力プロパティ

プロパティ説明
TargetOU対象 OU の DN
GpoNameGPO の表示名
GpoGuidGPO の GUID
LinkEnabledリンクが有効か(True/False)
Enforced強制適用(Enforced)か(True/False)
Orderリンク順序(1 が最高優先)

使用例

# OU にリンクされた GPO を確認
Get-ADGpoLink -Target "OU=Tokyo,OU=Corp,DC=corp,DC=local" -Server dc01.corp.local

# 強制適用されている GPO のみ表示
Get-ADGpoLink -Target "OU=Tokyo,OU=Corp,DC=corp,DC=local" -Server dc01.corp.local |
    Where-Object Enforced -eq $true
継承による GPO リンクは返しません。指定した OU に直接リンクされているもののみが対象です。

Get-ADDnsRecord 追加機能

AD 統合 DNS のレコードを取得します。A / AAAA レコードの IP アドレスも解析して返します。

構文

Get-ADDnsRecord [-Name <string>] [-ZoneName <string>] [-Partition <Both|Domain|Forest>]
                [-ComputerName <string>] [-UseSSL] [-Credential <PSCredential>]

パラメータ

パラメータ説明
-Nameレコード名(ホスト部分)の完全一致でフィルター(例: pc001
-ZoneName特定のゾーンに絞り込む(例: corp.local)。省略時は全ゾーン検索
-Partition探索先の DNS アプリケーション パーティション。Both(既定)/ Domain / Forest。DomainDnsZones はドメイン NC 配下、ForestDnsZones はフォレストルート NC 配下にあり、子ドメインでは両者の DN が異なる(例: DC=DomainDnsZones,DC=child,DC=corp,DC=localDC=ForestDnsZones,DC=corp,DC=local)。ForestDnsZones のゾーンだけを見たいときは -Partition Forest
-ComputerName接続先 DC。-Server でも指定できます(-Server-ComputerName の別名)。-UseSSL を使うときは指定が必須

出力プロパティ

プロパティ説明
ZoneNameDNS ゾーン名(例: corp.local)
Nameレコード名(ホスト部分)
RecordTypeレコード種別(A, AAAA, NS, CNAME, SOA, PTR, MX, TXT, SRV など)
DataA / AAAA レコードは IP アドレス文字列。その他は null
DistinguishedNameAD 内の DN
WhenChanged最終更新日時

使用例

# ホスト名で DNS レコードを取得
Get-ADDnsRecord -Name pc001 -ComputerName dc01.corp.local

# ゾーン内のすべての A レコードを取得
Get-ADDnsRecord -ZoneName corp.local -ComputerName dc01.corp.local |
    Where-Object RecordType -eq 'A'

# フィルタなし(全ゾーン・全レコード)
Get-ADDnsRecord -ComputerName dc01.corp.local

# 子ドメインの DNS を取得(DC を切り替える)
Get-ADDnsRecord -ComputerName dc01.child.corp.local -ZoneName child.corp.local

# ForestDnsZones だけを探索(_msdcs ゾーンなど)
Get-ADDnsRecord -ComputerName dc01.child.corp.local -Partition Forest
対応ゾーン: 既定(-Partition Both)では DomainDnsZones と ForestDnsZones の両方を検索します。存在しないパーティションやゾーンは読み飛ばします。
IP アドレス解析: A レコード(IPv4)と AAAA レコード(IPv6)の Data フィールドに IP アドレスを返します。他のレコード種別は Data が null になります。

Invoke-ADSearchSelfTest

ライブラリの読み込み状態と AD への接続を確認します。

構文

Invoke-ADSearchSelfTest [-Server <string>] [-UseSSL] [-Credential <PSCredential>]
                        [-SampleGroup <string>]

パラメータ

パラメータ説明
-Server省略時は関数ロードのチェックのみ実施(ドメインには接続しません)
-SampleGroupGet-ADGroupMember -Recursive のテストに使用するグループ(既定: Domain Admins)。-Identity と同じく sAMAccountName などで指定

結果は Test / Result(Pass・Fail)/ Detail の表で返します。公開関数の一覧は ADSearch.psd1 の FunctionsToExport(42 関数)から読み、すべて読み込まれているか、モジュールとして読み込んだ場合はエクスポートと一致しているかを確認します。-Server を指定すると、接続・Get-ADUserGet-ADGroupGet-ADGroupMember -Recursive の動作も確認します。

使用例

# 関数ロード確認のみ(サーバー未指定)
Invoke-ADSearchSelfTest

# 接続テストも含めて実行
Invoke-ADSearchSelfTest -Server dc01.corp.local

Get-ADUserHealth v1.3

1 ユーザーのアカウント状態・メール(ハイブリッド)状態・グループ所属を 1 オブジェクトにまとめて返す診断コマンドです。内部で Get-ADUser を 1 回呼び出し、Exchange 属性も合わせて取得します。オンプレ AD にスタンプされた値のみが対象で、Exchange Online 側でしか分からない情報(実メールボックスサイズ・EXO 側のブロック状態等)は取得できません。

構文

Get-ADUserHealth [-Identity] <string> [-Recursive] [-Server <string>] [-UseSSL]
                 [-Credential <PSCredential>] [-SearchBase <string>] [-Timeout <int>]

-Identity は DN / ObjectGUID / SID / sAMAccountName に加えて、@ を含む値を UPN またはメールアドレスとして受け付けます(v1.4 の -Identity 厳格化の後も、このコマンドでは UPN・メールアドレスで引けるようにしています)。見つからないときは例外になります。

出力: Name, SamAccountName, UserPrincipalName, DisplayName, Description, Enabled, LockedOut, PasswordExpired, PasswordExpiryDate, PasswordNeverExpires, AccountExpirationDate, PasswordLastSet, LastLogonDate, BadLogonCount, AccountLockoutTime, WhenCreated, WhenChanged, MailEnabled, PrimarySmtpAddress, EmailAddresses, RemoteRoutingAddress, RemoteRecipientType, RecipientTypeDetails, HiddenFromAddressLists, GroupCount, Groups, DistinguishedName。

アカウント状態の各プロパティの意味は Get-ADUser の「アカウント状態のプロパティ」と同じです。

-Recursive はグループ所属を LDAP_MATCHING_RULE_IN_CHAIN(OID: 1.2.840.113556.1.4.1941)でネスト展開し、単一クエリで全所属グループを返します。既定(指定なし)は直接所属(memberOf)のみ。WhenCreated/WhenChanged はアカウント作成時期・最終変更の切り分けに使用します。
Get-ADUserHealth -Identity yamada -Server dc01.corp.local
Get-ADUserHealth -Identity yamada@contoso.com -Server dc01.corp.local -Recursive
Get-ADUserHealth -Identity yamada -Server dc01.corp.local | Format-List

Search-ADAccount v1.4

RSAT の Search-ADAccount と同様のパラメーターセット(-AccountInactive / -AccountDisabled / -AccountExpired / -PasswordExpired / -PasswordNeverExpires / -LockedOut)で、非アクティブ・無効・期限切れ等のアカウントを棚卸しします(RSAT のサブセット互換)。既定ではユーザー・コンピューターの両方が対象で、-UsersOnly / -ComputersOnly で絞り込めます。

構文

Search-ADAccount [-AccountInactive] [-TimeSpan <TimeSpan>] [-DaysInactive <int>] [<共通>]
Search-ADAccount -AccountDisabled [<共通>]
Search-ADAccount -AccountExpired [<共通>]
Search-ADAccount -PasswordExpired [<共通>]
Search-ADAccount -PasswordNeverExpires [<共通>]
Search-ADAccount -LockedOut [<共通>]

<共通> = [-UsersOnly] [-ComputersOnly] [-Server <string>] [-UseSSL] [-Credential <PSCredential>]
         [-SearchBase <string>] [-ResultSetSize <int>] [-Timeout <int>]
スイッチ内容
-AccountInactive-TimeSpan または -DaysInactive と併用)指定期間ログオンのないアカウント(未ログオンも含む)。両方を指定したときは -TimeSpan を使います。どちらも指定しないとエラー
-AccountDisabled無効化されているアカウント
-AccountExpiredアカウント有効期限切れ(有効期限が未設定・無期限のものは含まない)
-PasswordExpiredパスワード期限切れ(無効化されているアカウントは含まない)
-PasswordNeverExpiresパスワード無期限設定
-LockedOut現在ロックアウト中(ロックアウト時間が過ぎて自動解除されたものは含まない)
-UsersOnly / -ComputersOnly対象オブジェクトの絞り込み(同時指定不可。指定するとエラー)

出力: DistinguishedName, Name, SamAccountName, ObjectClass, SID, Enabled, LockedOut, PasswordExpired, PasswordNeverExpires, AccountExpirationDate, LastLogonDate, PasswordLastSet。

複製遅延の注意: -AccountInactivelastLogonTimestamp を判定に使うため、レプリケーション遅延(既定で最大約14日)により結果に同程度の誤差を含みます(RSAT も同じ制約)。
-PasswordExpired / -LockedOut は DC が計算する構築属性のためサーバー側フィルターができず、取得後にクライアント側で絞り込みます(-LockedOutlockoutTime が設定されているものだけをサーバー側で候補にします)。大規模環境では -SearchBase で対象を絞ることを推奨します。この 2 つでは -ResultSetSize を絞り込んだ後の件数に適用します。
# 90日以上ログオンのないユーザー
Search-ADAccount -AccountInactive -DaysInactive 90 -UsersOnly -Server dc01.corp.local

# TimeSpan で期間を指定(コンピューターのみ)
Search-ADAccount -AccountInactive -TimeSpan (New-TimeSpan -Days 60) -ComputersOnly -Server dc01.corp.local

# ロックアウト中のアカウント
Search-ADAccount -LockedOut -Server dc01.corp.local

# 特定 OU のパスワード期限切れユーザー
Search-ADAccount -PasswordExpired -UsersOnly -SearchBase "OU=Tokyo,DC=corp,DC=local" -Server dc01.corp.local

Get-ADComputerHealth v1.4

Get-ADUserHealth のコンピュータ版です。信頼関係(セキュアチャネル)トラブルの一次切り分けに必要な情報を 1 オブジェクトで返します。内部で Get-ADComputer を 1 回呼び出します。

構文

Get-ADComputerHealth [-Identity] <string> [-Server <string>] [-UseSSL] [-Credential <PSCredential>]
                     [-SearchBase <string>] [-Timeout <int>]

出力: Name, SamAccountName, DNSHostName, Description, Enabled, LastLogonDate, PasswordLastSet, MachinePasswordAge, MachinePasswordStale, OperatingSystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address, IPv6Address, DnsRegistered, Location, ManagedBy, SPNCount, GroupCount, Groups, WhenCreated, WhenChanged, DistinguishedName。

-Identity はコンピュータ名を末尾 $ の有無どちらでも受け付けます(sAMAccountNamePC001$ 形式のため、$ 無しで指定した場合は内部でまず $ 無しで検索し、見つからなければ $ 付きで再試行します)。DN / ObjectGUID / SID でも指定できます。見つからないときは例外になります。認証や接続のエラーは再試行せず、そのまま返します。
プロパティ内容
NamesAMAccountName から末尾の $ を除いた名前
MachinePasswordAgeマシンアカウントのパスワードを最後に設定してからの経過日数(pwdLastSet から計算)
MachinePasswordStaleMachinePasswordAge -gt 30 なら $truepwdLastSet が取れないときは空)
DnsRegisteredIPv4Address または IPv6Address が取得できれば $truedNSHostName を DNS で名前解決した結果)
SPNCountservicePrincipalName の件数
Groups / GroupCount直接所属しているグループ(MemberOf の各 DN の先頭 CN)とその件数
MachinePasswordStale: MachinePasswordAge -gt 30(既定のマシンパスワード更新周期は30日)。$true の場合、そのPCが長期間オフラインだったか、セキュアチャネル(信頼関係)が壊れている可能性があります。PC側での Test-ComputerSecureChannel 実行を推奨します。
Get-ADComputerHealth -Identity PC001 -Server dc01.corp.local
Get-ADComputerHealth -Identity 'PC001$' -Server dc01.corp.local | Format-List

Exchange 構成の取得 v1.1

Exchange Management Shell に接続せず、AD の構成パーティション(CN=Microsoft Exchange,CN=Services,<ConfigNC>)に格納された 構成情報のみ を読み取ります。すべて読み取り専用です。

取得できないもの: メールの中身・送受信キュー・メールボックスサイズ・サービス稼働状態などの 動的情報 は AD に存在しないため取得できません。本機能は「設定・構成のスナップショット」専用です。Exchange 未導入環境では警告を出して空を返します。
共通パラメータ説明
-Server接続先 DC。省略時は現在のドメイン
-UseSSL / -Credential他コマンドと同様(-UseSSL には -Server が必要)
-Filter / -LDAPFilter条件で絞り込み(他コマンドと同様)。名前で絞るときは -Filter "Name -eq '…'"
-IdentityDN / ObjectGUID で指定。v1.4 の -Identity 規則により、それ以外の値は sAMAccountName として照合されますが、構成オブジェクトには sAMAccountName がないため、名前を指定しても一致しません。見つからないときは空を返します
-Timeoutクライアント側タイムアウト秒(0=無制限)

Get-ExchangeServer

Exchange サーバーの一覧・役割・バージョンを取得します(msExchExchangeServer)。

Get-ExchangeServer [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                   [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
出力説明
Nameサーバー名
FqdnFQDN(networkAddress から抽出)
ServerRole役割(Mailbox / ClientAccess / HubTransport / EdgeTransport 等)
Editionバージョン文字列(serialNumber)
Site所属サイト
DistinguishedName構成パーティション内の DN
Get-ExchangeServer -Server dc01.corp.local
Get-ExchangeServer -Filter "Name -like 'EX*'" -Server dc01.corp.local

Get-ReceiveConnector

受信コネクタの構成を取得します(msExchSmtpReceiveConnector)。出力: Name, Server, Bindings, RemoteIPRanges, DistinguishedName。

Get-ReceiveConnector [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                     [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
Get-ReceiveConnector -Server dc01.corp.local

Get-SendConnector

送信コネクタの構成を取得します(msExchRoutingSMTPConnector)。出力: Name, SmartHosts, SourceServers, DistinguishedName。

Get-SendConnector [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                  [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
Get-SendConnector -Server dc01.corp.local

Get-AcceptedDomain

受理ドメインを取得します(msExchAcceptedDomain)。出力: Name, DomainName, DomainType(Authoritative / Relay), DistinguishedName。

Get-AcceptedDomain [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                   [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
Get-AcceptedDomain -Server dc01.corp.local

Get-RemoteDomain

リモートドメインを取得します(msExchDomainContentConfig)。出力: Name, DomainName, DistinguishedName。

Get-RemoteDomain [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                 [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
Get-RemoteDomain -Server dc01.corp.local

Get-TransportRule

トランスポートルールを取得します(msExchTransportRule)。出力: Name, Priority, State, DistinguishedName。

Get-TransportRule [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                  [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-IncludeXml] [-Timeout <int>]
ルール本体はシリアライズされた XML(msExchTransportRuleXml)で格納されています。完全な復元は行わず、-IncludeXml を付けると生 XML を RuleXml に格納して返します。
Get-TransportRule -Server dc01.corp.local
Get-TransportRule -Server dc01.corp.local -IncludeXml

Get-MailboxDatabase

メールボックスデータベースの構成を取得します(msExchPrivateMDB)。出力: Name, Server, DistinguishedName。マウント状態・サイズ等の動的情報は含みません。

Get-MailboxDatabase [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                    [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
Get-MailboxDatabase -Server dc01.corp.local

Get-DatabaseAvailabilityGroup

データベース可用性グループ(DAG)の構成を取得します(msExchMDBAvailabilityGroup)。出力: Name, Servers, DistinguishedName。

Get-DatabaseAvailabilityGroup [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                              [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
Get-DatabaseAvailabilityGroup -Server dc01.corp.local

Get-AddressList v1.2

アドレスリストの構成を取得します(addressBookContainer — "All Address Lists" 配下)。出力: Name, RecipientFilter, LdapRecipientFilter, Container, DistinguishedName。

Get-AddressList [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
RecipientFiltermsExchQueryFilter(OPATH 文字列)、LdapRecipientFilterpurportedSearch(LDAP フィルター文字列)をそのまま返します。
Get-AddressList -Server dc01.corp.local
Get-AddressList -Identity "All Users" -Server dc01.corp.local   # 名前で 1 件(v1.4.1 から)

Get-GlobalAddressList v1.2

グローバルアドレスリスト(GAL)の構成を取得します(addressBookContainer — "All Global Address Lists" 配下)。出力: Name, RecipientFilter, LdapRecipientFilter, Container, DistinguishedName。

Get-GlobalAddressList [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                      [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
Get-GlobalAddressList -Server dc01.corp.local

Get-OfflineAddressBook v1.2

オフラインアドレス帳(OAB)の構成を取得します(msExchOAB)。出力: Name, AddressLists, IsDefault, DistinguishedName。

Get-OfflineAddressBook [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                       [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
IsDefaultmsExchOABFlags の bit 1 から判定(ベストエフォート。属性名は公式ドキュメントに一覧なし)。AddressLists は各 DN の先頭 CN を返します。
Get-OfflineAddressBook -Server dc01.corp.local

Get-EmailAddressPolicy v1.2

電子メールアドレスポリシーの構成を取得します(msExchRecipientPolicy)。出力: Name, Priority, RecipientFilter, LdapRecipientFilter, EnabledEmailAddressTemplates, DistinguishedName。

Get-EmailAddressPolicy [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                       [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-Timeout <int>]
属性名(msExchPolicyOrder, gatewayProxy)はベストエフォートです。公式ドキュメントに一覧なし。Priority は値が小さいほど高優先。
Get-EmailAddressPolicy -Server dc01.corp.local

Exchange 受信者(Recipient)系 v1.2

Exchange がスタンプした AD 属性をドメイン NC(既定の名前付けコンテキスト)から読み取ります。Exchange サーバーへの接続は不要です。

制限事項:

Identity パラメータは受信者系独自の規則で照合し、v1.4 の -Identity 厳格化の対象外です。

指定した値照合する属性
DN / GUID / SIDdistinguishedName / objectGUID / objectSid(他コマンドと同じ)
@ を含む値(user@contoso.comuserPrincipalName / mail / proxyAddresses(smtp: 付き)のいずれか
上記以外sAMAccountName / cn / name / mailNickname(alias)のいずれか

複数の属性で照合するため、複数の受信者が一致することがあります。見つからないときは例外ではなく空を返します(Get-DistributionGroupMember だけは、グループが見つからないと例外になります)。

Get-Recipient v1.2

mailNickname が設定された全受信者オブジェクトを取得します。出力: Name, Alias, DisplayName, PrimarySmtpAddress, RecipientType, RecipientTypeDetails, EmailAddresses, HiddenFromAddressListsEnabled, OrganizationalUnit, DistinguishedName。

Get-Recipient [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
              [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-SearchBase <string>]
              [-ResultSetSize <int>] [-Timeout <int>]
Get-Recipient -Server dc01.corp.local
Get-Recipient -Identity user@contoso.com -Server dc01.corp.local
Get-Recipient -Filter "DisplayName -like '山田*'" -Server dc01.corp.local

Get-Mailbox v1.2

homeMDB が設定されたメールボックスユーザーを取得します(objectCategory=person かつ homeMDB=*)。出力: Name, Alias, DisplayName, PrimarySmtpAddress, UserPrincipalName, SamAccountName, Database, ExchangeGuid, RecipientTypeDetails, EmailAddresses, HiddenFromAddressListsEnabled, OrganizationalUnit, DistinguishedName。

Get-Mailbox [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
            [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-SearchBase <string>]
            [-ResultSetSize <int>] [-Timeout <int>]
Database は homeMDB DN の先頭 CN(例: Mailbox Database 1)。ServerName は homeMDB から確実に取れないため常に null。 ExchangeGuidmsExchMailboxGuid を GUID に変換した値。
Get-Mailbox -Server dc01.corp.local
Get-Mailbox -Identity yamada@contoso.com -Server dc01.corp.local

Get-RemoteMailbox v1.2

msExchRemoteRecipientType が設定されたリモートメールボックスユーザーを取得します(Exchange Online ハイブリッド)。出力: Name, Alias, DisplayName, PrimarySmtpAddress, RemoteRoutingAddress, RemoteRecipientType, RecipientTypeDetails, ExchangeGuid, UserPrincipalName, SamAccountName, EmailAddresses, HiddenFromAddressListsEnabled, OrganizationalUnit, DistinguishedName。

Get-RemoteMailbox [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                  [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-SearchBase <string>]
                  [-ResultSetSize <int>] [-Timeout <int>]
RemoteRoutingAddress は targetAddress から smtp: プレフィックスを除いたアドレス。RemoteRecipientType はビットマスクをデコードした文字列(例: "Migrated", "ProvisionMailbox, ProvisionArchive")。
Get-RemoteMailbox -Server dc01.corp.local
Get-RemoteMailbox -Identity user@contoso.com -Server dc01.corp.local

Get-MailUser v1.2

外部メールアドレス(targetAddress)を持ち、ローカルメールボックスとリモートメールボックスがないユーザーを取得します。出力: Name, Alias, DisplayName, PrimarySmtpAddress, ExternalEmailAddress, RecipientTypeDetails, ExchangeGuid, UserPrincipalName, SamAccountName, EmailAddresses, HiddenFromAddressListsEnabled, OrganizationalUnit, DistinguishedName。

Get-MailUser [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
             [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-SearchBase <string>]
             [-ResultSetSize <int>] [-Timeout <int>]
ExternalEmailAddress は targetAddress をそのまま(smtp: プレフィックス付き)返します。
Get-MailUser -Server dc01.corp.local
Get-MailUser -Identity external@example.local -Server dc01.corp.local

Get-MailContact v1.2

mailNickname が設定されたコンタクトオブジェクト(objectClass=contact)を取得します。出力: Name, Alias, DisplayName, PrimarySmtpAddress, ExternalEmailAddress, RecipientTypeDetails, EmailAddresses, HiddenFromAddressListsEnabled, OrganizationalUnit, DistinguishedName。

Get-MailContact [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-SearchBase <string>]
                [-ResultSetSize <int>] [-Timeout <int>]
Get-MailContact -Server dc01.corp.local
Get-MailContact -Identity external@example.local -Server dc01.corp.local

Get-DistributionGroup v1.2

mailNickname が設定されたグループオブジェクトを取得します(配布グループ・メール対応セキュリティグループ)。出力: Name, Alias, DisplayName, PrimarySmtpAddress, GroupType, GroupCategory, RecipientTypeDetails, ManagedBy, SamAccountName, EmailAddresses, HiddenFromAddressListsEnabled, OrganizationalUnit, DistinguishedName。

Get-DistributionGroup [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                      [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-SearchBase <string>]
                      [-ResultSetSize <int>] [-Timeout <int>]
Get-DistributionGroup -Server dc01.corp.local
Get-DistributionGroup -Identity "All Staff" -Server dc01.corp.local
Get-DistributionGroup -Filter "DisplayName -like 'HR*'" -Server dc01.corp.local

Get-DynamicDistributionGroup v1.2

動的配布グループ(msExchDynamicDistributionList)を取得します。出力: Name, Alias, DisplayName, PrimarySmtpAddress, RecipientFilter, LdapRecipientFilter, RecipientContainer, EmailAddresses, HiddenFromAddressListsEnabled, DistinguishedName。

Get-DynamicDistributionGroup [-Identity <string>] [-Filter <string>] [-LDAPFilter <string>]
                             [-Server <string>] [-UseSSL] [-Credential <PSCredential>] [-SearchBase <string>]
                             [-ResultSetSize <int>] [-Timeout <int>]
RecipientFiltermsExchQueryFilter(OPATH 文字列)をそのまま返します。LdapRecipientFiltermsExchDynamicDLFilter(LDAP フィルター文字列)、RecipientContainermsExchDynamicDLBaseDN。属性名は Microsoft Learn で確認済み。 実際のメンバーは動的計算のため取得不可。
Get-DynamicDistributionGroup -Server dc01.corp.local
Get-DynamicDistributionGroup -Identity "All Users" -Server dc01.corp.local

Get-DistributionGroupMember v1.2

配布グループの直接メンバーを取得します(非再帰。EMS の Get-DistributionGroupMember と同様)。Identity は必須。出力: Name, Alias, DisplayName, PrimarySmtpAddress, RecipientTypeDetails, SamAccountName, ObjectClass, DistinguishedName。

Get-DistributionGroupMember [-Identity] <string> [-Server <string>] [-UseSSL] [-Credential <PSCredential>]
                            [-SearchBase <string>] [-ResultSetSize <int>] [-Timeout <int>]
1500件超の大規模グループは range 取得で対応します。動的配布グループには使用できません(EMS と同様)。
Get-DistributionGroupMember -Identity "All Staff" -Server dc01.corp.local
Get-DistributionGroupMember -Identity "DL-HR@contoso.com" -Server dc01.corp.local -ResultSetSize 500

件数上限・タイムアウト・進捗 v1.1

AD への過負荷を避けるための安全策です。次のコマンドで利用できます。

パラメータ使えるコマンド
-ResultSetSize-TimeoutGet-ADUser / Get-ADGroup / Get-ADComputer / Get-ADOrganizationalUnit / Get-ADObject / Get-ADServiceAccount / Get-ADGroupMember / Search-ADAccount / Exchange 受信者系 8 コマンド
-Timeout のみExchange 構成系 12 コマンド / Get-ADUserHealth / Get-ADComputerHealth
パラメータ既定説明
-ResultSetSize0(無制限)取得件数の上限。超過時は警告を出して打ち切り
-Timeout0(無制限)処理のタイムアウト秒。超過時は警告を出して打ち切り
# 最大 500 件、60 秒で打ち切り
Get-ADUser -Filter 'Enabled -eq $true' -Server dc01 -ResultSetSize 500 -Timeout 60

# 巨大グループの再帰展開を安全に
Get-ADGroupMember -Identity "All-Staff" -Recursive -Server dc01 -ResultSetSize 5000 -Timeout 120

-Filter のネスト・混在(v1.1)

括弧でグループ化し、-and / -or を入れ子・混在できます。生の LDAP フィルターは自動判別してそのまま使用されます。

Get-ADUser -Filter "Department -eq 'IT' -and (Title -like '*Manager*' -or Title -like '*Director*')" -Server dc01

RSAT 互換プロパティ

Get-ADUserGet-ADComputer は、RSAT の同名コマンドレットが -Properties で返すものと同じ名前のプロパティを取得できます。RSAT 向けに書いたスクリプトをそのまま使えます。

# 個人情報・組織情報
Get-ADUser yamada -Properties GivenName,Surname,Department,Title,Manager,Office,MobilePhone -Server dc01.corp.local

# ログオン統計・ロックの詳細
Get-ADUser yamada -Properties LogonCount,BadLogonCount,LastBadPasswordAttempt,AccountLockoutTime -Server dc01.corp.local

# userAccountControl のビット
Get-ADUser yamada -Properties PasswordNotRequired,SmartcardLogonRequired,TrustedForDelegation -Server dc01.corp.local

# コンピューター
Get-ADComputer 'PC001$' -Properties OperatingSystemVersion,Location,ManagedBy,ServicePrincipalName,IPv6Address -Server dc01.corp.local

主な追加プロパティ(ユーザー)

プロパティLDAP 属性備考
GivenName / Surname / InitialsgivenName / sn / initials名・姓・イニシャル
Title / Department / Companytitle / department / company役職・部署・会社
Manager / Office / Division / Organizationmanager / physicalDeliveryOfficeName / division / o上司の DN・事務所・部門・組織
OfficePhone / MobilePhone / HomePhone / FaxtelephoneNumber / mobile / homePhone / facsimileTelephoneNumber電話
StreetAddress / City / State / PostalCode / Country / POBoxstreetAddress / l / st / postalCode / c / postOfficeBox住所
HomeDirectory / HomeDrive / ProfilePath / ScriptPath同名の LDAP 属性プロファイル・ログオンスクリプト
EmployeeID / EmployeeNumberemployeeID / employeeNumber社員番号
LogonCount / BadLogonCountlogonCount / badPwdCountログオン統計
LastBadPasswordAttempt / AccountLockoutTimebadPasswordTime / lockoutTime日時に変換済み
ProxyAddresses / PrimaryGroupIDproxyAddresses / primaryGroupIDメールアドレス一覧・プライマリグループの RID
PasswordNotRequireduserAccountControl bit 0x20PASSWD_NOTREQD
SmartcardLogonRequireduserAccountControl bit 0x40000SMARTCARD_REQUIRED
TrustedForDelegationuserAccountControl bit 0x80000TRUSTED_FOR_DELEGATION

主な追加プロパティ(コンピューター)

プロパティLDAP 属性
OperatingSystemVersion / OperatingSystemServicePackoperatingSystemVersion / operatingSystemServicePack
Location / ManagedBylocation / managedBy
ServicePrincipalNameservicePrincipalName
IPv6AddressdNSHostName を DNS で名前解決した IPv6 アドレス

意図的な省略


実行ポリシー(RemoteSigned)対策

ネットワーク共有上の .ps1/.psm1 は RemoteSigned 環境では署名が必要で、Import-Module. .\ADSearch.ps1 が弾かれることがあります。同梱の Import-ADSearch.ps1 は各ファイルを文字列として読み込み ScriptBlock 化して取り込むため、ファイル実行ポリシーの影響を受けません。

# ① ローダー自身も ScriptBlock 化して取り込む(1回だけ)
. ([scriptblock]::Create((Get-Content '\\server\tools\ADSearch\Import-ADSearch.ps1' -Raw)))
# ② フォルダを指定して読み込む
Import-ADSearch -Path '\\server\tools\ADSearch'
ローカルにコピーできる環境では、コピー後に Get-ChildItem <フォルダ> | Unblock-File してから通常どおり読み込む方法もあります。

制限事項

機能制限内容
PSO(きめ細かいパスワードポリシー)CN=Password Settings Container の既定 ACL により、Domain Admins 以外は LDAP で読み取り不可。RSAT(ADWS)を使用してください
グローバルカタログ検索GC(ポート 3268)を使ったフォレスト横断検索には非対応。ドメインごとに -Server を切り替えて使用
DC 列挙Get-ADDomainController は構成パーティションからフォレスト内の全 DC を列挙する。-Filter* 以外)は解釈せず全件を返す
-Identity の名前指定DN / ObjectGUID / SID / sAMAccountName のみ。UPN・メールアドレス・表示名・cn では指定できない(-Filter を使用)。sAMAccountName を持たないオブジェクト(OU・サイト・サブネット・信頼・Exchange 構成)は DN / ObjectGUID でのみ指定可能
書き込み操作このライブラリはすべて読み取り専用(Get 系)です
DNS データの詳細解析A / AAAA 以外のレコード(SRV, MX, TXT など)の Data フィールドは null。詳細解析が必要な場合は RSAT の DNS Server モジュールを使用
フォレスト機能レベルWindows Server 2016 までの機能レベル(値 7)に対応。2025 Server 等で新しいレベルが追加された場合は Unknown(n) と表示されます
Exchange の動的情報キュー・メールボックスサイズ・サービス稼働状態などは AD に存在せず取得不可。構成スナップショットのみ対応
Exchange トランスポートルール本体は XML blob のため完全復元は行わず、メタデータ と生 XML(-IncludeXml)のみ返す
再帰メンバーの範囲Get-ADGroupMember -Recursive は接続先ドメイン内のみ展開。別ドメインメンバー・ForeignSecurityPrincipal は展開・解決されない

マルチドメイン・マルチフォレスト環境

ADSearch は接続先 DC のドメインを対象として動作します。別ドメインの情報を取得するには -Server でそのドメインの DC を指定してください。

# フォレスト: example.local
# ドメイン構成: hq.example.local / branch1.example.local / branch2.example.local

# hq ドメインのユーザーを取得
Get-ADUser -Identity yamada -Server dc01.hq.example.local

# branch1 ドメインのグループを取得
Get-ADGroup -Identity "Branch1-Staff" -Server dc01.branch1.example.local

# サイト・サブネット情報(フォレスト共通 → どのドメインの DC でも同じ結果)
Get-ADReplicationSite -Server dc01.hq.example.local
Get-ADReplicationSubnet -Server dc01.branch1.example.local  # 同一結果
取得対象スコープ備考
ユーザー / グループ / コンピュータ / OUドメイン単位接続先 DC のドメインのみ
サイト / サブネット / サイトリンクフォレスト共通どのドメインの DC に接続しても同じ結果
GPOドメイン単位接続先 DC のドメインのみ
DNSDomainDnsZones はドメイン単位 / ForestDnsZones はフォレスト共通Get-ADDnsRecord -Partition で探索先を選べる
フォレスト情報フォレスト共通どのドメインの DC でも同じ結果
信頼関係ドメイン単位接続先ドメインの信頼のみ

変更履歴

1.4.1(2026-09-24)

1.4.0 のドキュメントとコードを突き合わせて見つかった不具合を修正しました。

1.4.0(2026-07-09)

RSAT との差異の見直しを受けて互換性を強化し、トラブルシュート向けのコマンドを追加しました。

1.3

1.2

1.1


ADSearch v1.4.1  |  対象環境: Windows PowerShell 5.1 以上 / Active Directory(RSAT 不要)