PowerShell を使用して Active Directory でロックアウトされたユーザーを検索する方法

ユーザー:あなたの組織のユーザーは、パスワードを忘れることはありますか?もちろん、そんなことはないでしょう!Active Directoryユーザーがアカウントをロックアウトしたことはありますか?絶対にないはずです!PowerShellを使用してActive Directoryでロックアウトされたユーザーを見つけるためにできることを見てみましょう!

Active Directoryでのパスワードリセットの呼び出しやアカウントのロックアウトに苦しんでいませんか?Specops uResetの無料トライアルを入手してください。

ネットワークがマルウェアに感染し、できるだけ多くのドメインユーザーアカウントで認証しようとすることはありましたか?そうでないことを願っていますが、私はそれが何度か起こったのを見ています。ユーザーとワームは、1つまたは複数のADアカウントがロックアウトされる理由の2つです。パスワードポリシーに応じて、ロックアウトは毎日のように発生するか、時折のことです。

原因や状況に関係なく、アカウントのロックアウトはユーザーに影響します。ほとんどのことに依存しているActive Directoryドメインアカウントがロックアウトされると、ユーザーはすぐに気付くでしょう。ヘルプデスクでアカウントを再有効にできますが、それが再発した場合はどうでしょうか?…また、繰り返されます。…そして再び。この問題の根本的な原因を突き止めることは重要です。

1つの方法は、PowerShellとActiveDirectoryモジュールを使用することです。 Active Directoryモジュール内のSearch-AdAccountコマンドレットを使用することで、ドメイン全体で現在ロックされているすべてのアカウントを簡単に追跡できます。

関連記事:Active Directory PowerShellモジュールのインストール方法

PowerShellでActive Directoryのロックアウトユーザーを検索する

ロックアウトされたアカウントを検索するには、LockedOutパラメータを使用してSearch-AdAccountコマンドを実行できます。 これにより、その権限を持っていれば現在ロックされているすべてのユーザーが返されます。

Search-AdAccount -LockedOut

このコマンドは素晴らしいですが、常にロックされているアカウントがあり、どのシステムから来ているかを特定する必要がある場合はどうでしょうか? ネットワーク上のどこかにマルウェア感染がある場合や、リモートデスクトップセッションからログアウトを忘れた管理者がいる場合など、これは一般的なタスクです。 そんなことは絶対にないですよね?

Active Directoryのロックアウトの原因を見つけるには、まず適切なドメインコントローラーをクエリする必要があります。 この場合、PDCエミュレーター役割を持つドメインコントローラーがそれに該当します。

PDCe役割ホルダーを見つける

すべてのパスワード認証はこのDCに届き、常に確認する最適な場所です。PDCeロールを保持しているドメインコントローラーを見つけるには、Get-ADDomainコマンドレットから返されるPDCEmulatorプロパティを確認できます。

$pdce = (Get-ADDomain).PDCEmulator

ロックアウトのためのイベントログの検索

PDCeロールを保持しているDCを取得したら、そのDCのセキュリティイベントログ(セキュリティログ)からイベントID 4740をクエリする必要があります。イベントID 4740は、アカウントがロックアウトされるたびに登録されるイベントです。これはGet-WinEventコマンドレットを使用して行います。

Get-WinEvent -ComputerName $pdce -FilterHashTable @{'LogName' ='Security';'Id' = 4740}

PowerShellを使用してActive Directoryでロックアウトされたユーザーを見つけるのはもうすぐです!

ユーザー名と場所の解析

これにより、すべてのロックアウトイベントが返されますが、直ちにロックアウトが実行されたユーザー名とコンピュータ名は表示されません。ユーザー名を見つけるには、Get-WinEventが返すPropertiesと呼ばれるプロパティに少し深く入る必要があります。

$filter = @{'LogName' = 'Security';'Id' = 4740}
$events = Get-WinEvent -ComputerName $pdce -FilterHashTable $filter
$events | Select-Object @{'Name' ='UserName'; Expression={$_.Properties[0]}}, @{'Name' ='ComputerName';Expression={$_.Properties[1]}}

ハッシュテーブルフィルターを移動してコードの折り返しを防ぎ、さらに重要なのは、Select-Objectの計算されたプロパティを使用してPropertiesプロパティからユーザー名とコンピュータ名を抽出しました。これらのイベントの各々で、ロックアウトされたユーザー名は常にProperties配列の最初の要素であり、2番目の要素は常にロックアウトが実行されたコンピュータ名です。

PowerShellを利用してADアカウントをアンロックする

今、ロックアウトされたADユーザーを見つけたら、アカウントをロック解除する方法はどうなりますか? PowerShellのActiveDirectoryモジュール は、Unlock-ADAccountコマンドを提供しており、顧客を素早く作業に戻すことができます。以下に示すように、PowerShellを使用してADアカウントをロック解除します。このコマンドは、ActiveDirectoryモジュールをロードした後、Windows PowerShellとPowerShell 7の両方で機能します。

Unlock-ADAccount -Identity 'lockeduser'

おそらく、一度にすべてのロックされたユーザーのロックを解除したいと考えていますが、Search-ADAccountコマンドを-LockedOutパラメータとともに使用し、結果をUnlock-ADAccountコマンドにパイプしてください。

Search-ADAccount -LockedOut | Unlock-ADAccount

サービスデスクの通話を削減し、VPN外でもリモートユーザーのキャッシュ資格情報を更新する、自己サービスのパスワードリセットソリューション。 Specops uResetのデモを入手!

要約

Find Locked Out Users in Active Directory

現時点では、ドメイン内で現在ロックされているすべてのアカウントを迅速に特定し、すべてのアカウントのロックアウト履歴を確認できるはずです。今はジョーに、RDPセッションを開いたままにしておくことについて厳重に語る時です…

Source:
https://adamtheautomator.com/find-locked-out-users-in-active-directory-powershell/