| 
| 
| 
| #146995 - 2005-09-01 08:45 PM  AD Query not retreiving results... |  
| dataspike   Getting the hang of it
 
   Registered:  2005-03-09
 Posts: 89
 Loc:  San Diego, CA
 | 
I'm trying to use the fnLDAPQuery to retrieve the SIP address of a user account.  All my user user accounts have the field filled in, and is verified via the AD Users and Computers, however I have several computers that show the SIP address as "" (None).
 Any idea what would cause this?  It works fine on 98% of the machines, just a few.  Both XP and W2K.
 
 Any insight would be awsome.
 
 *** Edit ***
 I added some error checking, this is what happens on a machine that doesn't work.
 
 
  
 Thanks,
 Chris
 
 Code:
 
 
 Function fnLDAPQuery($What,Optional $From,Optional $Filter,Optional $OrderBy,Optional $Scope,
 Optional $User,Optional $Pswd)
 
 Dim $oCon,$oCMD,$oRS,$sQ,$aR,$C,$R
 
 $sQ="<"+IIf($From="","LDAP://"+GetObject("LDAP://rootDSE").Get("defaultNamingContext"),
 $From)+">;"+$Filter+";"+IIf(VarType($What)>8192,Join($What,','),$What)+";"+
 IIf($Scope<>"base" And $Scope<>"onelevel","subtree",$Scope)
 
 $oCon=CreateObject("ADODB.Connection")
 $oCon.Provider="ADsDSOObject"
 $oCon.Properties("Encrypt Password").Value=1
 $oCon.Properties("ADSI Flag").Value=1
 If $User And $Pswd
 $oCon.Properties("User ID").Value=$User
 $oCon.Properties("Password").Value=$Pswd
 EndIf
 $oCon.Open("Active Directory Provider")
 
 $oCMD=CreateObject("ADODB.Command")
 $oCMD.ActiveConnection=$oCon
 $oCMD.CommandText=$sQ
 $oCMD.Properties("Page Size").Value=1000
 $oCMD.Properties("Timeout").Value=30
 $oCMD.Properties("Cache Results").Value=0
 
 If InStr($OrderBy,"distinguishedName")
 $oRS=CreateObject("ADODB.Recordset")
 $oRS.CursorLocation=3
 $oRS.Sort=$OrderBy
 $oRS.Open($sQ,$oCon,0,1,1)
 Else
 If $OrderBy
 $oCMD.Properties("Sort On").Value=$OrderBy
 EndIf
 $oRS=$oCMD.Execute
 EndIf
 If @ERROR Exit @ERROR EndIf
 If $oRS.BOF And $oRS.EOF Exit @ERROR EndIf
 
 $aR = $oRS.GetRows()
 Dim $aFR[Ubound($aR,2),Ubound($aR,1)]
 For $R=0 to Ubound($aR,2)
 For $C=0 to Ubound($aR,1)
 $aFR[$R,$C]=$aR[$C,$R]
 Next
 Next
 
 $fnLDAPQuery=$aFR
 EndFunction
 
 Function GetSIP
 ; Example for getting the distinguishedName of a user
 $sWhat = "msRTCSIP-PrimaryUserAddress"
 
 ; Use ANR (ambiguous name resolution)
 $sFilter = "(&(objectClass=user)(anr="+@USERID+"))"
 
 $aResults = fnLDAPQuery($sWhat,,$sFilter)
 If @ERROR <> 0
 $msg = MessageBox("Error: " + @ERROR + " - " + @SERROR,"Notice",16)
 EndIf
 ;@ERROR " | " @SERROR ??
 
 For $r = 0 to Ubound($aResults,1)
 For $c = 0 to Ubound($aResults,2)
 $sip = $aResults[$r,$c]
 Next
 ;	?
 Next
 
 If $sip = ""
 ;			$frmMain.TopMost = 0
 $msg = MessageBox ("Your username is: " + '"' + @USERID + '"' + @CRLF +
 "Your SIP address is: " + '"' + $sip + '"' + @CRLF +
 "Local Version is: " + $LocalMessengerVersion,"Notice",48)
 ;			$frmMain.TopMost = 1
 Exit
 Else
 $sip = SubStr($sip, Len($sip) - Len($sip) + 5,)
 ;			$frmMain.TopMost = 0
 $msg = MessageBox ("Your username is: " + '"' + @USERID + '"' + @CRLF +
 "Your SIP address is: " + '"' + $sip + '"' + @CRLF +
 "Local Version is: " + $LocalMessengerVersion,"Notice",48)
 ;			$frmMain.TopMost = 1
 EndIf
 
 EndFunction
 
 Function MessengerDefaults
 $MessengerReg = "HKCU\Software\Microsoft\MessengerService"
 
 $rc = WriteValue($MessengerReg, "UserMicrosoft RTC Instant Messaging", $sip, "REG_SZ")
 $rc = WriteValue($MessengerReg, "RTCState", "01000000", "REG_BINARY")
 $rc = WriteValue($MessengerReg, "IMSBHide", "01000000", "REG_BINARY")
 $rc = WriteValue($MessengerReg, "CEIP Preference", "0", "REG_DWORD")
 
 $MessengerReg = "HKLM\Software\Microsoft\MessengerService"
 $rc = WriteValue($MessengerReg + "\Policies","IMWarning","Welcome to Instant Messaging.", "REG_SZ")
 
 EndFunction
 
 Function WindowsMessenger($Method)
 
 If InStr(@PRODUCTTYPE,"Server") Or InStr(@PRODUCTTYPE,"Domain Controller")
 Exit
 EndIf
 
 $NetMessengerVersion = "5.1.0680"	;	Version Cookie.  Update this entry if the version changes.
 $LocalMessengerVersion = GetFileVersion(%programfiles% + "\Messenger\msmsgs.exe","FileVersion")
 
 Select
 Case $Method = 'I'
 If $LocalMessengerVersion = $NetMessengerVersion
 GetSIP
 MessengerDefaults
 Exit
 ;				$frmMain.TopMost = 0
 $msg = MessageBox("Error: " + @ERROR + " - " + @SERROR,"Notice",48);
 ;				$frmMain.TopMost = 1
 EndIf
 
 If $LocalMessengerVersion = ""
 $lblStatus.Text = "Please wait, installing Windows Messenger..."
 Shell @LSERVER + "\netlogon\kix\tools\Install_Messenger.exe"
 GetSIP
 MessengerDefaults
 Exit
 EndIf
 
 If $LocalMessengerVersion < $NetMessengerVersion
 $lblStatus.Text = "Please wait, removing Windows Messenger..."
 Shell @LSERVER + "\netlogon\kix\tools\Remove_Messenger.exe"
 $lblStatus.Text = "Please wait, installing Windows Messenger..."
 Shell @LSERVER + "\netlogon\kix\tools\Install_Messenger.exe"
 GetSIP
 MessengerDefaults
 Exit
 EndIf
 
 Case $Method = 'U'
 If $LocalMessengerVersion > ""
 $lblStatus.Text = "Please wait, removing Windows Messenger..."
 Shell @LSERVER + "\netlogon\kix\tools\Remove_Messenger.exe"
 EndIf
 
 Case 1
 ;User input not I or U
 Exit 1
 EndSelect
 Exit
 EndFunction
 
 GetSIP
 
 
 
 Edited by dataspike (2005-09-01 09:08 PM)
 |  
