Active Directory - Parsing a 'Multi-Line' Description Property
Interesting one this...
A customer had some information they needed to obtain from the description property on an object. The information was 'multi-valued' and saved as a Unicode string. What am I talking about?
Here's the string in the attribute editor of Active Directory Users and Computers (note the ';' delimiter):
Here it is in the Multi-valued String Editor:
Here's what happens when the object is retrieved with PowerShell:
What happened to those other values?!
Take a look at the description of the object in the GUI:
What happened to those other values?!
The customer wanted to search the 'multi-valued' description for a particular string. Obviously, the bit they wanted to check wasn't in the description returned by Get-ADObject! What to do?
[adsisearhcer] Saves the Day!
$Search = 'sweetdreams*'
$Objects = Get-ADObject -SearchBase "CN=Policies,CN=System,DC=halo,DC=net" -SearchScope OneLevel -Filter {Description -like "*"}
foreach ($Object in $Objects) {
$MultiDescription = ([adsisearcher]"(distinguishedname=$($Object.DistinguishedName))").FindOne().properties.description
if ($MultiDescription -like $Search) {
$Found = $MultiDescription -split " " | Select-String $Search
Write-Output $Found
}
}
The interesting bits:
- Get-ADObject returns any objects from the Policies container that have a populated description
- These are saved to an array and then checked individually
- [adsisearcher] is used to connect to the individual object and pull back the 'multi-valued' description property - $MultiDescription
- This is then split by value and checked for a particular string
- If matched the value will be returned as the contents of $Found
Fun in the [adsisearcher] type accelerator sun!