Question

Je tente d'obtenir une adresse SIP de l'utilisateur afin que je puisse utiliser un objet JavaScript afin de vérifier leur présence dans Office Communicator. Voici un script que je trouve qui est semblable à ce que je cherche à faire.

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

En fait, je peux obtenir leur nom d'utilisateur de AD, et je voudrais passer que et obtenir leur adresse SIP (strSIP) retour. Y at-il un moyen de corriger ce code pour faire spécifiquement cette tâche?

Était-ce utile?

La solution

Les problèmes de votre vbscript POSTée ne

  1. Il énumère l'utilisateur sur le côté client, qui prendra beaucoup de temps pour trouver l'utilisateur correct. De même, au lieu de tirer tous les enregistrements de la base de données et faire la comparaison de votre côté client, vous devez exécuter une requête SQL. Droit?
  2. L'énumération se fait à un niveau unique. Vous devez fixer votre code pour faire de l'énumération récursive. Cependant, si vous fixez à faire de l'énumération récursive, il va prendre encore plus de temps et plus de ressources pour faire votre travail.

Avant de répondre à votre question, voici quelques knowlege de base sur Active Directory.

  • Les objets de l'utilisateur sur Active Directory contient un certain nombre d'attributs.
  • En particulier, samAccountName est votre nom pré-Windows 2000.
  • userPrincipalName est au format de user@domain.name

Vous pouvez actully exécuter une requête à l'aide d'un objet de connexion ADO. Puisque vous binded à un Active Directory, vous pouvez exécuter une requête LDAP. La chaîne de requête LDAP contient quatre parties.

  • chemin racine, où nous commençons la recherche.
  • Filtre LDAP
  • Returned attributs
  • Recherche étendue

La chaîne de requête LDAP que vous utilisez doit être quelque chose comme

<LDAP://chkenergy.net/DC=chkenergy,DC=net>;(&(objectClass=user)(samAccountName=yourusername));msRTCSIP-PrimaryUserAddress;subtree
  • Le chemin racine dans l'exemple ci-dessus est <LDAP://chkenergy.net/DC=chkenergy,DC=net>.
  • Le filtre LDAP est (&(objectClass=user)(samAccountName=yourusername)). Bien sûr, vous devez remplacer yourusername à quelque chose d'autre à l'intérieur de votre code. Je suppose que vous pouvez passer dans un samAccountName. Si ce n'est pas le cas, vous devez modifier le filtre vous-même.
  • Returned attributs est msRTCSIP-PrimaryUserAddress. Je pense que ce dont vous avez besoin. Droit?
  • Je suppose que vous essayez de rechercher tous les objets utilisateur sous le même domaine. Ainsi, votre champ de recherche devrait être subtree

Voici un exemple complet que je suppose qu'il devrait faire votre travail

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top