Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Get-ADUserコマンドレット完全ガイド:PowerShellでActive Directoryユーザー情報を検索・取得する方法

Get-ADUserコマンドレットを使用すると、Active Directory(AD)ユーザーの情報や属性を取得したり、ドメイン内のユーザーを検索したりできます。ADから情報を取得するためのPowerShellコマンドレットの中でも、特に人気の高いものの一つです。Get-ADUserを使えば、ADユーザーアカウントの任意の属性値を取得できるほか、属性付きでドメインユーザーの一覧を作成し、ユーザーレポートをCSVファイルにエクスポートしたり、さまざまな条件でドメインユーザーを選択・絞り込むことも可能です。

Active Directory PowerShellモジュールのGet-ADUserコマンドレットとは

Get-ADUserコマンドレットは、Active Directoryと連携するための専用モジュール「Windows PowerShell用Active Directoryモジュール(RSAT-AD-PowerShell)」に含まれています。このモジュールのコマンドレットを使うことで、ADオブジェクトに対するさまざまな操作を実行できます。

補足:以前は、ADユーザーアカウントの属性情報を取得するために、ADUCコンソール(保存されたADクエリを含む)、VBSスクリプト、dsqueryなど、複数のツールを使い分ける必要がありました。これらのツールは、すべてGet-ADUserコマンドレットで簡単に代替できます。

この記事では、Get-ADUserコマンドレットを使って、ユーザーのパスワードが最後に変更された日時、パスワードの有効期限、その他のユーザープロパティを取得する方法を紹介します。

RSAT-AD-PowerShellモジュールのインストール

RSAT-AD-PowerShellモジュールを使用するには、管理者権限でPowerShellコンソールを起動し、次のコマンドでモジュールをインポートします。

Import-Module ActiveDirectory

Windows Server 2012以降では、Active Directoryドメインサービス(AD DS)役割を展開すると、RSAT-AD-PowerShellモジュールはデフォルトでインストールされます。ドメインメンバーのWindows Serverホストにモジュールをインストールする場合は、以下のコマンドを実行します。

Install-WindowsFeature -Name "RSAT-AD-PowerShell" –IncludeAllSubFeature

Windows 10/11などのデスクトップ環境でGet-ADUserコマンドレットを使用するには、対応するバージョンのRSATをインストールする必要があります。「設定」→「アプリ」→「オプション機能」→「機能の追加」→「RSAT: Active Directory Domain Services and Lightweight Directory Services Tools」から有効化できます。

PowerShellからインストールすることも可能です。

Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"

RSAT-AD-PowerShellモジュールがインストールされていない状態でGet-ADUserコマンドを実行すると、次のようなエラーが表示されます。

Get-ADUser: The term 'get-aduser' is not recognized as the name of a cmdlet, function, script file, or operable program.

モジュールがインストールされていることを確認し、必要に応じてPowerShellセッションにインポートしてください。

また、RSATをインストールしなくてもAD-PowerShellモジュールを利用する方法があります。主要なモジュールファイルをコピーし、それらをPowerShellセッションにインポートするだけです。

Import-Module "C:\PS\AD\Microsoft.ActiveDirectory.Management.dll"
Import-Module "C:\PS\AD\Microsoft.ActiveDirectory.Management.resources.dll"

Get-ADUserコマンドレットの全引数の一覧は、次のコマンドで確認できます。

help Get-ADUser

Get-ADUserでADユーザーを検索してプロパティを一覧表示する方法

Get-ADUserコマンドレットの実行には、ドメイン管理者権限や委任された権限を持つアカウントは不要です。認証された任意のADドメインユーザーが、ほとんどのADオブジェクト属性の値を取得するためのPowerShellコマンドを実行できます(機密属性を除く)。別のアカウントでGet-ADUserコマンドを実行したい場合は、「-Credential」パラメータを使用します。

すべてのドメインユーザーアカウントの一覧を表示するには、次のコマンドを実行します。

Get-ADUser -filter *

注意:ユーザーアカウント数が多い大規模なADドメインでこのコマンドを実行することは推奨されません。AD情報を提供するドメインコントローラーに大きな負荷がかかる可能性があります。

Active Directoryのユーザー属性を変更するには、Set-ADUserコマンドレットを使用します。

特定のユーザーのプロパティを表示するには、「–Identity」パラメータを使用します。Identityには、ユーザー名、ログオン名(SAMAccountName)、DN(Distinguished Name)、SID、GUIDを指定できます。

