Chris S.
(MM club member)
2003-06-12 04:20 PM
KiXforms - Active Directory Browser

I wrote this script because, having just implemented AD, I couldn't figure out how to navigate the ADsPath for scripting purposes. You can use this to browse your Active Directory and find out what the fully-qualified ADsPath of an object is.

I hope you find it useful when you're writing ADSI scripts and can't remember the right path to the container or OU that you're trying to get to.

(P.S. It also shows off the new tabcontrols.)

Code:

Break On

; === Main Form ========================================================
$frmMain = CreateObject("Kixtart.Form")
$frmMain.ClientSize = 640,480
$frmMain.FormBorderStyle = 4
$frmMain.Icon = "shell32.dll;42"

$imgList = $frmMain.Controls.ImageList
$imgList.ColorDepth = 16
For $i = 0 To $frmMain.SmallImageList.Images.Count
$imgList.Images.Add($frmMain.SmallImageList.Images($i))
Next

If Exist("%WINDIR%\System32\dsuiext.dll")
$c=$imgList.Images.Add("dsuiext.dll;1")
$g=$imgList.Images.Add("dsuiext.dll;7")
$u=$imgList.Images.Add("dsuiext.dll;12")
$o=$imgList.Images.Add("dsuiext.dll;13")
$ux=$imgList.Images.Add("dsuiext.dll;27")
$ul=$imgList.Images.Add(".\user_locked_16.ico")
$f=$imgList.Images.Add("dsquery.dll;0")
$frmMain.Icon = $imgList.Images($f)
Else
$c=53 $g=35 $u=34 $o=50
EndIf

$imgLarge = $frmMain.Controls.ImageList
$imgLarge.ImageSize = 32,32
For $i = 0 To $imgList.Images.Count
$imgLarge.Images.Add($imgList.Images($i))
Next

$MsgBox = $frmMain.Dialogs.MessageBox
$MsgBox.Title = "Information..."
$MsgBox.Style = 68

$txtCopy = $frmMain.Controls.TextBox("",0,0,0,0)
$txtCopy.Hide
; ======================================================================

; === ToolBar ==========================================================
$grpToolBar = $frmMain.GroupBox("",0,0,$frmMain.ClientWidth,30)
$grpToolBar.Anchor = 7

$btnBack = $grpToolBar.ToolButton("Back",2,2,60,26)
$btnBack.FlatStyle = 1
$btnBack.Icon = 18
$btnBack.OnClick = "fnOnBack()"
$btnBack.ToolTipText = "Back"

$btnRefresh = $grpToolBar.ToolButton("",$btnBack.Right,2,26,26)
$btnRefresh.FlatStyle = 1
$btnRefresh.Icon = 36
$btnRefresh.OnClick = "fnRefresh()"
$btnRefresh.ToolTipText = "Refresh"

$btnCopy = $grpToolBar.ToolButton("",$btnRefresh.Right,2,26,26)
$btnCopy.FlatStyle = 1
$btnCopy.Icon = 7
$btnCopy.OnClick = "fnCopy()"
$btnCopy.ToolTipText = "Copy current container to clipboard"

$btnView = $grpToolBar.ToolButton("",$btnCopy.Right,2,26,26)
$btnView.FlatStyle = 1
$btnView.Icon = 41
$btnView.OnClick = "fnView()"
$btnView.ToolTipText = "Cycle view options"

$btnCancel = $grpToolBar.ToolButton("Cancel",$grpToolBar.ClientWidth-62,2,60,26)
$btnCancel.Anchor = 4
$btnCancel.FlatStyle = 1
$btnCancel.Icon = 37
$btnCancel.OnClick = "$$btnCancel.Tag = 1"
$btnCancel.ToolTipText = "Cancel Enumeration"
; ======================================================================

; === Container Tabs ===================================================
$tabMain = $frmMain.Controls.TabControl("",0,$grpToolBar.Bottom+1,$frmMain.ClientWidth,
$frmMain.ClientHeight-30)
$tabMain.Anchor = 15
$tabMain.OnSelectedIndexChanged = "fnOnTabChange()"

$frmMain.Text = "LDAP://"+GetObject("LDAP://rootDSE").Get("defaultNamingContext")
$objDomain = GetObject($frmMain.Text)

For Each $objContainer in $objDomain
$TabPage = $tabMain.TabPages.Add(Split($objContainer.Name,"=")[1])

