#Requires -version 3 <# .Synopsis Find the distinguishedName of AD User, Computer, and Group objects. .DESCRIPTION This script gets the DistinguishedName of User, Computer, and Group Objects by searching the forest. It does not depend on the ActiveDirectory Module .PARAMETER ADObject Required input object. Computer or group name, User SamAccountName .PARAMETER ADObjectType Required input object, select from User, Computer or Group .NOTES 12/24/21 public version Alan Kaplan, www.akaplan.com .EXAMPLE .\Find-ADObject.ps1 $env:USERNAME -ObjectType User Find the DistinguishedName of current user .EXAMPLE .\Find-ADObject.ps1 -adobject 'MyGroup' -ADObjectType Group Find the DistinguishedName of MyGroup #> [CmdletBinding()] Param ( # ADObject: Computer or group name, User SamAccountName [Parameter(Mandatory = $true, Position = 0)] $adobject, # ADObjectType - User, group or description [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, ValueFromRemainingArguments = $false, Position = 1, ParameterSetName = 'PS1')] [ValidateNotNull()] [ValidateNotNullOrEmpty()] [ValidateSet("User", "Computer", "Group")] $ADObjectType ) $searchRoot = [system.directoryservices.activedirectory.forest]::GetCurrentForest().Name.ToString() $SearchPath = "GC://" + $SearchRoot $de = New-Object System.DirectoryServices.DirectoryEntry($SearchPath) $ds = New-Object System.DirectoryServices.DirectorySearcher $ds.SearchRoot = $de switch ($PSBoundParameters.item('ADObjectType')) { 'Computer' { $ds.Filter = "(&(objectCategory=computer)(objectClass=computer)(Name=$adobject))" Break } 'User' { $ds.Filter = "(&(objectCategory=Person)(objectClass=User)(|(SamAccountName=$adobject)(userprincipalname=$adobject)))" Break } 'Group' { #Include dynamic distribution $ds.filter = "(&(|(Name=$adobject)(cn=$adObject)(SamAccountName=$adObject))(|(objectClass=Group)(objectClass=msExchDynamicDistributionList)))" } } $ds.SearchScope = "SubTree" $retval = $ds.FindAll() if ($retval.count -gt 0) { if ($retval.count -gt 1) { Write-Host "$($retval.count) found." -ForegroundColor Green } $Retval | ForEach-Object { [PSCustomObject]@{ DistinguishedName = $_.Properties.distinguishedname[0] } } } ELSE { Write-Warning "$adobject Not Found" }