以下のPowerShellコマンドは、いずれも同じADユーザーアカウントに対して同じ結果を返します。

Get-ADUser –Identity b.smith
Get-ADUser –Identity "CN=Brian Smith,OU=Users,OU=Berlin,DC=woshub,DC=loc"
Get-ADUser –Identity "Brian Smith"

デフォルトでは、Get-ADUserコマンドレットは120以上あるユーザーアカウントプロパティのうち、10個の基本属性のみを返します(DistinguishedName、SamAccountName、Name、SID、UserPrincipalName、ObjectClass、アカウント状態(UserAccountControl AD属性に基づくEnabled: True/False)など)。この出力には、最後のパスワード変更日時に関する情報は含まれていません。

特定のドメインコントローラーに対してADクエリを実行するには、「-Server」オプションを使用します。

Get-ADUser –Server DC01.woshub.com –Identity tstuser

別のADドメインからユーザーデータを取得する場合は、ドメインコントローラー名とアクセス用の資格情報を指定する必要があります。

$ADcred = Get-Credential
Get-ADUSer tstuser -Server DC01.contoso.com -Credential $ADcred

利用可能なすべてのユーザー属性の詳細情報を表示するには、次のコマンドを実行します。

Get-ADUser -identity tuser -properties *

Properties *」スイッチを付けたGet-ADUserコマンドレットは、ADユーザーのすべての属性とその値(空の値を含む)を一覧表示します。同様のユーザー属性一覧は、グラフィカル管理ツール「Active Directoryユーザーとコンピューター」(dsa.msc)の「属性エディター」タブでも確認できます。

続いて、必要なユーザー属性が表示されるように、Get-ADUserの出力を整形する方法を見ていきましょう。たとえば、次のユーザープロパティの値を表示したいとします。

  • PasswordExpired(パスワードの期限切れ状態)
  • PasswordLastSet(最終パスワード設定日時)
  • PasswordNeverExpires(パスワード無期限フラグ)
  • LastLogonTimestamp(最終ログオン日時)

実行するコマンドは次のとおりです。

Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires, lastlogontimestamp

これで、ユーザーデータにアカウントのパスワード状態(Expired: True/False)、最終パスワード変更日、ドメインへの最終ログオン日時(lastlogontimestamp属性)の情報が含まれるようになりました。この情報を読みやすい表形式で表示し、不要な属性を除去するには、「Select-Object –Property」と「Format-Table」を使用します。

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Get-ADUser -SearchBase:特定のOUからユーザーを取得する

特定のドメインコンテナ(組織単位:OU)に属するユーザーのみを表示するには、「–SearchBase」パラメータを使用します。

Get-ADUser -SearchBase 'OU=London,DC=woshub,DC=loc' -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

複数のOUから一度にユーザーを選択したい場合は、次のPowerShellスクリプトを使用します。

$OUs = "OU=NY,DC=woshub,DC=com","OU=LA,DC=woshub,DC=com","OU=MA,DC=woshub,DC=com"
$OUs | foreach {Get-ADUser -SearchBase $_ -Filter * |select Name, Enabled}

PowerShellでADからユーザーのメールアドレスを取得する方法

ユーザーのメールアドレスは、Active Directoryにおけるユーザーオブジェクトの属性の一つです。ユーザーのメールアドレス一覧を取得するには、Get-ADUserコマンドレットのプロパティに「EmailAddress」フィールドを追加します。

Get-ADUser -filter * -properties EmailAddress -SearchBase 'OU=Paris,OU-Fr,DC=woshub,DC=com'| select-object Name, EmailAddress

メールアドレスを持つ有効なユーザーアカウントの一覧を取得するには:

Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-Table

メールアドレスが未登録のActive Directoryユーザーの一覧を取得するには:

Get-ADUser -Filter * -Properties EmailAddress | where -Property EmailAddress -eq $null

次の例では、ADから社内のメールアドレス一覧をCSVファイルにエクスポートできます。このCSVファイルは、OutlookやMozilla Thunderbirdなどのデスクトップメールクライアントに後からインポートできます。

Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $env:temp\adress_list.csv

Get-ADUser:PowerShellでActive DirectoryユーザーをCSVにエクスポートする

属性付きで取得したドメインユーザーの一覧は、テキストファイルに出力できます。

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txt