$ListView = $TabPage.Controls.ListView("",0,0,$TabPage.ClientWidth,$TabPage.ClientHeight-25)
$ListView.Anchor = 15
$ListView.LargeImageList = $imgLarge
$ListView.SmallImageList = $imgList
$ListView.Name = "ListView"
$ListView.OnDoubleClick = "fnOnDoubleClick()"
$ListView.Tag = $objContainer.ADsPath
$nul = $ListView.Columns.Add("Name",0.35*$ListView.ClientWidth)
$nul = $ListView.Columns.Add("AD_Name",0)
$nul = $ListView.Columns.Add("Class",0.25*$ListView.ClientWidth)
$nul = $ListView.Columns.Add("Description",0.40*$ListView.ClientWidth)

; === Status Bar ===================================================
$grpStatusBar = $TabPage.Controls.GroupBox("",1,$ListView.Bottom+3,$TabPage.ClientWidth-1,20)
$grpStatusBar.Anchor = 13
$grpStatusBar.BorderStyle = 0

$lblStatus = $grpStatusBar.Controls.Label("",0,0,0.45*$grpStatusBar.ClientWidth,20)
$lblStatus.Anchor = 1
$lblStatus.BorderStyle = 5
$lblStatus.Name = "lblStatus"

$prgProgress = $grpStatusBar.Controls.ProgressBar("",$lblStatus.Right+1,0,0.55*$grpStatusBar.ClientWidth-1,20)
$prgProgress.BorderStyle = 5
$prgProgress.Step = 1
$prgProgress.Anchor = 5
$prgProgress.Name = "prgProgress"
; ======================================================================
Next
; ======================================================================

$frmMain.Center
$frmMain.Show

While $frmMain.Visible
$=Execute($frmMain.DoEvents())
Loop

Exit(1)

Function fnOnTabChange(Optional $Folder)
Dim $objContainer
If $tabMain.SelectedIndex <> -1
If InStr($lblStatus.Text,"Enumerating") $lblStatus.Text = "" $prgProgress.Value = 0 EndIf
$ListView = $tabMain.TabPages($tabMain.SelectedIndex).Controls("ListView")
$lblStatus = $tabMain.TabPages($tabMain.SelectedIndex).Controls("lblStatus")
$prgProgress = $tabMain.TabPages($tabMain.SelectedIndex).Controls("prgProgress")
If $ListView.Items.Count = 0
$frmMain.Cursor = 11 $lblStatus.Text = "" $prgProgress.Maximum = 0
$objContainer = GetObject($ListView.Tag)
For Each $object in $objContainer $prgProgress.Maximum = $prgProgress.Maximum+1 Next
$lblStatus.Text = "Enumerating "+$prgProgress.Maximum+" objects..."
$btnCancel.Enabled = 1
For Each $object in $objContainer
If $ListView.Tag <> $objContainer.ADsPath or $btnCancel.Tag = 1 GOTO SkipEnum EndIf
Select
Case $object.Class = "organizationalUnit" $Icon = $o
Case $object.Class = "user" And $object.AccountDisabled $Icon = $ux
Case $object.Class = "user" And $object.IsAccountLocked $Icon = $ul
Case $object.Class = "user" $Icon = $u
Case $object.Class = "group" $Icon = $g
Case $object.Class = "computer" $Icon = $c
Case 1 $Icon = 45
EndSelect
$Item = $ListView.Items.Add(Split($object.Name,"=")[1],$Icon)
$Item.SubItems(1).Text = $object.Name
$Item.SubItems(2).Text = $object.Class
$Item.SubItems(3).Text = $object.PasswordLastChanged ;$object.Description
$prgProgress.PerformStep
$=Execute($frmMain.DoEvents(1))
Next
:SkipEnum
$btnCancel.Tag = 0 $btnCancel.Enabled = 0 $frmMain.Cursor = 0 $prgProgress.Value = 0
EndIf
Select
Case $ListView.View = 0 $btnView.Icon = 38
Case $ListView.View = 1 $btnView.Icon = 39
Case $ListView.View = 2 $btnView.Icon = 40
Case $ListView.View = 3 $btnView.Icon = 41
EndSelect
If $tabMain.TabPages($tabMain.SelectedIndex).Tag = ""
$tabMain.TabPages($tabMain.SelectedIndex).Tag = $ListView.Tag
$frmMain.Text = $ListView.Tag
EndIf
$lblStatus.Text = Split(Split($ListView.Tag,"=")[1],",")[0]+": "+$ListView.Items.Count+" object(s) listed"
$frmMain.Text = $ListView.Tag
$btnBack.Tag = $ListView.Tag
If $btnBack.Tag = $tabMain.TabPages($tabMain.SelectedIndex).Tag
$btnBack.Enabled = 0
Else
$btnBack.Enabled = 1
EndIf
EndIf
EndFunction

