使用VBScript获取SIP地址

时间:2011-01-26 14:22:48

标签: vbscript active-directory sip ocs

我正在尝试获取用户的SIP地址,以便我可以使用JavaScript对象检查它们在Office Communicator中的存在。这是我发现的一个类似于我想要的脚本。

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)。有没有办法修复此代码专门执行该任务?

1 个答案:

答案 0 :(得分:0)

您发布的vbscript的问题是

  1. 它在客户端枚举用户,这将花费大量时间来找到正确的用户。同样,您可以运行SQL查询,而不是从数据库中提取所有记录并在客户端进行比较。正确?
  2. 枚举仅在一个单一级别完成。您必须修复代码才能执行递归枚举。但是,如果你修复它来进行递归枚举,那么你需要更长的时间和更多的资源来完成你的工作。
  3. 在回答您的问题之前,以下是Active Directory的一些基本背景知识。

    • Active Directory上的用户对象包含许多属性。
    • 特别是,samAccountName是您的Windows 2000之前的名称。
    • userPrincipalName的格式为user@domain.name

    您可以使用ADO连接对象执行查询。由于您绑定到Active Directory,因此可以执行LDAP查询。 LDAP查询字符串包含四个部分。

    • 根路径,我们开始搜索。
    • 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