または、ADユーザー一覧をCSVファイルにエクスポートすることも可能です。

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | where {$_.name –like "*Dmitry*"} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:\tmp\user-passwords-expires.csv -Append -Encoding UTF8

PowerShellを使えば、ADユーザー一覧をExcelファイルに直接エクスポートすることもできます。

Get-ADUserフィルターの使い方と具体例

–Filter」スイッチを使用すると、1つまたは複数の属性に基づいてユーザーアカウントの一覧を絞り込めます。これは、指定した条件に一致する属性を持つADユーザーを検索する際に便利です。Active Directoryユーザーの特定の属性値を、このパラメータの引数として指定できます。「–Filter」パラメータを使用すると、Get-ADUserコマンドレットはフィルター条件に一致するユーザーのみを表示します。

たとえば、名前に「Dmitry」が含まれる有効な(Enabled)ユーザーアカウントの一覧を取得したいとします。次の例では複数のフィルターを使用しており、論理比較演算子を使って条件を組み合わせることができます。この例では、ユーザー属性が両方のフィルター条件を満たす必要があります(-and)。

Get-AdUser -Filter "(Name -like '*Dmitry*') -and (Enabled -eq 'True')" -Properties * |select name,enabled

ユーザー属性の値を選択する際には、すべてのPowerShell論理演算子を使用できます(-eq-ne-gt-ge-lt-le-like-notlike-and-orなど)。

さらに、Sort-Objectコマンドレットを使って、結果のユーザー一覧を特定の属性で並べ替えることもできます。また、Where-Objectコマンドレットを使用すれば、複数のフィルタリング条件を一度に指定できます。

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires -SearchBase 'OU=NY,DC=woshub,DC=com'| where {$_.name –like "*Dmitry*" -and $_.Enabled -eq $true} | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

このようにして、必要な任意のActive Directory属性を持つユーザー一覧を取得できます。

複数の属性を横断してユーザーを検索する場合(legacyExchangeDN、proxyAddresses、SAMAccountName、Surname、DisplayName、physicalDeliveryOfficeName、RDN、msExchMailNicknameなど)は、曖昧な名前解決(ANR)機能を利用できます。

Get-ADUser -Filter {anr -eq 'John'} | select Name

ヒント:Get-ADUserでActive Directoryユーザーを検索する際は、パフォーマンスの観点から、パイプラインでWhere-Objectコマンドレットにつなぐよりも、Filterパラメータで検索条件を指定する方が望ましいです。この場合、フィルタリングはドメインコントローラー側で実行されるため、ネットワーク経由でコンピューターに転送されるデータ量が少なくなります。

Get-ADUserのクエリではLDAPフィルターも使用できます。LDAPフィルターは「–LdapFilter」パラメータで指定します。

Get-ADUser -LDAPFilter '(&(department=it)(title=sysops))'

PowerShell Get-ADUserの実用的なコマンド例集

ここでは、さまざまなフィルターを使ってActive Directoryユーザーを照会する、さらに有用なPowerShellコマンド例を紹介します。これらを組み合わせて、目的のADユーザーオブジェクトの一覧を取得できます。

名前が「Joe」で始まるADユーザーを表示します。

Get-ADUser -filter {name -like "Joe*"}

PowerShellを使って、Active Directory内のユーザーアカウントの総数を計算できます。

Get-ADUser -Filter {SamAccountName -like "*"} | Measure-Object

無効化されたActive Directoryユーザーアカウントを検索します。

Get-ADUser -Filter {Enabled -eq "False"} | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table

Active Directoryユーザーアカウントの作成日は、次のコマンドで確認できます。

get-aduser -Filter * -Properties Name, WhenCreated | Select name, whenCreated

過去24時間以内に作成された新規Active Directoryユーザーの一覧を取得します。

$lastday = ((Get-Date).AddDays(-1))
Get-ADUser -filter {(whencreated -ge $lastday)}

パスワードの有効期限が切れたアカウントの一覧を表示します(パスワードの有効期限オプションは、ドメインのパスワードポリシーで設定できます)。

Get-ADUser -filter {Enabled -eq $True} -properties name,passwordExpired| where {$_.PasswordExpired}|select name,passwordexpired

Get-ADUserとAdd-ADGroupMemberコマンドレットを組み合わせると、都市、役職、部署などに基づいた動的なADユーザーグループを作成できます。

