N’avez-vous jamais eu besoin de rechercher la présence d’un réglage précis dans l’ensemble de vos GPO ?
Personnellement, c’est un besoin que je rencontre très régulièrement lorsque je travaille avec des clients sur de très gros environnements Active Directory. Parfois, même les entreprises elles-mêmes avouent avoir perdu le contrôle et le suivi sur les GPO qui sont créées au sein de leur environnement. Si bien qu’il est parfois possible de découvrir des réglages qui sont appelés plusieurs fois ou même qui s’opposent au sein d’un même domaine Active Directory.
Malheureusement, il n’existe pas de moteur de recherches dans la GPMC (en tout cas pas nativement). Et pourtant, qu’est-ce que ça serait pratique, je vous laisse imaginer le Google de vos GPO directement dans la console… ça serait parfait. Mais bon, comme ça n’arrivera peut-être jamais, il faut bien trouver une solution alternative. 🙂
Je vous propose d’utiliser le script PowerShell suivant pour rechercher la présence d’un terme spécifique au sein de l’ensemble de vos GPO d’un domaine Active Directory spécifique :
# Get the string we want to search for
$string = Read-Host -Prompt "What string do you want to search for?"
# Set the domain to search for GPOs
$DomainName = $env:USERDNSDOMAIN
# Find all GPOs in the current domain
write-host "Finding all the GPOs in $DomainName"
Import-Module grouppolicy
$allGposInDomain = Get-GPO -All -Domain $DomainName
[string[]] $MatchedGPOList = @()
# Look through each GPO's XML for the string
Write-Host "Starting search...."
foreach ($gpo in $allGposInDomain) {
$report = Get-GPOReport -Guid $gpo.Id -ReportType Xml
if ($report -match $string) {
write-host "********** Match found in: $($gpo.DisplayName) **********" -foregroundcolor "Green"
$MatchedGPOList += "$($gpo.DisplayName)";
} # end if
else {
Write-Host "No match in: $($gpo.DisplayName)"
} # end else
} # end foreach
write-host "`r`n"
write-host "Results: **************" -foregroundcolor "Yellow"
foreach ($match in $MatchedGPOList) {
write-host "Match found in: $($match)" -foregroundcolor "Green"
}
Le script n’est pas de moi et vous pouvez retrouver la publication originale sur l’article suivant (en anglais) : Search all GPOs in a domain for some text.
Assurez-vous par contre d’exécuter ce script sur une machine qui dispose de la GPMC. Si ce n’est pas le cas, pensez à l’installer sinon il ne fonctionnera pas ! 😉
Une fois que c’est fait, il vous suffit de l’exécuter dans une invite de commandes PowerShell ou bien l’ISE. La seule question qu’il va vous poser est le mot que vous recherchez. Et là, vous pourrez remplacer par un élément de réglage que vous cherchez.
Ce script est idéal si vous cherchez à résoudre les conflits et trouver les réglages qui sont appelés à plusieurs reprises dans différentes GPO.
Vous retrouverez également une seconde alternative de script PowerShell en consultant le second lien suivant (toujours en anglais) : Searching a GPO for a specific setting with Powershell.
else : Le terme «else» n’est pas reconnu comme nom d’applet de commande, fonction, fichier de script ou programme
exécutable. Vérifiez l’orthographe du nom, ou si un chemin d’accès existe, vérifiez que le chemin d’accès est correct
et réessayez.
Il faudrait que vous vérifiez que votre copié-collé a bien fonctionné et qu’il n’y aurait pas une erreur de guillemets par exemple (simple ou double). A défaut, il est possible que cela vienne du fait que vous utilisez une machine en FR mais je viens de retester et ça fonctionne de mon côté.