- PR -

ASPによるActiveDirectory情報の閲覧

1
投稿者投稿内容
midori
会議室デビュー日: 2005/01/28
投稿数: 9
投稿日時: 2005-01-28 10:48
こんにちわ。

ASPによるActiveDirectory情報の閲覧について質問させて頂きます。

最終ログオンから一定の時間が経過したユーザを一覧表示したいと考えております。

以下の方法で cn,distinguishedName,displayName 等のいくつかの項目は
見ることができたのですが、 lastLogon,lastLogonTimestamp については
Response.Writeによる表示を試みた時点で
「ASP 0185 (0x80020003) オブジェクトの既定のプロパティがありません。」
のエラーが出てしまいます。

lastLogon,lastLogonTimestamp はLDapBrowse等のツールで見ると
「127480873391093750」のような形で表示されていますが、
このようなデータ型はASPから参照できるのでしょうか。
また、WHERE句による抽出は可能でしょうか。

以下、ソースになります。

Set con = Server.CreateObject("ADODB.Connection")
con.ConnectionString = "Provider=ADSDSOObject;User ID=TestUser;Password=TestUser;"
con.Open

Set com = CreateObject("ADODB.Command")
Set com.ActiveConnection = con
com.CommandText = "select cn,distinguishedName,displayName,lastLogon " _
& "from 'LDAP://172.16.1.1/DC=home,DC=local' " _
& "WHERE objectClass = 'user' AND cn = '9*'"
Set rs = com.Execute

Response.Write rs.Fields("cn")
Response.Write rs.Fields("distinguishedName")
Response.Write rs.Fields("displayName")

以上、宜しくお願い致します。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2005-01-29 12:03
ちゃっぴです。

先日、似たようなことをやりましたが・・・
とはいっても、VBScriptでADOを使用せず、ActiveDS.IADsUserを取得して、
LastLogin Propertyで取得しましたが・・・

IADsUser Property Methods
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/iadsuser.asp

引用:
「ASP 0185 (0x80020003) オブジェクトの既定のプロパティがありません。」
のエラーが出てしまいます。



ADのSchema "LastLogin" はObject型で持ってますね。
VarType, TypeName関数等を用いればすぐにわかると思います。

問題は、このObject型からどうやって日付を取り出すかですが・・・
調査不足のため、ちょっとわかりません・・・

あと、前述の私の方法では、同じDomain内でも参照しているDomain Controlerに
よって異なる日付が返されました。
なので、Domain内に存在するすべてのDomain Controlerにたいして、
Requestを投げ、もっとも新しい物をしようするという風にしました。

ご参考までに・・・

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2005-01-29 12:07 ]

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2005-01-29 12:12 ]
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2005-01-29 13:11
引用:
問題は、このObject型からどうやって日付を取り出すかですが・・・
調査不足のため、ちょっとわかりません・・・



ADSI Editを使用して調査したところ、
「Large Integer/Interval」となっていました。

おそらくこれでは?

IADsLargeInteger
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/iadsuser.asp

Large Integer Property Type
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sds/sds/large_integer_property_type.asp

こんなかんじでいけるかと・・・

コード:

Dim objLastLogon 'As ActiveDS.LargeInteger

Set objLastLogon = rs.Fields("lastLogon").Value
Response.Write CCur(.HighPart) / 10000 * CCur(4294967296) _
+ CCur(.LowPart) / 10000



1/10000に丸めてるのでそこら辺はご修正ください。

あと、これはAPIで使用されるFILETYME構造体のようですので、
FileTimeToLocalFileTime, FileTimeToSystemTime API を使用した
COMを作っておいたほうがいいでしょうね。

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2005-01-29 13:18 ]

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2005-01-29 13:51 ]
midori
会議室デビュー日: 2005/01/28
投稿数: 9
投稿日時: 2005-02-23 13:49
非常に遅くなってしまいましたが…

出来ました!

成る程、Large Integer型だったのですね。

FILETYME構造体についてはゴリゴリ演算してしまい、
無事、抽出と参照ができました。

ちゃっぴさま、ありがとうございました。
1

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