Jump to content

_AD_GetObjectsInOU - Output 2 OU's into 1 variable


Recommended Posts

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

Link to post
Share on other sites

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 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2019-12-03 - Version 1.5.1.0) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

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.

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!

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
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • 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
×
×
  • Create New...