Function fnOnDoubleClick()
Dim $sItemADsPath
$sItemADsPath = "LDAP://"+$ListView.FocusedItem.SubItems(1).Text+","+Split($ListView.Tag,"//")[1]
$txtCopy.Text = $sItemADsPath
If $ListView.FocusedItem.SubItems(2).Text = "organizationalUnit" or
$ListView.FocusedItem.SubItems(2).Text = "container"
$ListView.Tag = $sItemADsPath
$ListView.Items.Clear
fnOnTabChange()
Else
If $MsgBox.Show($sItemADsPath+@CRLF+@CRLF+"Copy to clipboard?") = 6
$txtCopy.SelectionLength = Len($txtCopy.Text)
$txtCopy.Copy
EndIf
EndIf
EndFunction

Function fnOnBack()
Dim $aItemADsPath,$sItemADsPath
$aItemADsPath = Split(Split($ListView.Tag,"//")[1],",")
For $i = 1 to Ubound($aItemADsPath)
$sItemADsPath = $sItemADsPath + $aItemADsPath[$i] + ","
Next
$sItemADsPath = "LDAP://" + Left($sItemADsPath,LEN($sItemADsPath)-1)
$ListView.Tag = $sItemADsPath
$ListView.Items.Clear
fnOnTabChange()
EndFunction

Function fnRefresh()
$ListView.Items.Clear
fnOnTabChange()
EndFunction

Function fnCopy()
$txtCopy.Text = $ListView.Tag
$txtCopy.SelectionLength = Len($txtCopy.Text)
$txtCopy.Copy
EndFunction

Function fnView()
$ListView.View = $ListView.View + 1
Select
Case $ListView.View = 0 $btnView.Icon = 38
Case $ListView.View = 1 $btnView.Icon = 39
Case $ListView.View = 2 $btnView.Icon = 40
Case $ListView.View = 3 $btnView.Icon = 41
EndSelect
EndFunction



NTDOCAdministrator
(KiX Master)
2003-06-12 08:45 PM
Re: KiXforms - Active Directory Browser

Really nice KiXform there Chris.

I like it. Works well on my AD. No configuration changes or anything. Just copy the code to file and run it as is. [Cool]


Chris S.
(MM club member)
2003-06-12 08:55 PM
Re: KiXforms - Active Directory Browser

Thanks, Ron.

I just made an update to the script to fix an anchor problem with the progress bar. Was doing funky things when the form size was changed. I also updated the button layout slightly.


Radimus
(KiX Supporter)
2003-06-12 08:56 PM
Re: KiXforms - Active Directory Browser

I like it also

problem... I have lots of tabs and have to widen the form beyond the width of my screen to see them all...

other than that, grteat job.


Chris S.
(MM club member)
2003-06-12 09:00 PM
Re: KiXforms - Active Directory Browser

Rad, you should have some arrow buttons that you can use to navigate to the other tabs. They look something like this: [<][>]

If you don't have the arrow buttons, you may want to update to the latest version of KiXforms.

I'd prefer that the tabs "layer" when they extend beyond the edge of the object, but we take what we can get. [Wink]

Ron, can I talk you into hosting a screenshot for me? Maybe a XP version of the form?


kholm
(Korg Regular)
2003-06-12 11:18 PM
Re: KiXforms - Active Directory Browser

Thank You for sharing this Chris

This is worth studying for the use of KixForms (and the use of LDAP:)

I like your skip routine:
quote:

If $btnCancel.Tag = 1 GOTO SkipEnum EndIf

This can come in handy in many of my admin scripts for pausing or stopping the script.

-Erik

[ 12. June 2003, 23:32: Message edited by: kholm ]


Chris S.
(MM club member)
2003-06-12 11:34 PM
Re: KiXforms - Active Directory Browser

