Sign in to follow this  
Followers 0
jazzyjeff

_AD_GetObjectsInOU - Output 2 OU's into 1 variable

4 posts in this topic

Hello,

I have utility that allows users to see a list of users in our AD Structure and they can then reset passwords and unlock accounts for those users. Unfortunately, my boss doesn't want the users using this utility to be able to all users in one of our OU's.

Here is what I had:

$fUsers = _AD_GetObjectsInOU("OU=School Users,DC=domain,DC=com"),"(objectclass=user)")
$sTemp = _ArrayToString($fUsers, "|", 1)

I then have a Combo box that reads all the users.

I am trying to pick out 2 sub OU's in the School Users OU to view those users. Unfortunately, I cannot get the variable to read users from only the 2 OU's I specified.

Here is the code I have tried to make work:

$fUsers = _AD_GetObjectsInOU(BitAND("OU=Students,OU=School Users,DC=domain,DC=com", "OU=Staff,OU=School Users,DC=domain,DC=com"), "(objectclass=user)")
;$fUsers1 = _AD_GetObjectsInOU("OU=Students,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
$sTemp = _ArrayToString($fUsers, "|", 5)
;$sTemp1 = _ArrayToString($fUsers1, "|", 1)

I am trying to extract users from both the Students and Staff OU's, and not receive any other users in the list. With the code I have above, I am receiving all the users like I am reading the OU, "OU=School Users,DC=domain,DC=com".

I have tried creating 2 seperate array strings and view them in a combo box like this:

GUICTRLSetData($comboUsername, BitAND($sTemp, $sTemp1))

This doesn't bring up any user names though.

I am a little stumped on what to do now.

Thanks,

Jeff

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Do two queries and then combine the results

$aStudents = _AD_GetObjectsInOU("OU=Students,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
$aStaff = _AD_GetObjectsInOU("OU=Staff,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
$sTemp1 = _ArrayToString($aStudents, "|", 1)
$sTemp2 = _ArrayToString($aStaff, "|", 1)
$sResult = $sTemp1 & "|" & $sTemp2
If you need a sorted list then you have to use _ArrayConcatenate and _Arraysort and then create the string. Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Genius! Thanks again Water. I have managed to get it working with your help. I never knew about the _ArrayConcatenate function.

Here is what I used in case anyone is interested.

$fUsers = _AD_GetObjectsInOU("OU=Staff,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
$fUsers1 = _AD_GetObjectsInOU("OU=Students,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
_ArrayConcatenate($fUsers, $fUsers1)
_ArraySort($fUsers)
$sCombo = _ArrayToString($fUsers, "|", 1)

I tried this, but it still brought up users within the other sub OU's of the "School Users" OU.

$aStudents = _AD_GetObjectsInOU("OU=Students,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
$aStaff = _AD_GetObjectsInOU("OU=Staff,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
$sTemp1 = _ArrayToString($aStudents, "|", 1)
$sTemp2 = _ArrayToString($aStaff, "|", 1)
$sResult = $sTemp1 & "|" & $sTemp2

Thank you for helping with the task at hand. I am curious though about how I would combine the array's of additional OU's. I have tried this, but it is bringing up an error.

$fUsers = _AD_GetObjectsInOU("OU=Staff,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
$fUsers1 = _AD_GetObjectsInOU("OU=Students,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
$fUsers2 = _AD_GetObjectsInOU("OU=Generic Accounts,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
_ArrayConcatenate($fUsers, BitAND($fUsers1, $fUsers2))
_ArraySort($fUsers)
$sCombo = _ArrayToString($fUsers, "|", 1)

ERROR: _ArrayConcatenate() called with expression on Const ByRef-param(s).

_ArrayConcatenate($fUsers, BitOR($fUsers1, $fUsers2))

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

C:\Program Files\AutoIt3\Include\Array.au3(204,86) : REF: definition of _ArrayConcatenate().

Func _ArrayConcatenate(ByRef $avArrayTarget, Const ByRef $avArraySource, $iStart = 0)

If you have any ideas on this I'd be grateful.

Share this post


Link to post
Share on other sites

I went away for a bit and was able to answer my own question. In case anyone else is interested:

$fUsers = _AD_GetObjectsInOU("OU=Staff,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
$fUsers1 = _AD_GetObjectsInOU("OU=Students,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
$fUsers2 = _AD_GetObjectsInOU("OU=Generic Accounts,OU=School Users,DC=domain,DC=com", "(objectclass=user)")
_ArrayConcatenate($fUsers, $fUsers1)
_ArrayConcatenate($fUsers, $fUsers2)
_ArraySort($fUsers)
$sCombo = _ArrayToString($fUsers, "|", 1)

Pretty obvious when I sit back and think about it!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • jazzyjeff
      By jazzyjeff
      Hello,

      I am trying to create a combo box for a list of AD users that are in my domain. I am having some problems getting the code to work though, and I wondered if someone could help me out.
      Here is what I have:

      #include <AD.au3> #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> ; Open Connection to the Active Directory _AD_Open() $fUsers = _AD_GetObjectsInOU("OU=Students,OU=Users,DC=domain,DC=com","(objectclass=user)") Global $fUsers, $tUsers $Form1 = GUICreate("Form1", 202, 59, 192, 124) $Combo1 = GUICtrlCreateCombo("Please wait...", 16, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### For $i = 1 To $fUsers[0] $Combo1 = GUICtrlCreateCombo($fUsers[$i], 16, 16, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) Next #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd ; Close Connection to the Active Directory _AD_Close()
      I guess the problem is is my For To Loop.

      If anyone can offer advise, it would be much appreciated.

      Thanks,

      Jeff