I'm trying to write a onPreModify script that restricts the type of objects being added to certain groups. I don't want contact entries in certain groups.
I've used the functions available here: PowerShell Library Source Code
I test is the member attribute has changed for what I considered a managed group. On additions, I get the LDAP path to the object ($v):
Function isMgdGroup2($Request) { If ( IsObjectClassRequested("group", $Request) -eq $false ) { log $([string]::Format("{0} is not a group", $Request.name)) Return $false } $groupType = GetAttribute("groupType", $Request) log $([string]::Format("{0} has a group type of {1}", $Request.name, $groupType)) If ( $groupType -eq $DSGroup ) { log $([string]::Format("{0} is a global group", $Request.name)) return $true } elseif ( $groupType -eq $UGGroup ) { If ( $Request.name.startswith("UA-A-") ) { Return $false } Else { Return $true } } Else { Return $false } } function onPreModify($Request) { if (IsAttributeModified("member", $Request)) { If ( isMgdGroup2($Request) ) { for ($i = 0; $i -lt $Request.PropertyCount; $i++) { $item = $Request.Item($i) if ($item.name -eq "member" -and $item.ControlCode -eq $ADS_PROPERTY_APPEND ) { foreach( $val in $item.Values ) { $path = $val } } } } }
What I want to do is verify the object is a user. I've tried using System.DirectoryServices.DirectoryEntry. For example
function isContactObj([string]$path) { $obj = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$path") if ($obj.objectClass.Contains("contact")) { return $true #contact object } else { return $false #not } }
The problem I have is ARS manages two domains that are not in the same forest. The ARS server is in domain A. When I create a new DirectoryEntry() object for a Domain A group, it works. When I try to do this for Domain B, it doesn't. It returns null. Get-ADUser seems to work if I specify the domain using -Server. I could do something like:
If ($path.endswith("dc=domaina,dc=company,dc=com")) Then $server = domaina.company.com } else { $server = domainb.company.com }
Is there a better way to handle this in ARS?