;FUNCTION InContainer()
;
;AUTHOR
; Howard A. Bullock (hbullock@tycoelectronics.com)
;
;VERSION
; 1.6
;
;DATE
; 20-Mar-2002
;REVISED
; 04-Apr-2005
; 08-Apr-2009 - Mart - Added userid parameter.
;
;ACTION
; Determines if the current NT4 account name type is a member of a specific container (OU, Computers, etc)
; in Active Directory
;
;SYNTAX
; InContainer ($Container, $NameType, $userid)
;
;PARAMETERS
; $Container (Required)
; - String value
; Dinstinghished name of the container to check. This must be the fully qualified DN to
; accurately make a determination.
;
; $NameType (Required)
; - String value
; "Computer" or "User" are currently the only valid values
;
; $Userid (Optional)
; - The username to check.
; If none is specified @userid is assumed.
;
;REMARKS
; This function returns true if the object being checked in the the specified container
; or a child container of that specified.
;
;RETURNS
; An ARRAY of three values:
; InContainer return code
; 1 = object is a member of the exact container specified.
; 2 = object is a member of the container hierarchy.
; 0 = object is not a member of the container hierarchy.
; -1 = Invalid input for $NameType
; -2 = Error in TranslateName
; TranslateName ErrorCode
; TranslateName ErrorText
;
;DEPENDENCIES
; OS: Active Directory aware client
; Other Functions: TranslateName()
;
;EXAMPLES
; $rc = InContainer ("OU=test,OU=9826,OU=NCS,OU=Machines,DC=us,DC=tycoelectronics,DC=com", "Computer")
; select
; case $rc[0]=1
; ? "object is a member of the specified container."
; case $rc[0]=2
; ? "object is a member of a child container lower in the hierarchy."
; case $rc[0]=0
; ? "object is NOT a member of this container or a child of this container."
; case $rc[0]=-1
; ? "InContainer() Error - Invalid input for $NameType "
; case $rc[0]=-2
; ? "TranslateName() Error"
; case 1
;? "Unknown return code"
; endselect
;
Function InContainer($Container, $NameType, optional $userid)
Dim $CurrentContainer, $Name1, $Name2, $Found, $commaloc
If Trim($userid) = ""
$userid = @USERID
EndIf
Select
Case $NameType = "Computer" $Name1 = @Domain + "\" + @wksta + "$$"
Case $NameType = "User" $Name1 = @LDomain + "\" + $userid
;Case $NameType = "User" $Name1 = @LDomain + "\" + @UserID
Case 1 $Name1 = ""
EndSelect
If $Name1 <> ""
$Name2 = TranslateName(3, "", 3, $Name1, 1)
If $Name2[1] = 0
$Found = 0
While $Found = 0
$commaloc = InStr($Name2[0], ",")
If $commaloc > 1
If SubStr($Name2[0], $commaloc - 1, 1) = "\"
$Name2[0] = SubStr($Name2[0], $commaloc + 1)
Else
$Found = 1
$CurrentContainer = SubStr($Name2[0], $commaloc + 1)
EndIf
Else
$Found = 1
EndIf
Loop
Select
Case $CurrentContainer = $Container $InContainer = 1, $Name2[1], $Name2[2]
Case InStr($Name2[0], $Container) $InContainer = 2, $Name2[1], $Name2[2]
Case 1 $InContainer = 0, $Name2[1], $Name2[2]
EndSelect
Else
$InContainer = -2, $Name2[1], $Name2[2]
EndIf
Else
$InContainer = -1, 0, ""
EndIf
EndFunction