Domanda

Sto cercando di ottenere l'indirizzo SIP di un utente in modo da poter utilizzare un oggetto JavaScript per verificare la loro presenza in Office Communicator. Ecco uno script che ho trovato che è simile a quello che sto cercando di fare.

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

In sostanza, posso ottenere il loro nome utente da AD, e vorrei passare che in e ottenere il loro indirizzo SIP (strSIP) indietro. C'è un modo per risolvere questo codice per fare questo compito specifico?

È stato utile?

Soluzione

I problemi del vostro VBScript pubblicati sono

  1. Si enumera l'utente sul lato client, che avrà un sacco di tempo per trovare l'utente corretto. Allo stesso modo, invece di tirare tutti i record dal database e fare il confronto sul lato client, si dovrebbe eseguire una query SQL. Giusto?
  2. L'enumerazione è fatto a un solo unico livello. È necessario correggere il codice per fare l'enumerazione ricorsiva. Tuttavia, se si risolvere il problema di fare l'enumerazione ricorsiva, sta andando a prendere anche di più tempo e anche più risorse per fare il tuo lavoro.

Prima di rispondere alla tua domanda, qui ci sono alcuni retroscena knowlege base su Active Directory.

  • oggetti utente su Active Directory contiene una serie di attributi.
  • In particolare, samAccountName è il tuo nome precedente a Windows 2000.
  • userPrincipalName è nel formato di user@domain.name

È possibile actully eseguire una query utilizzando un oggetto di connessione ADO. Dal momento che sono binded a un Active Directory, è possibile eseguire una query LDAP. La stringa di query LDAP contiene quattro parti.

  • Percorso principale, dove iniziamo la ricerca.
  • filtro LDAP
  • attributi restituiti
  • Ambito di ricerca

La stringa di query LDAP che si dovrebbe utilizzare dovrebbe essere qualcosa come

<LDAP://chkenergy.net/DC=chkenergy,DC=net>;(&(objectClass=user)(samAccountName=yourusername));msRTCSIP-PrimaryUserAddress;subtree
  • Il percorso root nell'esempio precedente è <LDAP://chkenergy.net/DC=chkenergy,DC=net>.
  • Il filtro LDAP è (&(objectClass=user)(samAccountName=yourusername)). Naturalmente, è necessario sostituire yourusername a qualcosa d'altro all'interno del vostro codice. Io parto dal presupposto è possibile passare in un samAccountName. Se questo non è il caso, è necessario modificare il filtro da soli.
  • attributi restituiti è msRTCSIP-PrimaryUserAddress. Penso che sia quello che serve. Giusto?
  • Io parto dal presupposto che si sta cercando per la ricerca di tutti gli oggetti utente sotto lo stesso dominio. Così, il vostro ambito di ricerca dovrebbe essere subtree

Ecco un esempio completo che credo che dovrebbe fare il tuo lavoro

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top