課題例:テキストファイルに保存されたユーザーアカウントの一覧(1行に1アカウント)について、ADからユーザーの会社名を取得し、CSVファイルに保存します(このファイルはExcelに簡単に取り込めます)。

Import-Csv c:\ps\users_list.csv | ForEach {
Get-ADUser -identity $_.user -Properties Name, Company |
Select Name, Company |
Export-CSV c:\ps\users_ad_list.csv -Append -Encoding UTF8
}

過去90日間にドメインパスワードを変更していないユーザーの一覧です。

$90_Days = (Get-Date).adddays(-90)
Get-ADUser -filter {(passwordlastset -le $90_days)}

非アクティブなユーザーアカウント(180日以上ドメインにログオンしていないユーザー)を検索します。ユーザーのドメインログオン履歴を取得するには、lastLogonTimestamp属性を使用します。

$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } | ?{$_.Enabled –eq $True} | Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize

Active Directoryからユーザーの写真を取得してjpgファイルとして保存するには、次のコマンドを実行します。

$usr = Get-ADUser sjoe -Properties thumbnailPhoto
$usr.thumbnailPhoto | Set-Content sjoe.jpg -Encoding byte

ユーザーアカウントが所属するADグループの一覧を取得します。

Get-AdUser sjoe -Properties memberof | Select memberof -expandproperty memberof

特定のOUに属し、かつ特定のドメインセキュリティグループのメンバーであるユーザーの一覧です。

Get-ADUser -SearchBase 'OU=Rome,OU=Italy,DC=woshub,DC=com' -Filter * -properties memberof | Where-Object {($_.memberof -like "*CEO*")}

逆に、OU内のユーザーのうち特定のグループのメンバー以外を一覧表示する例です。

$Users = Get-ADUser -filter * -SearchBase 'OU=Berlin,DC=woshub,DC=com' -properties memberOf
ForEach ($User In $Users)
{
$Groups = -join @($User.memberOf)
If ($Groups -notlike '*Domain Admins*')
{
$User.Name
}
}

OU名付きのADユーザー一覧をOut-GridViewの表形式で表示します。

get-aduser -filter * -Properties cn,canonicalname | select name,userprincipalname,@{Name="OU";expression={$_.Canonicalname.substring(0,$_.canonicalname.length-$_.cn.length)}}| Out-GridView

ADユーザーアカウントが存在するかどうかを確認します。

$SamAccountName='jbrown'
if (@(Get-ADUser -Filter { SamAccountName -eq $SamAccountName }).Count -eq 0)
{ Write-Host "User $SamAccountName doesn't exist"}

ユーザーがサインインを許可されているドメインコンピューターの一覧を表示します(LogonWorkstations AD属性によるログオン制限の確認)。

Get-ADUser jbrown -Properties LogonWorkstations | Format-List Name, LogonWorkstations

ヒント:Active Directoryからコンピューターのプロパティを取得したり、複数のコンピューターを検索したりする場合は、Get-ADComputerコマンドレットを使用します。

  1. Active Directory Server 2016/2019でユーザーの最終パスワード変更日を確認する方法

    Active Directoryでユーザーの最終パスワード変更日を確認したい場合は、ぜひこのチュートリアルをご覧ください。本記事では、Active Directory上でユーザーが最後にパスワードを変更した日時を確認する2つの方法を、GUI操作とコマンドラインの両方の観点から詳しく解説します。 Active Directory 2019/2016/2012でユーザーの最終パスワード変更日を確認する手順 方法1:WindowsのGUI(画面操作)から確認する Active Directoryユーザーの最終パスワード変更日を画面操作で確認するには、以下の手順に従ってください。 手順1. 「Acti

  2. Active Directoryでユーザーの最終ログイン日時を確認する2つの方法

    Active Directory上のユーザーが最後にログインした日時を確認したい場合は、本チュートリアルをご活用ください。ここでは、ADユーザーの最終ログイン時刻を調べるための2つの方法(GUI操作とPowerShell)をわかりやすく解説します。ADユーザーが任意のワークステーションからActive Directoryにログオンするたびに、システムはその日時をlastLogon属性およびlastLogonTimestamp属性に記録します。このうち、より正確なのはlastLogon属性です。この属性には、特定のドメインコントローラー(DC)が認証した直近のログオン情報が反映されます。※補足: