- PR -

ドメイン上のユーザー一覧の取得

1
投稿者投稿内容
reo
常連さん
会議室デビュー日: 2004/10/05
投稿数: 43
投稿日時: 2006-06-20 11:28
WindowsServer2000のActiveDirectoryで、ドメイン上のユーザーの一覧&アカウントが登録された、更新された日をなにかテキストで取得する方法はありますでしょうか?
皆様よろしくお願い致します。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-06-20 12:22
こんにちは。

アカウントの登録日や更新日を取得する方法は分かりませんが、ユーザーの一覧は ADSI を利用するスクリプトを書けば出力できます。

TechNet スクリプト一覧 : Active Directory ユーザー アカウント
http://www.microsoft.com/japan/technet/scriptcenter/scripts/ad/users/default.mspx

ADSI の IADsUserインターフェース
http://msdn.microsoft.com/library/en-us/adsi/adsi/iadsuser.asp
ちゅき
常連さん
会議室デビュー日: 2005/02/18
投稿数: 41
お住まい・勤務地: 関西
投稿日時: 2006-06-20 13:15
createTimeStamp
modifyTimeStamp

なんかで取得してくださいな。ADSIのプロパティから直接アクセスできないので
Get("createTimeStamp")などとするか、ADO使ってください。
私は面倒なのでADO使っています

どんな情報が取れるかは、ADSIのスキーマをにらめっこしてください。

以下、以前作ったものの「抜粋」です。終了処理とかオブジェクトの削除とかは省略してます。
#動くかどうかも?^^;

MsgBox strADsPath & vbCrLf & "以下のユーザー一覧を取得します"
Const ADS_SYSTEMFLAG_ATTR_IS_CONSTRUCTED = &h4
Const ADS_UF_DONT_EXPIRE_PASSWD = &H10000'無期限パスワードのチェック

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"

Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection

Set objRootDSE = GetObject("LDAP://rootDSE")
strDNC = objRootDSE.Get("defaultNamingContext")

strADsPath = "'LDAP://" & strDNC & "'"
Set objDomain= GetObject("LDAP://" & strDNC)
objDomain.Filter = Array("domain")
objCommand.CommandText = "SELECT name,sn,givenName,displayName,sAMAccountName,userPrincipalName,createTimeStamp,modifyTimeStamp,lastLogon,description,distinguishedName " & _
"FROM " & strADsPath & " " & _
"WHERE objectClass = 'user'" & _
"AND objectCategory = 'person'"
objCommand.Properties("Page Size") = 1000'ADの仕様で1ページの最大件数1000件
objCommand.Properties("Timeout") = 30 'Seconds
objCommand.Properties("searchscope") = 2'ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute

Wscript.Echo "Constructed Attributes: "
Wscript.Echo "名前,姓,名,表示名,ログオン名(NetBIOS),ログオン名(user principal),作成時間,更新時間'以下略
objRecordSet.moveFirst

While NOT objRecordSet.EOF
'DNからDC部分を削除
szDN = objRecordSet.Fields("distinguishedName")
szDN = Left(szDN,Len(szDN)-nDCLength-1)
'説明の取得(複数設定できるためこのような処理が必要)
szDescription=""
if Not isNull(objRecordSet.Fields("description").Value) then
szDescription=""
for each szTemp In objRecordSet.Fields("description").Value
if szDescription<>"" then szDescription = szDescription & Chr(13) & Chr(10)
szDescription = szDescription & szTemp
next
end if
strAttribute = """" & objRecordSet.Fields("name") & """"
strAttribute = strAttribute & ",""" & objRecordSet.Fields("sn") & """"
strAttribute = strAttribute & ",""" & objRecordSet.Fields("givenName") & """"
strAttribute = strAttribute & ",""" & objRecordSet.Fields("displayName") & """"
strAttribute = strAttribute & ",""" & objRecordSet.Fields("sAMAccountName") & """"
strAttribute = strAttribute & ",""" & objRecordSet.Fields("userPrincipalName") & """"
strAttribute = strAttribute & ",""" & objRecordSet.Fields("createTimeStamp") & """"
strAttribute = strAttribute & ",""" & objRecordSet.Fields("modifyTimeStamp") & """"

WScript.Echo strAttribute
〜中略〜
Wscript.Echo strAttribute
objRecordSet.MoveNext
WEnd
〜省略〜
1

スキルアップ/キャリアアップ(JOB@IT)