Yeah, tag is a new property that Shawn put in that the coder can use as a placeholder for data. I'm using it to hold information about the current CN/OU being browsed, to set the limit for the Back button, and (as you noted) to cancel the enumeration.

One can even set tag properties as an array to hold multiple sets of data.

The tags in this script allow the Back button to work independently for each tab. Switching tabs doesn't break the back button. You'll aways go back one level (up to the "root" container). [Smile]

[ 12. June 2003, 23:34: Message edited by: Chris S. ]


Chris S.
(MM club member)
2003-06-13 10:18 PM
Re: KiXforms - Active Directory Browser

Script update. Fixed ColorDepth issue with one of the icons. Optimized the code slightly.

enzosimoni
(Fresh Scripter)
2003-06-16 06:36 PM
Re: KiXforms - Active Directory Browser

When I try to run your script I get the following error.

error on line 5

When I set it to debug it errors out on

$frmMain.ClientSize = 1024,768

When I comment this out it errors out on line 32

$grpToolBar = $frmMain.GroupBox("",0,0,$frmMain.ClientWidth,30)

I downloaded the latest forms v 2.30b2

Anything else I need to do? I exploded the zip form onto my kixtart directory where I have all my other dlls

Thanks.


Chris S.
(MM club member)
2003-06-16 06:42 PM
Re: KiXforms - Active Directory Browser

You must register the KiXforms.dll. Go to run and type:

regsvr32 %path%\KiXforms.dll

Where %path% is the path to where you installed the KiXforms.dll.


enzosimoni
(Fresh Scripter)
2003-06-16 06:46 PM
Re: KiXforms - Active Directory Browser

Awesome!!!

Kdyer
(KiX Supporter)
2003-06-17 04:41 PM
Re: KiXforms - Active Directory Browser

Chris,

Very cool indeed!

A couple of ideas..
(1) Where you click the tab for say Computers or Users, add in a count of objects found. That way, when you open Computers, for example, you see 2100 objects found.

(2) Where you give the "Information.." dialog, it would be cool to be able to copy the LDAP://CN=.. to the clipboard for usage later.

(3) This is a good application for top-level objects. Maybe have a "tree" structure where you can traverse the objects downward.

Again, I can see some really good uses for this.

Kent

[ 17. June 2003, 16:43: Message edited by: kdyer ]


Chris S.
(MM club member)
2003-06-17 05:02 PM
Re: KiXforms - Active Directory Browser

Thanks, Kent.

On (1) & (2), those are definitely doable. I'd thought about copying to clipboard but didn't implement it. I'll work on it and have these implemented later this afternoon.

Regarding (3), you can currently browse OU's and Containers. Just double-click to browse your sub-containers. As far as the "tree" goes, I could spoof something, but I'd prefer to wait until Shawn implements the TreeView object.


Kdyer
(KiX Supporter)
2003-06-17 06:52 PM
Re: KiXforms - Active Directory Browser

I see what you mean.. You can traverse (my bad). Eagerly awaiting TreeView.. I can see this being better than AD Users and computers. [Wink]

Kent


Chris S.
(MM club member)
2003-06-17 09:15 PM
Re: KiXforms - Active Directory Browser

Ok. Added a Status label that will display the number of objects in the container you are browsing. This is the total objects in the container. Clicking the "cancel" button will not affect the object count in the label.

Added two methods to copy information to the clipboard.
  • Copy ToolButton - This button will copy the LDAP ADsPath into the clipboard for the current container you are browsing.
  • Double-click Object - By double-clicking an object (i.e. a User account) you will be prompted with a message box asking you if you want to copy the ADsPath onto the clipboard.


Kdyer
(KiX Supporter)
2003-06-17 10:04 PM
Re: KiXforms - Active Directory Browser

Sweet..

Looks great.

Another thing would be kinda cool would be to search for an object.

Kent


Chris S.
(MM club member)
2003-06-17 10:21 PM
Re: KiXforms - Active Directory Browser

I knew you'd go there.

Seach entire AD or just the current container? Search on Name or other properties? Keep in mind that this is mostly for informational purposes. I didn't plan on making a replacement for AD Users & Computers. [Wink] [Razz]

I suppose next you'll want a filter. [Roll Eyes]

How about, for now, a button to change the view? I've updated the script with a View button.

Enjoy. [Big Grin]


NTDOCAdministrator
(KiX Master)
2003-06-17 11:25 PM
Re: KiXforms - Active Directory Browser

