PowerShell で Get-ADComputer を使用して Active Directory 内のコンピューターのプロパティを検出する方法

PowerShell を使用して Active Directory コンピュータ アカウントを管理する方法

AD内の古いマシンや非アクティブなマシンを追跡しなければならなかった経験があれば、それがいかに面倒な作業かご存じでしょう。長期間ネットワークにログインしていないコンピュータを特定し、それらのアカウントを無効化またはクリーンアップするのは、特に手動で行う場合は、とてつもなく時間がかかる作業です。 幸いなことに、PowerShellはこれらの作業を簡単に実行できる方法を提供していますが、最初は少しコツがいります。適切なモジュールがインストールされていることを確認する必要があり、また、最終ログオン日の確認方法や一定期間アクティブでないコンピュータをフィルター処理する方法など、一部のコマンドはわかりにくいものもあります。このガイドは、これらの作業をすべて整理し、古いアカウントを見つけて無効化したり、必要なクリーンアップを実行したりできるようにするための簡単なウォークスルーです。

PowerShell を使用した Active Directory コンピューターの使用開始

Active Directory モジュールがインストールされ、ロードされていることを確認する

まず、PowerShellでADを管理するには、Active Directoryモジュールが必要です。Windows 10または11(およびサーバー)では、RSAT経由でインストールして有効化できます。特に以前に有効化している場合は既にインストールされている場合もありますが、そうでない場合は以下の手順に従ってください。

Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

その後、モジュールをインポートするだけです (自動インポートされていない場合)。

Import-Module ActiveDirectory

ちょっと奇妙ですが、RSAT を有効にした後に再起動したり、新しい PowerShell セッションを開くたびにモジュールを手動でインポートしたりする必要がある場合があります。

ADで基本的なコンピュータのプロパティを一覧表示する方法

特定のマシンを簡単に確認したい場合は、次のコマンドを実行できます。

Get-ADComputer -Identity SRV-DB01

これにより、DNS 名、有効かどうか、オブジェクト GUID などの基本情報が出力されます。ただし、もちろん、これには、古いアカウントをクリーンアップするために必要となることが多い最終ログインなどの重要な情報は含まれていません。

利用可能なすべてのプロパティを表示するには、以下を追加する必要があります-Properties *

Get-ADComputer -Identity SRV-DB01 -Properties *

すると、 LastLogonDateを含む、属性の長いリストが表示されます。Get -Memberにパイプ処理して、すべてのプロパティを表示することもできます。

Get-ADComputer -Filter * -Properties * | Get-Member

一部の設定では、最終ログオンが LastLogonDate に直接保存されません (LastLogonTimestamp にのみ保存される可能性があります) が、ほとんどの場合、LastLogonDateで十分であり、解釈も簡単です。

すべてのドメインコンピュータの表示名と最終ログオン日

すべてのコンピューターのリストとその最終ログインタイムスタンプを素早く表示するには、次の操作を試してください。

Get-ADComputer -Filter * -Properties LastLogonDate | Select-Object Name, LastLogonDate | Format-Table -AutoSize

これにより、マシン名とドメインへの最終ログイン時刻が記載されたシンプルなテーブルが作成されます。マシンによっては、特に環境によって同期間隔が異なる場合は、このテーブルは完璧ではない可能性がありますが、通常はほぼ正確な値になります。

古いマシンをフィルタリングして無効にする

さて、ここからが本当のコツです。しばらく接続されていないコンピュータを見つけるのです。例えば、120日以上ログインしていないコンピュータをすべて見つけて、それらのアカウントを無効にしたいとします。古いデバイスを整理していて、そのプロセスを自動化したい場合に便利です。

まず、締め切り日を生成します。

$dateThreshold = (Get-Date).AddDays(-120)

これにより、120日前の日付を持つ変数が作成されます。これにより、LastLogonDateに基づいてコンピューターをフィルタリングできます。

Get-ADComputer -Properties LastLogonDate -Filter * | Where-Object { $_. LastLogonDate -lt $dateThreshold } | Select-Object Name, LastLogonDate

この時点で、古くて使われていないアカウントのリストが表示されます。実際にアカウントを無効にするには(稼働中のシステムに影響を与えるリスクなしに)、まず-WhatIfスイッチを使用してください。これにより、変更を加えずに何が起こるかが表示されます。

Get-ADComputer -Properties LastLogonDate -Filter * | Where-Object { $_. LastLogonDate -lt $dateThreshold } | Set-ADComputer -Enabled $false -WhatIf

すべてが問題なければ、 -WhatIfなしで同じコマンドを実行します。

Get-ADComputer -Properties LastLogonDate -Filter * | Where-Object { $_. LastLogonDate -lt $dateThreshold } | Set-ADComputer -Enabled $false

注: 大量のコンピュータを無効にする前に必ず二重チェックを行ってください。レプリケーションの遅延により、最終ログオン日が不正確または古い日付になっている場合があります。

フィルターを使って検索を微調整する

すべてのサーバーを検索したいですか、それとも特定のOSを検索したいですか?フィルターを追加できます。

(Get-ADComputer -Filter {enabled -eq "true" -and OperatingSystem -Like '*Windows Server*'})

または、OU で絞り込む(特定の組織単位のみなど)こともできます。

Get-ADComputer -SearchBase 'OU=London, DC=woshub, DC=com' -Filter * -Properties * | Select-Object Name, LastLogonDate

より高度な検索には、次のような LDAP フィルターも使用できます。

Get-ADComputer -LDAPFilter "(name=*db*)"

古いマシンや使っていないマシンの片付け – 簡単なヒント

しばらく使用されていないマシンが見つかったら、そのアカウントを削除または無効化することを検討してください。-WhatIf事前にテストを行うことを忘れないでください。あるいは、まだ必要なものを無効化または削除することもできます。すべてが問題なければ、それに応じて無効化または削除してください。

さらに、追加情報(IP アドレス、OS 情報、有効かどうかなど)を取得したり、レポート用にデータを CSV または HTML にエクスポートしたりすることもできます。これは、監査やドキュメント作成に非常に便利です。

まとめ

  • ADモジュールがインストールされ、ロードされていることを確認してください
  • Get-ADComputer一緒に使う-Properties LastLogonDate
  • 日付のしきい値を作成し、それに基づいてフィルタリングする
  • -WhatIf実際の変更を行う前にテストする
  • 古い機械の無効化や削除は自動化できる

まとめ

PowerShell を使えば、フィルタリングとプロパティの使い方を習得すれば、AD コンピューターアカウントの管理が格段に楽になります。ただし、一括操作には注意が必要です。-WhatIf特に初心者は、必ず最初に実行してください。慣れてきたら、クリーンアップタスクを自動化することで、手作業による煩雑さを大幅に軽減できます。このツールが時間の節約になり、ドメインの混乱も軽減されることを願っています。