troubleshooting Question

GAL/Powershell: Traverse within an OU and set customattribute = OU

Avatar of ThinkPaper
ThinkPaperFlag for United States of America asked on
ExchangeActive DirectoryPowershell
6 Comments2 Solutions940 ViewsLast Modified:
Experts -

Need some assistance hashing out this script. =)

We get a regular import of contacts from an external source. These mailcontacts are sorted by OU, and the entire GAL dump (OU and contacts) are controlled by the external source (they have a service account with us).

So what we get is a dump of contacts organized by OU in our AD structure - so the OU structure for this dump looks like:

boo.com
- External Contacts (root OU)
  - Dairy
    Head.Honcho@dairy.com
     - Milk
         John.Smith@milk.com
         Carrie.Underwood@milk.com
         Super.Man@cows.com
     - Cheeses
         Steve.Carrell@cheeses.com
       - Hard Cheese
           Whoopi.Goldberg@hardcheese.com
       - Soft Cheese
           John.Stamos@softcheese.com
           Jeff.Goldblum@softcheese.com
  - Meats
  john.hancock@meats.com
    - Red Meat
     bobby.flay@redmeat.com
     jennifer.gray@superdome.com

Contacts within the OUs do NOT always have the same email domain.

We need to make our own address lists to reflect the OU structure. What I was planning on doing was to make a powershell script to set the "customattribute1" field equal to their OU. We would then use the custom attribute field to create the appropriate address lists.

This Powershell command works by itself for 1 OU:

Get-Mailcontact -OrganizationalUnit "OU=Milk,OU=Dairy,OU=External Contacts,DC=boo,DC=com" -ResultSize Unlimited | Where {$_.CustomAttribute1 -eq "$null"} | Set-Mailcontact -CustomAttribute1 "milk"

However, I want to automate this a little bit more. Instead of having to run the same commands 50 times for 50 OUs, I'd like to create a powershell script to:
1) Traverse through the "External Contacts"
2) In each OU
3) Look at each mailcontact
4) If customattribute1 is blank, set customattribute1 for each contact equal to the OU
5) Move to next contact/OU

I would think this should be relatively simple, but I am still not familiar enough with PowerShell to figure this out.

THANK YOU!! =)
ASKER CERTIFIED SOLUTION
Subash Sundharan
IT Infrastructure Architect

Our community of experts have been thoroughly vetted for their expertise and industry experience.

Join our community to see this answer!
Unlock 2 Answers and 6 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 2 Answers and 6 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros