À medida que uma organização cresce, também cresce seu ambiente de Active Directory (AD) e infraestrutura de Group Policy (GP). Os objetos de Group Policy (GPOs) podem logo ficar fora de controle e, antes que você perceba, terá dezenas de GPOs desvinculados que estão bagunçando seu ambiente. Vamos mudar isso.
Neste tutorial, você aprenderá como descobrir todos esses GPOs desvinculados tanto com o Group Policy Management Console (GPMC) quanto com o PowerShell.
Vamos lá!
Pré-requisitos
Este artigo será um tutorial com exemplos práticos. Se você quiser acompanhar, certifique-se de ter:
- Um domínio de Active Directory. Este artigo usará um domínio chamado HomeLab.Local.
- A Windows computer joined to the AD domain. This tutorial will use Windows 10.
- O computador Windows tem o pacote Remote Server Administration Tools (RSAT) instalado.
De onde vêm os GPOs desvinculados?
Quando você cria uma GPO e define todas as configurações que pretende aplicar aos computadores clientes, essa GPO na verdade não está fazendo nada. Para afetar realmente os computadores clientes, a GPO deve ser vinculada a uma unidade organizacional (OU) do AD.
À medida que o tempo passa e mais administradores criam GPOs, esquecem de vinculá-las, desvinculam GPOs das OUs, pretendem removê-las mas nunca o fazem, as GPOs ficam apenas paradas e não fazem nada podem se proliferar. Especialmente em organizações grandes, GPOs desvinculadas podem se multiplicar até atingirem centenas se não forem devidamente mantidas.
Localizando GPOs Desvinculadas no GPMC
Você pode encontrar GPOs desvinculadas de duas maneiras: via GPMC ou via PowerShell. Se você tiver apenas algumas GPOs desvinculadas, pode fazer sentido usar o GPMC em vez de criar um script do PowerShell.
Para encontrar GPOs desvinculadas via GPMC:
1. Abra o GPMC indo para o menu Iniciar e digitando “gerenciamento de política de grupo”. Quando o programa GPMC aparecer, abra-o.
2. No GPMC, vá para Floresta: <nome da sua floresta —> Domínios —> <nome do seu domínio>, clique com o botão direito no nome do domínio e clique em Procurar. Esta ação abrirá a caixa de diálogo Procurar Objetos de Política de Grupo.

3. Clique na lista suspensa Item de Pesquisa e selecione os links de GPO. Este item de pesquisa irá procurar GPOs que estão ligadas a uma OU. Altere a lista suspensa Condição para ser Existem Em e o domínio para ser o seu domínio.
Na captura de tela abaixo, a combinação dessas configurações procurará todas as GPOs ligadas a pelo menos uma OU no domínio homelab.local.
Quando terminar, clique em Adicionar para adicionar o critério. Ele aparecerá na seção Todos os critérios de pesquisa.

4. Agora, clique no botão Pesquisar para encontrar todas as GPOs que correspondem aos critérios de pesquisa.

5. Como mostrado na captura de tela abaixo, apenas as GPOs ligadas são mostradas nos resultados da pesquisa.

6. Para encontrar as GPOs não ligadas, compare manualmente todas as GPOs com as GPOs ligadas, conforme mostrado abaixo. Na captura de tela abaixo, apenas três GPOs estão ligadas. Ao olhar sob o nó Objetos de Política de Grupo, você pode ver que duas das GPOs não aparecem (UnlinkedGPO1 e UnlinkedGPO2). Isso significa que elas não estão ligadas.
Esta tarefa será demorada e é por isso que você verá como executar esta tarefa via PowerShell na próxima seção.

As GPOs ligadas terão um link quando estiverem atribuídas a um objeto AD como uma OU, conforme mostrado abaixo. Se você tiver apenas algumas GPOs, pode procurar GPOs que têm um link e aquelas que não têm um link. As GPOs que não têm um link são as GPOs não ligadas.

