Obtenez adresse SIP à l'aide VBScript
-
24-10-2019 - |
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?
La solution
Les problèmes de votre vbscript POSTée ne
- 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?
- 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 remplaceryourusername
à 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