VBScriptを使用してSIPアドレスを取得します
-
24-10-2019 - |
質問
JavaScriptオブジェクトを使用してOffice Communicatorでの存在を確認できるように、ユーザーの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
基本的に、私は彼らのユーザー名を広告から取得することができます、そして、私はそれを渡して、彼らのSIPアドレス(STRSIP)を取り戻したいと思います。このコードを修正してそのタスクを具体的に実行する方法はありますか?
解決
投稿されたVBScriptの問題は次のとおりです
- クライアント側のユーザーを列挙し、正しいユーザーを見つけるのに多くの時間がかかります。同様に、データベースからすべてのレコードを取得してクライアント側で比較を実行する代わりに、SQLクエリを実行します。右?
- 列挙は、1つのレベルでのみ行われます。再帰的な列挙を行うには、コードを修正する必要があります。ただし、再帰的な列挙を行うためにそれを修正すれば、仕事をするのにさらに長い時間とさらに多くのリソースがかかるでしょう。
あなたの質問に答える前に、アクティブディレクトリの基本的な背景Knowlegeを以下に示します。
- Active Directory上のユーザーオブジェクトには、多くの属性が含まれています。
- 特に、SamacCountNameは2000年以前の名前です。
- userprincipalnameは形式です
user@domain.name
ADO接続オブジェクトを使用してクエリを実行することができます。アクティブディレクトリにバインドされるため、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
所属していません StackOverflow