Chris, Chris... you da man [Big Grin]

I'm really liking the developments on this tool.

I would like to add another suggestion.

Maybe have an option that allows you to build the full path as a little more useful copy.

Currently copies as:
LDAP://CN=name,OU=Users,OU=test,OU=temp,DC=westcoast,DC=mycompany,DC=com

What about copying as:
GetObject('LDAP://CN=name,OU=Users,OU=test,OU=temp,DC=westcoast,DC=mycompany,DC=com')

That would allow a direct paste into an editor for immediate usage.


NTDOCAdministrator
(KiX Master)
2003-06-17 11:30 PM
Re: KiXforms - Active Directory Browser

Chris,

I did find a minor bug. If you change tabs while the objects are being enumerated it shows the objects in the window of the new tab.

i.e. You are in the OU for Users, you switch to Computers, but instead of canceling the enum of the computers or clearing the tab it carries the ojects already enumed to the new tab.

Then if you switch too fast between objects you can even get it into an endless loop.

Need to somehow determine when the user has changed the TAB and cancel ALL operations and caching of the previous tab.


Chris S.
(MM club member)
2003-06-18 03:39 PM
Re: KiXforms - Active Directory Browser

Ok, Doc. I fixed the Enum/Switch tabs bug.

I also updated the label and the progress bar to attach to the TabPage instead of the form. This allows the status label to always be correct for the currently selected tab.

quote:

What about copying as:
GetObject('LDAP://CN=name,OU=Users,OU=test,OU=temp,DC=westcoast,DC=mycompany,DC=com')

That would allow a direct paste into an editor for immediate usage.

Others may want to use the string as a variable or in a function and may not want the GetObject() stuff. So, I'm going to leave it as is.


ShawnAdministrator
(KiX Supporter)
2003-06-19 02:22 PM
Re: KiXforms - Active Directory Browser

This routine is interesting ...

code:
If Exist("%WINDIR%\System32\dsuiext.dll")
$imgList.Images.Add("dsuiext.dll;1") $c=64
$imgList.Images.Add("dsuiext.dll;7") $g=65
$imgList.Images.Add("dsuiext.dll;12") $u=66
$imgList.Images.Add("dsuiext.dll;13") $o=67
$imgList.Images.Add("dsquery.dll;0")
$frmMain.Icon = $imgList.Images(68)
Else
$c=53 $g=35 $u=34 $o=50
EndIf

And I already know, that Chris knows, that as soon as the next batch of icons get added to the library, that this code will not work as expected. Going to add something in the next build that will fix this situation forever. The ImageList.Images.Add() function will return the index number of the added icon, so the above code becomes ...

code:
If Exist("%WINDIR%\System32\dsuiext.dll")
$c = $imgList.Images.Add("dsuiext.dll;1")
$g = $imgList.Images.Add("dsuiext.dll;7")
$u = $imgList.Images.Add("dsuiext.dll;12")
$o = $imgList.Images.Add("dsuiext.dll;13")
$f = $imgList.Images.Add("dsquery.dll;0")
$frmMain.Icon = $imgList.Images($f)
Else
$c=53 $g=35 $u=34 $o=50
EndIf

-Shawn

[ 19. June 2003, 14:23: Message edited by: Shawn ]


Chris S.
(MM club member)
2003-06-20 06:10 PM
Re: KiXforms - Active Directory Browser

Update to script to fix minor issues.
  • Status label would not display the proper amount of objects if the tab was changed while enumerating.
  • View button now displays the correct view icon for the currently selected tab.
Shawn, thanks for updating the next version with the Images.Add index. If you didn't want to make that change, however, one could aways do this...


