You don’t have to rely on the Group Policy Module to resolve the display name of a GPO from the GUID, or the GUID from the display name. Here are two short functions that will get that information from Active Directory. The first will return the GPO displayname attribute from a GUID. The GUID (sometimes called the ID), can be entered with or without the surrounding curly brackets.
Function Get-GPODisplayName($domain,$Guid){ #Easier to later add braces in filter $GUID = [regex]::Replace($GUID,"{|}",'') $SearchRoot = "LDAP://$domain" $filter = "(&(objectCategory=groupPolicyContainer)(name={$GUID})) " $ADSearcher = [adsisearcher] '' $ADSearcher.SearchRoot = $SearchRoot $ADSearcher.SearchScope = "SubTree" $ADSearcher.CacheResults = $false $adSearcher.ReferralChasing = "All" $ADSearcher.Filter = $filter $retval = $ADSearcher.FindOne() if ($retval) { $retval.Properties.displayname[0] } ELSE { 'Unable to Determine' } }
The second function does the reverse, returning the GUID from the DisplayName:
Function Get-GPOGUID($domain,$DisplayName){ $SearchRoot = "LDAP://$domain" $filter = "(&(objectCategory=groupPolicyContainer)(Displayname=$DisplayName))" $ADSearcher = [adsisearcher] '' $ADSearcher.SearchRoot = $SearchRoot $ADSearcher.SearchScope = "SubTree" $ADSearcher.CacheResults = $false $adSearcher.ReferralChasing = "All" $ADSearcher.Filter = $filter $retval = $ADSearcher.FindOne() if ($retval) { $retval.properties['Name'] } ELSE { 'Unable to Determine' } }
The domain parameter should be the DNS Domain root, not the NetBIOS or short name.