0

JavaScriptオブジェクトを使用してOfficeCommunicatorでのユーザーの存在を確認できるように、ユーザーの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)を取得したいと思います。そのタスクを具体的に行うためにこのコードを修正する方法はありますか?

4

1 に答える 1

0

投稿されたvbscriptの問題は次のとおりです。

  1. クライアント側のユーザーを列挙するため、正しいユーザーを見つけるのに多くの時間がかかります。同様に、データベースからすべてのレコードをプルしてクライアント側で比較を行う代わりに、SQLクエリを実行します。右?
  2. 列挙は、1つの単一レベルでのみ実行されます。再帰的な列挙を行うには、コードを修正する必要があります。ただし、再帰的な列挙を行うように修正すると、作業にかかる時間とリソースがさらに長くなります。

質問に答える前に、ActiveDirectoryに関する基本的な背景知識をいくつか紹介します。

  • Active Directoryのユーザーオブジェクトには、いくつかの属性が含まれています。
  • 特に、samAccountNameはWindows2000より前の名前です。
  • userPrincipalNameは次の形式ですuser@domain.name

ADO接続オブジェクトを使用してクエリを実際に実行できます。Active Directoryにバインドされているため、LDAPクエリを実行できます。LDAPクエリ文字列には4つの部分が含まれています。

  • 検索を開始するルートパス。
  • LDAPフィルター
  • 返された属性
  • 検索範囲

使用する必要があるLDAPクエリ文字列は次のようになります。

<LDAP://chkenergy.net/DC=chkenergy,DC=net>;(&(objectClass=user)(samAccountName=yourusername));msRTCSIP-PrimaryUserAddress;subtree
  • 上記の例のルートパスはです<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
于 2011-01-27T05:51:47.227 に答える