Encontrando GPOs Não Ligadas com PowerShell
Pesquisar através dos GPOs no GPMC pode funcionar para alguns GPOs, mas você vai ter dificuldades se tiver centenas ou milhares de GPOs gerenciando milhares de endpoints. Nesse caso, é hora de automatizar esse processo e construir uma ferramenta útil do PowerShell.
Supondo que você esteja em seu PC Windows local associado ao domínio com RSAT instalado:
1. Abra um console do Windows PowerShell.
2. Importe o módulo GroupPolicy. O módulo GroupPolicy vem com o RSAT e deve estar instalado em seu sistema. Este módulo contém todos os comandos necessários para trabalhar com GPOs no PowerShell.
3. Execute o cmdlet do PowerShell Get-GPO
usando o parâmetro All
. Este cmdlet consulta o AD e retorna todos os GPOs encontrados.

4. Agora que você pode consultar todos os GPOs no domínio, você precisa descobrir quais estão desvinculados. Para fazer isso, execute o cmdlet Get-GPOReport
. Este cmdlet permite que você forneça um nome e um tipo de saída para retornar.
Copie e cole manualmente um dos nomes de GPO encontrados na etapa acima e execute este comando. Você verá que o cmdlet retorna um relatório XML de todas as configurações que os GPOs possuem. Em particular, observe a seção chamada LinksTo
, como mostrado abaixo. Esta seção contém o nó XML SOMPath
que representa o caminho para a OU à qual está vinculado.

O cmdlet
Get-GPOReport
só pode obter um relatório para um único GPO de cada vez. Este cmdlet inclui apenas resultados de pesquisa de domínios e não de sites AD.
5. Agora que você sabe como encontrar todos os GPOs com o Get-GPO
e o cmdlet para descobrir com o que eles estão vinculados (Get-GPOReport
), combine-os copiando e colando o comando PowerShell abaixo em seu console.
O comando abaixo consulta todos os GPOs no domínio (Get-GPO
) e depois gera um relatório XML para cada um deles (Get-GPOReport
), permitindo apenas aqueles que não têm uma string <LinksTo>
no relatório (Select-String
) serem retornados.
No ambiente do tutorial, você pode ver no exemplo abaixo que UnlinkedGPO1 e UnlinkedGPO2 não estão vinculados a nenhum OU.

Construindo uma Ferramenta PowerShell para GPOs não Vinculados
Agora vamos colocar tudo que você aprendeu junto e construir um script PowerShell que você pode usar no mundo real.
1. Abra seu editor de código favorito e copie/cole o seguinte script PowerShell nele. Salve o script como Remove-UnlinkedGPO.ps1. Este script:
- Cria uma pasta com a data atual para armazenar relatórios de GPOs não vinculados.
- Encontra todos os GPOs no AD que não estão vinculados.
- Cria um relatório HTML para cada GPO não vinculado e o salva no disco.
- Cria e anexa a um arquivo de texto uma lista de todos os GPOs não vinculados.
- Remove cada GPO não vinculado com uma etapa de confirmação usando o cmdlet
Remove-GPO
.
Você também pode baixar o script Remove-UnlinkedGPO.ps1 via GitHub.
2. Execute o script Remove-UnlinkedGPO.ps1.
3. Se um GPO não vinculado for encontrado, o script solicitará que você o remova. Essa solicitação vem do Remove-GPO
cmdlet usando o interruptor Confirm
. Para confirmar a remoção desse único GPO, clique em Sim, caso contrário, clique em Sim para Todos para remover todos os GPOs não vinculados sem mais confirmação.

Após a conclusão do script e se pelo menos um GPO não vinculado for encontrado, você deverá ver na pasta C:\GPOBackup\<data> o conteúdo do GPO em uma pasta GUID juntamente com os relatórios HTML e o arquivo UnlinkedGPOs.txt.

4. Agora, abra um dos relatórios HTML do GPO com um navegador da web. Você pode ver abaixo que o relatório contém todas as configurações definidas nesse GPO. No exemplo abaixo, o GPO UnlinkedGPO1 contém configurações para a política de execução do PowerShell.

5. Finalmente, abra o arquivo UnlinkedGPOs.txt. Você verá abaixo que ele contém a mesma saída que você recebeu do cmdlet Get-GPO
.

Conclusão
Agora você deve saber como encontrar todos esses GPOs não vinculados em seu ambiente AD usando o GPMC e o PowerShell.
Qual método você prefere? Consegue pensar em uma maneira de melhorar o script do PowerShell abordado?