問題ない; すべてのマシンがドメイン内にあるため、ローカル マシンから MACAddress(es) を取得し、それをコンピュータ オブジェクトの属性として Active Directory に格納する VBScript を作成できます。
これを行う方法の簡単なハックを次に示します (これを .vbs ファイルとして保存します)。
Option Explicit
Const ADS_PROPERTY_UPDATE = 2
Const COMPUTERLOCATION = "ou=Member Servers,dc=yourdomain,dc=com"
Const ATTRIBUTETOUSE = "otherTelephone"
Dim wshNetwork, strComputerName
Set wshNetwork = WScript.CreateObject("WScript.Network")
strComputerName = wshNetwork.ComputerName
Dim objWMIService, colNetCards, objComputer, objNetCard
Set objWMIService = GetObject("winmgmts:\\" & strComputerName & "\root\cimv2")
Set colNetCards = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
Set objComputer = GetObject("LDAP://cn=" & strComputerName & "," & COMPUTERLOCATION)
For Each objNetCard in colNetCards
objComputer.PutEx ADS_PROPERTY_APPEND, ATTRIBUTETOUSE, Array(objNetCard.MACAddress)
objComputer.SetInfo
Next
クライアントがすべて上記の「メンバー サーバー」OU にあるわけではないため、上記のスクリプトを変更して、do get のディレクトリ検索を含める必要があります。strComputerName
COMPUTERLOCATION
動作するスクリプトがある場合は、ドメイン管理者に依頼して、監視する必要があるコンピューターを対象とするスタートアップ スクリプトとしてそのスクリプトを配置してもらいます。そうすれば、コンピューターが起動するたびに実行されます。また、スケジュールされたタスクとしてスクリプトを実行して、再起動していないクライアントからデータを取得したり、psexecを使用したり、すぐにデータを取得するために考えられる他の方法を使用したりすることもできます。または、スクリプトを完全に書き直して、すべてのマシンにリモート接続し、その方法でデータを取得することもできます (ローカル ファイアウォールのために不可能な場合があります)。または、同じことを行う小さな .NET コンソール アプリケーションを作成することもできます。それはあなた次第です...
また、networkAddress
コンピュータ オブジェクトに対して定義された -attribute があります。デフォルトでは、コンピューター オブジェクト自体は、このプロパティに書き込むためのアクセス権を持っていません。起動スクリプトSYSTEM
は特定のマシンのアカウントのコンテキストで実行されるため、最も簡単な方法は、コンピューター オブジェクト ( SELF
) が書き込みアクセス権を持つ属性を使用することです。otherTelephone
-attribute は多値であり、すべてのコンピューター オブジェクトが既定で書き込みアクセス権を持つPersonal-Information プロパティ セットの一部です。networkAddress
-attributeを使用する場合は、すべてのコンピューターに対してその属性への明示的な書き込みアクセスを設定する必要があります。
また、MAC アドレスを Active Directory に保存すると、ドメイン内のすべてのユーザーが MAC アドレスへの読み取りアクセス権を持つことになり、(環境によっては) 小さなセキュリティ リスクが生じる可能性があることにも留意する必要があります。