Active Directoryのコンピュータの説明に最後にログオンしたユーザーを追加する方法

ADコンピュータオブジェクトの説明に情報を保存することは、特に目新しいことではありませんが、ハードウェアの詳細、最後にログインしたユーザー、さらにはドメインコントローラー名などを手元に置いておきたい場合は、非常に役立ちます。問題は、そこに手動で情報を入力するだけでは、特に数百台、数千台のマシンを扱う場合は、拡張性が低いことです。PowerShellで自動化すれば作業がはるかに楽になりますし、ログイン時にこれらのスクリプトを実行するようにグループポリシーを設定すれば、データを常に最新の状態に保つことができます。とはいえ、権限には注意が必要です。権限がロックダウンされていないと、ユーザーが情報を上書きしてしまう可能性があります。しかし、全体としては、手動で入力した情報を動的かつ最新の状態に保つための実用的な方法であり、苦労することなく活用できます。

PowerShell を使用して AD のコンピューター情報の更新を修正および自動化する方法

PowerShell でコンピューターの説明を更新する

この方法は、AD の説明フィールドで製造元、モデル、シリアル番号などのハードウェアの詳細を確認したい場合に最適です。トラブルシューティングを行う場合や、ハードウェアインベントリをクロールせずに概要を把握したい場合に便利です。説明が入力されていない、または更新が必要であることに気付いた場合に適用されます。スクリプトは AD に接続し、現在のマシンを検索し、ローカルで収集した値(WMI などから)を使用して説明を更新します。設定によっては、この方法はスクリプトを実行しているマシンでのみ機能する場合があります。そのため、すべてのコンピューターをリモートで更新する場合は、別の方法が必要になります(詳細は後述します)。スクリプトを実行したら、ADUC コンソールを更新します。情報がポップアップ表示され、正しく最新の状態になっているはずです。

コアスクリプトの動作は次のとおりです。DirectoryServices. NETクラスを使用して ADコンピュータオブジェクトに接続し、変更します。コマンドは以下のようになります(注:ドメイン設定に応じてLDAPパスを調整する必要がある場合があります)。

$ComputerSearcher = New-Object DirectoryServices. DirectorySearcher $ComputerSearcher. SearchRoot = "LDAP://DC=yourdomain, DC=com" $ComputerSearcher. Filter = "(&(objectCategory=Computer)(CN=$computer))" $computerObj = [ADSI]$ComputerSearcher. FindOne().Path $computerObj. Put("Description", "$vendor|$Model|$SerialNumber") $computerObj. SetInfo() 

お使いのマシンで使い慣れたコマンドレットを使いたい場合は、Active DirectoryモジュールSet-ADComputerコマンドレットの方がはるかに簡単です。ただし、モジュール(RSATの一部)がインストールされている必要があります。その手順は以下のとおりです。

Set-ADComputer -Identity $computer -Description "$vendor|$Model|$SerialNumber"

これを実行するには、コンピューター オブジェクトを変更する権限を持ち、Active Directory PowerShell モジュールがインストールされている管理者アカウントで実行する必要があることに注意してください。

グループポリシーを使用してユーザーログイン時に説明の更新を自動化する

誰かがログインするたびに、あるいはマシンが起動するたびに、これを自動的に実行させたい場合は、GPOを設定する必要があります。手順はそれほど難しくありません。gpmc.msc を開き新しいグループポリシーオブジェクトを作成して対象のOUに割り当て、ユーザーの構成 > ポリシー > Windowsの設定 > スクリプト(ログオン/ログオフ)でログオンスクリプトを設定します。PowerShellのスクリプトタブで「追加」をクリックし、スクリプトファイル(例えばFillCompDesc.ps1 )を選択します。 -ExecutionPolicy Bypassなどのパラメータを追加すれば、すべてのマシンで実行ポリシーを変更する必要がなくなります。

スクリプトにADオブジェクトを変更する権限があることを確認してください。OU内のコンピューターオブジェクトに対する「説明の書き込み」権限を特定のグループまたはユーザーに委任することで、スクリプトを実行するすべてのユーザーが、他のユーザーの権限に影響を与えることなく自身の情報を更新できます。GPOが適用され、マシンが起動すると、説明フィールドにハードウェア情報、最後のユーザー、またはそこに保存したその他の詳細情報が入力され始めます。ただし、適切な権限がないと、ユーザーが情報を上書きまたは削除できることに注意してください。これはWindows特有の機能です。

ログオンユーザーとドメインコントローラ情報の追加

例えば、説明に現在のユーザーとログオンサーバーも表示したい場合、これらを追加するのは簡単です。スクリプト行を微調整して、環境変数を次のように追加するだけです。

$computerObj. Put("Description", "$vendor|$Model|$SerialNumber|$env:username|$env:LOGONSERVER")

ログオフして再度ログインし、ADコンピュータオブジェクトを確認してください。ハードウェア情報、ログインしているユーザー、認証に使用したドメインコントローラーがリストされているはずです。なぜ機能するのかは分かりませんが、かなり便利です。特に、誰が何をどこで使っているかをすぐに知りたい場合は便利です。

後からその情報を解析して使用するには、説明を取得して次のように変数に分割します。

$ComputerName = 'PC-MUN22s7b2' ($vendor, $Model, $SerialNumber, $Username, $LogonServer) = ((Get-ADComputer -Identity $ComputerName -Properties description).description).split("|")

また、特定のマシンに誰がログオンしているかを知りたい場合や、環境全体で現在のユーザーを見つけたい場合は、次のようなコマンドを実行できます。

Get-ADComputer -Filter "description -like '*M. Becker*'" -Properties * | Select-Object Name, description | Format-Table

基本的に、これは毎回手動で更新することなく、マシンの情報を最新の状態に保ち、必要な場所で表示できるようにする便利な方法です。