Remove a String from a Multi-Valued Attribute
Happy to Help
This week a friend asked for a little extra-vocational assistance. A multi-valued attribute in Active Directory, populated on for a large number of users objects, contained an entry in a non-standard format. To make things interesting, whilst the non-standard format was the same for each user, the information contained within each entry was different. To make things even more interesting, there were a number of legitimate entries that needed maintaining.
More Context
A multi-valued attribute, as the name suggests, can contain multiple values. The one in question was proxyAddresses . It can contain a number of strings representing stuff to do with Microsoft Exchange.
The Challenge
Find all users that have a proxyAddresses entries starting with " : " and then remove the whole string. Ensure the code works with v2 of PowerShell.
The Solution
$users = Get-ADUser -Filter {ProxyAddresses -like ":*"} -Properties ProxyAddresses
if ($users) {
foreach ($user in $users) {
$OddProxies = $user.ProxyAddresses | where-object {$_ -like ":*"}
foreach ($OddProxy in $OddProxies) {
Set-ADUser -Identity $user -Remove @{ProxyAddresses = "$($OddProxy)"}
}
}
}
An Explanation
First search for any users that have a proxy address entry starting with " : ".
Request the proxyAddresses property and store the results in $users.
If $users is populated, loop through each user object found. Each user object iteration will be represented as $user.
For each user identify the non-standard formatting by using a where object filter on " : ". The whole string of each user's non-standard entry is then stored in the $OddProxies array. We create an array to allow for the fact that more than one entry might be found.
Now, loop through the $OddProxies array and run Set-ADUser for each non-standard entry. $OddProxy is the current iteration in the loop. The -Remove parameter is used to remove anything that matches the current $OddProxy iteration. The other entries are maintained.
Comments
- Anonymous
May 22, 2015
Thanks - Anonymous
November 20, 2015
This is great! Thank you - Anonymous
November 20, 2015
This is great! Thank you - Anonymous
August 22, 2017
This is very nice script, but {ProxyAddresses -like ":"} should be {ProxyAddresses -like ":*"}