| Top |  |  |  |  
| 
| 
| #146996 - 2005-09-01 09:34 PM  Re: AD Query not retreiving results... |  
| Chris S.   MM club member
 
       
   Registered:  2002-03-18
 Posts: 2368
 Loc:  Earth
 | 
If I look at the schema for the User objectClass using Active Directory Attribute Browser, I see that msRTCSIP-PrimaryUserAddress is not present (at least in my domain). Have you verified that this attribute is present for your User objectClass?
 |  
| Top |  |  |  |  
| 
| 
| #146997 - 2005-09-01 09:38 PM  Re: AD Query not retreiving results... |  
| dataspike   Getting the hang of it
 
   Registered:  2005-03-09
 Posts: 89
 Loc:  San Diego, CA
 | 
Quote:
 If I look at the schema for the User objectClass using Active Directory Attribute Browser, I see that msRTCSIP-PrimaryUserAddress is not present (at least in my domain). Have you verified that this attribute is present for your User objectClass?
 
 
 
 
 The object is in the domain as I am able to retrieve it with my username.  It's created when you install a Live Communication Server.  It's for Windows Messenger and other programs.
 
 Any other ideas?
 |  
| Top |  |  |  |  
| 
| 
| #146999 - 2005-09-01 09:45 PM  Re: AD Query not retreiving results... |  
| dataspike   Getting the hang of it
 
   Registered:  2005-03-09
 Posts: 89
 Loc:  San Diego, CA
 | 
