使用VBScript获取SIP地址

使用VBScript获取SIP地址,vbscript,active-directory,sip,ocs,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 = Create

我正在尝试获取用户的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

基本上,我可以从广告中得到他们的用户名,我想把它传进来,然后把他们的SIP地址(strSIP)拿回来。有没有办法修复此代码以专门完成该任务?

您发布的vbscript的问题如下:

  • 它在客户端枚举用户,这将花费大量时间来找到正确的用户。类似地,您可以运行SQL查询,而不是从数据库中提取所有记录并在客户端进行比较。对吧?
  • 枚举仅在一个级别上完成。您必须修复代码才能执行递归枚举。但是,如果您将其修复为执行递归枚举,则执行此工作将需要更长的时间和更多的资源
  • 在我回答你的问题之前,这里有一些关于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
    

    你能更详细地介绍一下你想要达到的目标吗?这段代码会在用户的机器上运行,并获得他们自己的状态吗?还是会有其他用户出现?通信器是否安装在运行此代码的机器上?JavaScriptcom在哪里加入了它?只是想了解是否有比使用ADJavaScript更好的方法,因为它是这个应用程序的主要逻辑源。应用程序向用户返回一个随叫随到的轮换时间表,我想将这些用户的通信器状态集成到该时间表中。我使用NameCtrl.GetStatus JS方法来获取它们的状态。我需要将他们的SIP地址传递到该方法中,因此我确信这是正确的地址。如果你还需要什么,请告诉我好的-有道理@Harvey下面的答案应该是完美的,那么除了.Fields(“samAccountName”)应该是.Fields(“msRTCSIP PrimaryUserAddress”)之外,其他都是正确的,因为这是我试图提取的变量。谢谢你。
    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