2011-01-26 1 views
0

ユーザーのSIPアドレスを取得しようとしているため、JavaScriptオブジェクトを使用してOffice Communicator内のプレゼンスを確認できます。ここで私が探しているスクリプトに似ています。VBScriptを使用してSIPアドレスを取得

Option Explicit 
DIM objConnection, objCommand 
Set objConnection = CreateObject("ADODB.Connection") 
objConnection.Open "Provider=ADsDSOObject;" 

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

Dim objOU, objUser, strUPN, strSIP, SIPLine 
' Bind to the OU object. 
Set objOU = GetObject("LDAP://chkenergy.net/DC=chkenergy,DC=net") 

' Enumerate all users in the OU. 
objOU.Filter = Array("user") 
For Each objUser In objOU 
' Skip computer objects. 
If (objUser.Class = "user") Then 
    strUPN = objUser.userPrincipalName 
    strSIP = objUser.get("msRTCSIP-PrimaryUserAddress") 

    wscript.echo strSIP 

End If 

Next 

基本的に、私はADから自分のユーザー名を取得することができますし、私はその中を通過させ、戻って自分のSIPアドレス(strSIP)を取得したいと思います。このコードを修正してそのタスクを具体的に行う方法はありますか?あなたの投稿のVBScriptの

+0

あなたの仕事をする必要がありますね完全なサンプルは、あなたがあなたが達成しようとしているかについて、もう少し詳細を与えることができますか?ありますかこのコードはユーザーのマシン上で実行され、独自の存在を得るでしょうか?またはそれは別のユーザーの存在を得るでしょうか?コミュニケータはこのコードを実行しているマシンにインストールされますか?どこにjavascriptのcomはありますか? ADに行くよりも良いアプローチがあるかどうかを理解しようとしています –

+0

JavaScriptがこのアプリケーションの主なロジックソースなので、JavaScriptが入ります。アプリケーションは、オンコールの回転スケジュールをユーザーに返します。これらのユーザーのコミュニケータの存在をそのスケジュールに統合したいと考えています。私は彼らの存在を得るためにNameCtrl.GetStatus JSメソッドを使用します。そのメソッドに渡すためにSIPアドレスが必要なので、正しいアドレスであると確信しています。あなたが他のものが必要な場合は教えてください –

+0

AH、ok - 意味があります。 @ハーベイの答えは、完全でなければなりません –

答えて

0

問題は、それが正しいユーザを見つけるために多くの時間がかかります、クライアント側のユーザを、列挙

  1. です。同様に、データベースからすべてのレコードを取り出してクライアント側で比較するのではなく、SQLクエリを実行します。右?
  2. 列挙は1つのレベルでのみ実行されます。再帰的な列挙を行うようにコードを修正する必要があります。しかし、再帰的な列挙を行うように修正した場合、それはあなたの仕事をするためにより長い時間とさらに多くのリソースを必要とします。

質問に答える前に、Active Directoryの基本的な背景知識をご紹介します。

  • Active Directory上のユーザーオブジェクトには多くの属性が含まれています。
  • 特に、samAccountNameはWindows 2000以前の名前です。
  • userPrincipalNameのは、あなたがactully ADO接続オブジェクトを使用してクエリを実行することができ[email protected]

の形式です。 Active Directoryにバインドされているため、LDAPクエリを実行できます。 LDAPクエリ文字列には4つの部分が含まれています。

  • 検索を開始するルートパス。返さは、あなたが使用するLDAPクエリ文字列は、上記の例では、ルート・パスがある

    <LDAP://chkenergy.net/DC=chkenergy,DC=net>;(&(objectClass=user)(samAccountName=yourusername));msRTCSIP-PrimaryUserAddress;subtree 
    
    • のようなものでなければなりません
    • 検索範囲

    属性

  • LDAPフィルタ
  • <LDAP://chkenergy.net/DC=chkenergy,DC=net>
  • LDAPフィルタは(&(objectClass=user)(samAccountName=yourusername))です。もちろん、yourusernameをコード内の何かに置き換える必要があります。私はあなたがsamAccountNameを渡すことができると仮定しています。そうでない場合は、フィルタを自分で修正する必要があります。
  • 返される属性はmsRTCSIP-PrimaryUserAddressです。私はそれがあなたが必要とするものだと思います。右?
  • 私はあなたが同じドメインのすべてのユーザーオブジェクトを検索しようとしていると仮定しています。だから、あなたの検索範囲は、ここでsubtree

である必要があり、私はそれが

userName = "harvey" 
ldapStr = "<LDAP://chkenergy.net/DC=chkenergy,DC=net>;(&(objectClass=user)(samAccountName=" & userName & "));msRTCSIP-PrimaryUserAddress;subtree" 

Set conn = CreateObject("ADODB.Connection") 
conn.Provider = "ADSDSOObject" 
conn.Open "ADs Provider" 
Set rs = conn.Execute(ldapStr) 

While Not rs.EOF 
    wscript.echo rs.Fields("msRTCSIP-PrimaryUserAddress") 
    rs.MoveNext 
Wend 
+0

除外しようとしている変数は.Fields( "samAccountName")は.Fields( "msRTCSIP-PrimaryUserAddress")にする必要があります。しかし、ありがとう。 –

関連する問題