Quote:
 Use the browser as suggested to verify that the attribute is registered in your AD schema.
 
 
 
 
   |  
| Top |  |  |  |  
| 
| 
| #147000 - 2005-09-01 09:48 PM  Re: AD Query not retreiving results... |  
| Chris S.   MM club member
 
       
   Registered:  2002-03-18
 Posts: 2368
 Loc:  Earth
 | 
KiX may be barfing on the "-" in the attribute name (not M$'s best decision to put attributes with a dash in them, IMHO). You may want to try wrapping the attribute in quotes...
 Code:
 
 $sWhat = "'msRTCSIP-PrimaryUserAddress'"
 
 
 |  
| Top |  |  |  |  
| 
| 
| #147001 - 2005-09-01 09:53 PM  Re: AD Query not retreiving results... |  
| dataspike   Getting the hang of it
 
   Registered:  2005-03-09
 Posts: 89
 Loc:  San Diego, CA
 | 
Quote:
 KiX may be barfing on the "-" in the attribute name (not M$'s best decision to put attributes with a dash in them, IMHO). You may want to try wrapping the attribute in quotes...
 
 Code:
 
 $sWhat = "'msRTCSIP-PrimaryUserAddress'"
 
 
 
 
 
 
 Good idea, but as soon as I do that it craps out on my machine and gives the same error.  If I leave it as in the original code, it works fine on my machine, but same error on the other.  So, nope...
 
 Edited by dataspike (2005-09-01 09:53 PM)
 |  
| Top |  |  |  |  
| 
| 
| #147002 - 2005-09-02 10:00 PM  Re: AD Query not retreiving results... |  
| dataspike   Getting the hang of it
 
   Registered:  2005-03-09
 Posts: 89
 Loc:  San Diego, CA
 | 
Changed the code... this works or seems to, on all machines.
 Code:
 
 Function GetSIP
 $objSystemInfo = CreateObject("ADSystemInfo")
 $strAuthDistinguishedName = "LDAP://" + $objSystemInfo.UserName
 $UserObj = GetObject($strAuthDistinguishedName)
 $SIP = $UserObj.Get("msRTCSIP-PrimaryUserAddress")
 
 $msg = MessageBox("Logon Server: " + @LSERVER + @CRLF +
 "LDAP Path: " + $strAuthDistinguishedName + @CRLF +
 "SIP Address: " + $SIP,"Notice",64)
 EndFunction
 
 
 |  
| Top |  |  |  |  
 Moderator:  Shawn, ShaneEP, Ruud van Velsen, Arend_, Jochen, Radimus, Glenn Barnas, Allen, Mart
 
 | 
| 
 
| 0 registered
and 456 anonymous users online. 
 | 
 |  |