Les GPO ne s'appliquent pas ; raison : Inaccessible, Vide ou Désactivé ; Server 2012 R2 et Windows 10

J’ai un domaine Windows Server 2012 R2.

Hier, le lecteur réseau d’un ordinateur (exécutant Windows 10 Pro) a cessé de fonctionner.

Après investigation supplémentaire (gpresult /h), il apparaît que TOUS les objets de stratégie de groupe échouent avec le motif Inaccessible, Empty, or Disabled.

J’ai confirmé que toutes les GPO existent toujours et sont activées sur les deux contrôleurs de domaine (redondants et locaux). De plus, il y a 20 autres machines sur le même domaine et le même réseau local sans aucun problème.

Cependant, il y a un autre ordinateur que j’ai testé et qui présentait le même problème ! Cela signifie-t-il que le problème vient des serveurs ?

gpresult /r rapporte qu’un client obtient les GPO depuis DC1 local, et l’autre depuis DC2. Ce n’est donc pas un problème lié à un DC spécifique.

gpupdate /force n’a rien corrigé (bien qu’il prétendait que les stratégies avaient été appliquées).

J’ai essayé de supprimer les entrées de registre pour les stratégies locales (en suivant ce guide https://superuser.com/questions/379908/how-to-clear-or-remove-domain-applied-group-policy-settings-after-leaving-the-do) et de redémarrer — même problème.

J’ai trouvé cette page de support Microsoft (https://support.microsoft.com/en-us/kb/2976965), mais elle prétend ne s’appliquer qu’aux clients Windows 7 ou antérieurs.

Toutes mes machines (serveur et client) exécutent des versions 64 bits et sont entièrement à jour. Je les ai toutes redémarrées pour être sûr.


Source : [Server Fault](https://superuser.com/questions/379908/how-to-clear-or-remove-domain-applied-group-policy-settings-after-leaving-the-do](https://superuser.com/questions/379908/how-to-clear-or-remove-domain-applied-group-policy-settings-after-leaving-the-do)

Vérifiez le correctif mentionné par joeqwerty dans ce lien.

Voici le détail important :

Problèmes connus

MS16-072 modifie le contexte de sécurité avec lequel les stratégies de groupe utilisateur sont récupérées. Ce changement de comportement intentionnel protège les ordinateurs des clients contre une vulnérabilité de sécurité. Avant l’installation de MS16-072, les stratégies de groupe utilisateur étaient récupérées en utilisant le contexte de sécurité de l’utilisateur. Après l’installation de MS16-072, les stratégies de groupe utilisateur sont récupérées en utilisant le contexte de sécurité de la machine. Ce problème s’applique aux articles KB suivants :

  • 3159398 MS16-072 : Description de la mise à jour de sécurité pour les stratégies de groupe : 14 juin 2016

  • 3163017 Mise à jour cumulative pour Windows 10 : 14 juin 2016

  • 3163018 Mise à jour cumulative pour Windows 10 Version 1511 et Windows Server 2016 Technical Preview 4 : 14 juin 2016

  • 3163016 Mise à jour cumulative pour Windows Server 2016 Technical Preview 5 : 14 juin 2016

Symptômes

Toutes les stratégies de groupe utilisateur, y compris celles qui ont été filtrées par sécurité sur des comptes utilisateurs ou des groupes de sécurité, ou les deux, peuvent ne pas s’appliquer sur les ordinateurs joints au domaine.

Cause

Ce problème peut se produire si l’objet de stratégie de groupe ne dispose pas des permissions de lecture pour le groupe Utilisateurs authentifiés ou si vous utilisez le filtrage de sécurité et qu’il manque les permissions de lecture pour le groupe Ordinateurs du domaine.

Résolution

Pour résoudre ce problème, utilisez la Console de gestion des stratégies de groupe (GPMC.MSC) et suivez l’une des étapes suivantes :

- Ajoutez le groupe Utilisateurs authentifiés avec les permissions de lecture sur l’objet de stratégie de groupe (GPO).

- Si vous utilisez le filtrage de sécurité, ajoutez le groupe Ordinateurs du domaine avec la permission de lecture.

Consultez ce lien Déployer MS16-072 qui explique tout et propose un script pour réparer les GPO affectées. Le script ajoute les permissions de lecture des Utilisateurs authentifiés à toutes les GPO qui n’ont pas de permission pour les Utilisateurs authentifiés.

# Copyright (C) Microsoft Corporation. All rights reserved.

$osver = [System.Environment]::OSVersion.Version
$win7 = New-Object System.Version 6, 1, 7601, 0

if($osver -lt $win7)
{
    Write-Error "OS Version is not compatible for this script. Please run on Windows 7 or above"
    return
}

Try
{
    Import-Module GroupPolicy
}
Catch
{
    Write-Error "GP Management tools may not be installed on this machine. Script cannot run"
    return
}

$arrgpo = New-Object System.Collections.ArrayList

foreach ($loopGPO in Get-GPO -All)
{
    if ($loopGPO.User.Enabled)
    {
        $AuthPermissionsExists = Get-GPPermissions -Guid $loopGPO.Id -All | Select-Object -ExpandProperty Trustee | ? {$_.Name -eq "Authenticated Users"}
        If (!$AuthPermissionsExists)
        {
            $arrgpo.Add($loopGPO) | Out-Null
        }
    }
}

if($arrgpo.Count -eq 0)
{
    echo "All Group Policy Objects grant access to 'Authenticated Users'"
    return
}
else
{
    Write-Warning  "The following Group Policy Objects do not grant any permissions to the 'Authenticated Users' group:"
    foreach ($loopGPO in $arrgpo)
    {
        write-host "'$($loopgpo.DisplayName)'"
    }
}

$title = "Adjust GPO Permissions"
$message = "The Group Policy Objects (GPOs) listed above do not have the Authenticated Users group added with any permissions. Group policies may fail to apply if the computer attempting to list the GPOs required to download does not have Read Permissions. Would you like to adjust the GPO permissions by adding Authenticated Users group Read permissions?"

$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", `
    "Adds Authenticated Users group to all user GPOs which don't have 'Read' permissions"
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", `
    "No Action will be taken. Some Group Policies may fail to apply"
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
$result = $host.ui.PromptForChoice($title, $message, $options, 0)
$appliedgroup = $null
switch ($result)
{
    0 {$appliedgroup = "Authenticated Users"}
    1 {$appliedgroup = $null}
}
If($appliedgroup)
{
    foreach($loopgpo in $arrgpo)
    {
        write-host "Adding 'Read' permissions for '$appliedgroup' to the GPO '$($loopgpo.DisplayName)'."
        Set-GPPermissions -Guid $loopgpo.Id -TargetName $appliedgroup -TargetType group -PermissionLevel GpoRead | Out-Null
    }
}

Si vous préférez définir la permission de lecture pour les Ordinateurs du domaine (comme moi) plutôt que les Utilisateurs authentifiés, changez simplement 0 {$appliedgroup = "Authenticated Users"} en 0 {$appliedgroup = "Domain Computers"}