If Exist("%WINDIR%\System32\dsuiext.dll")
    $imgList.Images.Add("dsuiext.dll;1"$c=$imgList.Images.Count-1
    $imgList.Images.Add("dsuiext.dll;7"$g=$imgList.Images.Count-1
    $imgList.Images.Add("dsuiext.dll;12"$u=$imgList.Images.Count-1
    $imgList.Images.Add("dsuiext.dll;13"$o=$imgList.Images.Count-1
    $imgList.Images.Add("dsquery.dll;0"$f=$imgList.Images.Count-1
    $frmMain.Icon = $imgList.Images($f)
Else
    $c=53 $g=35 $u=34 $o=50
EndIf



As always, I leave the decision to you.


ShawnAdministrator
(KiX Supporter)
2003-06-20 06:12 PM
Re: KiXforms - Active Directory Browser

Clever work-around. I love this script ! The change has already been done though.

Kdyer
(KiX Supporter)
2003-06-20 07:22 PM
Re: KiXforms - Active Directory Browser

Chris,

Looks like we may have an issue here..

I have 12 kdyer computer accounts (RIS).

A couple of weeks ago, corporate reduced the number of Domain Admins from 37 to 8. However, I have elevated privaleges to delete, reset, edit scripts, etc. Noticed in your script, I try to delete one of the RIS accounts and the delete option is not available.

I can go into AD Users and computers and do this fine.

Kent


Chris S.
(MM club member)
2003-06-20 07:39 PM
Re: KiXforms - Active Directory Browser

Well, I haven't added any functionality to act on objects within the browser other than to copy the ADsPath onto the clipboard for pasting into other scripts.

It was not really meant to replace AD Users & Computers as a tool to manipulate one's AD environment. While I could certainly do that, I don't see the value in it since it would mirror the AD Users & Computers tool. Seems redundant to me.

If you (or others) can convince me that there are other uses for this application or some that there are things missing from AD Users & Computers that could be scripted into this app, well... I suppose I could be talked into further development.


Kdyer
(KiX Supporter)
2003-06-20 08:54 PM
Re: KiXforms - Active Directory Browser

I think this is so cool.. It should not matter what the application is, there should be no issue is deleting an object, resetting password, etc.

Adding those pieces to your application would be pretty cool too. I know that Ben - http://www.rgcweb.org/kix/ has a pretty extensive user management tool as well.

Kent


Chris S.
(MM club member)
2003-06-20 09:03 PM
Re: KiXforms - Active Directory Browser

Well, to be honest you got me thinking and I may have come up with a few things to make it a little more useful than AD Users & Computers.

For example...

I can check if an account is locked and display a different icon for that account. That way you have a visual indication of accounts that are locked. You could then quickly (maybe even from a context menu) identify and unlock it.

I've already (in my test script, not the version listed here) updated the user icons to display a different icon for disabled accounts and locked accounts.

So... I guess you've talked me into some further development. I'll work on it as I get the time. In the meantime, think about and post ideas on how to make it better. [Big Grin]


ShawnAdministrator
(KiX Supporter)
2003-08-09 11:30 PM
Re: KiXforms - Active Directory Browser

It Works !!! WooooHoooooo !!!!!!

But now I got another problem. When I resize the form, the toolbar and the buttons at the top go all funny ...

-Shawn

By the way, I am using Kixforms 2.3.0 Beta 4

hehee

[ 09. August 2003, 23:31: Message edited by: Shawn ]


Sealeopard
(KiX Master)
2003-08-10 08:02 PM
Re: KiXforms - Active Directory Browser

Might be a KiXforms bug. [Frown]
You should complain to the KiXforms creator [Wink]


NTDOCAdministrator
(KiX Master)
2004-11-08 06:45 PM
Re: KiXforms - Active Directory Browser

Chris,

It's been about a year now. Have you added any new good stuff to this form?


Chris S.
(MM club member)
2004-11-08 10:56 PM
Re: KiXforms - Active Directory Browser

Hmm. Not lately. I was working on a version with a treeview that used ADODB to query the AD information that was much faster than using the native LDAP provider, but that has been a while.

I might be persuaded to dust off the code if you guys had some feature requests.


NTDOCAdministrator
(KiX Master)
2004-12-09 10:02 AM
Re: KiXforms - Active Directory Browser

Has any of the Dust settled yet Chris

maciep
(Korg Regular)
2005-05-05 05:38 PM
Re: KiXforms - Active Directory Browser

This could be a start for anyone that's willing to run with it...

Split Container and AD


Shaba1
(Fresh Scripter)
2007-01-06 02:51 PM
Re: KiXforms - Active Directory Browser

I know this is and old post chris but I wanted to ask you some questions once I read thru all 4 pages of it. And I could not find another way of adding it to my subscribed threads list

Chris S.
(MM club member)
2007-01-08 03:54 PM
Re: KiXforms - Active Directory Browser

Shaba, thats cool. Ask away. Before you do, you might want to give the newer version a look:

http://www.kixtart.org/forums/ubbthreads.php?ubb=showflat&Number=144960&page=1#Post144960