Frage

Ich versuche, die SIP -Adresse eines Benutzers zu erhalten, damit ich ein JavaScript -Objekt verwenden kann, um ihre Präsenz im Bürokommunikator zu überprüfen. Hier ist ein Skript, das ich gefunden habe, das dem ähnlich ist, was ich tun möchte.

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

Grundsätzlich kann ich ihren Benutzernamen von der Anzeige bekommen, und ich möchte das weitergeben und ihre SIP -Adresse (STRSIP) zurückbekommen. Gibt es eine Möglichkeit, diesen Code speziell für diese Aufgabe zu beheben?

War es hilfreich?

Lösung

Die Probleme Ihres veröffentlichten VBScripts sind

  1. Es zählt den Benutzer auf der Clientseite auf, wodurch sich viel Zeit benötigt, um den richtigen Benutzer zu finden. In ähnlicher Weise würden Sie eine SQL -Abfrage ausführen, anstatt alle Datensätze aus der Datenbank auszuziehen und den Vergleich auf Ihrer Client -Seite durchzuführen. Recht?
  2. Die Aufzählung erfolgt nur auf einer einzigen Ebene. Sie müssen Ihren Code reparieren, um eine rekursive Aufzählung durchzuführen. Wenn Sie es jedoch für eine rekursive Aufzählung beheben, dauert es noch länger und noch mehr Ressourcen, um Ihren Job zu erledigen.

Bevor ich Ihre Frage beantworte, finden Sie hier ein grundlegendes Hintergrundkenntnis auf Active Directory.

  • Benutzerobjekte in Active Directory enthält eine Reihe von Attributen.
  • Insbesondere SamAccountName ist Ihr Vor-Windows 2000-Name.
  • UserPrincipalName ist im Format von user@domain.name

Sie können eine Abfrage mit einem ADO -Verbindungsobjekt ausführen. Da Sie für ein Active Directory betroffen sind, können Sie eine LDAP -Abfrage ausführen. Die LDAP -Abfragezeichenfolge enthält vier Teile.

  • Wurzelpfad, wo wir die Suche beginnen.
  • LDAP -Filter
  • Zurückgegebene Attribute
  • Suchumfang

Die LDAP -Abfragezeichenfolge, die Sie verwenden sollten

<LDAP://chkenergy.net/DC=chkenergy,DC=net>;(&(objectClass=user)(samAccountName=yourusername));msRTCSIP-PrimaryUserAddress;subtree
  • Der Wurzelpfad im obigen Beispiel ist <LDAP://chkenergy.net/DC=chkenergy,DC=net>.
  • Der LDAP -Filter ist (&(objectClass=user)(samAccountName=yourusername)). Natürlich müssen Sie ersetzen yourusername zu etwas anderem in Ihrem Code. Ich gehe davon aus, dass Sie einen Samaccountnamen übergeben können. Wenn dies nicht der Fall ist, müssen Sie den Filter selbst ändern.
  • Zurückgegebene Attribute sind msRTCSIP-PrimaryUserAddress. Ich denke, das brauchst du. Recht?
  • Ich gehe davon aus, dass Sie versuchen, nach allen Benutzerobjekten unter derselben Domäne zu suchen. Ihr Suchumfang sollte also sein subtree

Hier ist ein komplettes Beispiel, das ich denke, es sollte Ihren Job machen

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top