Descubra connosco os comandos de Powershell para deploy e gestão de GPOs, para assim poder criar o seu próprio script de GPO para a implementação de políticas de grupo.
Há alguns anos que existe uma clara tendência de utilização do PowerShell para a administração do sistema operativo ou aplicações de servidores, bem como para a implementação de serviços e infraestruturas. Esta tendência é promovida tanto pela Microsoft como por muitos administradores, que cada vez mais se afastam do uso da consola gráfica de sempre.
Quem já experimentou a gestão de serviços com o PowerShell deve concordar que, embora seja mais difícil geri-los desta forma, pois a curva de aprendizagem é muito mais acentuada, o poder e a flexibilidade de trabalhar com este modelo baseado em comandos são muito maiores.
Por isso, e depois de vários artigos sobre a implementação de diferentes GPOs através de um ambiente gráfico, achamos conveniente olhar para a forma como poderíamos implementar GPOs através do uso de comandos do PowerShell, combinando os comandos descritos num ficheiro e criando assim o nosso próprio script de GPO para implementação de políticas.
NOTA: Devemos diferenciar entre a implementação de GPOs que executam código do PowerShell e a implementação de GPOs com o PowerShell. No primeiro caso, criamos um GPO que, ao arrancar, inicia a execução de um ficheiro que contém um script do PowerShell. No segundo caso, os comandos do PowerShell são usados para iniciar ou configurar o GPO.
Começar a trabalhar com PowerShell e GPOs (GPO Script):
A seguir, vamos rever o que é preciso e o que podemos fazer com o PowerShell em relação às Políticas de Grupo (GPOs), embora não possamos incluir aqui todos os comandos que se podem usar. Serão abordados os mais importantes e os que são necessários para implementar GPOs, configurá-los, atualizá-los, gerar relatórios e excluí-los quando deixarem de ser necessários.
Importar o módulo PowerShell para GPOs:
Ao trabalhar com o PowerShell, devemos saber que existem inúmeros comandos e módulos de biblioteca, e que devemos importar alguns destes módulos para poder trabalhar com determinados serviços ou produtos e, além disso, estes têm a sua documentação própria que devemos também conhecer.
A primeira coisa que devemos saber é que instalar o “ActiveDirectory” é um requisito essencial. Pode ser instalado com o seguinte comando:
Import-Module ActiveDirectory
Este módulo instala tudo o que precisamos para gerir as Políticas de Grupo (GPO), mas se isso não acontecesse, poderíamos lançar o seguinte comando para importar tudo:
Import-Module GroupPolicy
Operações em GPOs disponíveis com PowerShell:
Para ter uma ideia do que podemos fazer com o PowerShell em termos de Políticas, podemos lançar um comando que nos permite listar todos os comandos contidos no módulo GPO:
Get-Command –Module GroupPolicy
Mesmo sem saber nada sobre o PowerShell, podemos adivinhar o que se pode fazer com estes comandos, mas vamos analisar brevemente as opções:
- Consultas sobre os GPOs.
- Criar, copiar e eliminar GPOs.
- Vincular e desvincular GPOs.
- Estabelecer permissões e heranças de GPOs.
- Fazer backup e recuperar GPOs.
Para obter informações detalhadas sobre o módulo pode visitar o site Microsoft Learn.
Vamos ver como se podem realizar algumas das ações descritas.
Exibir os GPOs que temos no domínio:
Podemos executar uma consulta para mostrar todos os GPOs que temos no domínio. Para isso devemos utilizar o comando “Get-GPO”, fornecendo o nome do domínio como parâmetro. O comando é o seguinte:
Get-GPO -Domain <domínio> -All
Onde:
- Domain <domínio>: Onde a string <domínio> deve ser substituída pelo nome do domínio com extensão (exemplo: pruebasnacho.int)
Este seria um exemplo:
Get-GPO -Domain pruebasnacho.int -All
Criar um novo GPO com PowerShell:
Para criar um novo GPO com PowerShell, vamos trabalhar como o faríamos com um GPO através da consola gráfica. A primeira coisa a fazer é criar um novo GPO em branco, com o comando:
New-GPO -Name <Nome> -Comment <Comentário>
Onde:
- New-GPO: É o comando para criar um novo GPO.
- -Name <Nome>: É o nome que queremos dar ao GPO. A string <Nome> deve ser substituída pelo nome.
- -Comment <Comentário>: Fornece um comentário anexado ao GPO que serve como descrição. <Comentário> deve ser substituído pela descrição desejada.
Um exemplo de GPO pode ser:
New-GPO -Name PruebaGPO1 -Comment “Descrição da GPO feita com PowerShell”
Vincular um GPO a uma UO com PowerShell:
O próximo ponto a configurar geralmente é vincular o GPO a uma Unidade Organizacional (OU), que será a raiz a partir da qual a política será executada.
Neste caso, isto é feito com o comando “New-GPLink” para o qual é direcionado o GPO que foi criado. O comando executado terá este formato:
Get-GPO <Nome> | New-GPLink -Target “ou=zaragoza, dc=pruebasnacho, dc=int”
Onde:
- Get-GPO <Nome>: Fornece o nome do GPO ao qual queremos vincular. A string <Nome> deve ser substituída pelo nome.
- Target <Path_OU_Domínio>: O caminho da estrutura da UO à qual o GPO será vinculado. A string <Path_OU_Domain> deve ser substituída pelo caminho da OU num formato como o exemplo abaixo:
Um exemplo, que vincula à estrutura da UO da Delegação de Zaragoza dentro do Domínio TestsNacho.int:
Get-GPO PruebaGPO | New-GPLink -Target “ou=zaragoza,ou=delegaciones,dc=pruebasnacho,dc=int”
Desvincular um GPO de uma OU com PowerShell:
Para desvincular o GPO de uma Unidade Organizacional (OU), deve usar-se o comando “Remove-GPLink” com um formato como o mostrado abaixo:
Remove-GPLink -Name <Nome> -Target <Path_OU_Domínio>
Onde:
- Name <Nome>: Fornece o nome do GPO que queremos desvincular. A string <Nome> deve ser substituída pelo nome.
- Target <Path_OU_Domínio>: O caminho da estrutura da UO da qual o GPO será desvinculado. A string <Path_OU_Domain> deve ser substituída pelo caminho da OU num formato como o exemplo abaixo:
No seguinte exemplo podemos ver como se desvincula da estrutura da UO da Delegação de Zaragoza dentro do Domínio TestsNacho.int:
Remove-GPLink -Name PruebaGPO -Target “ou=zaragoza,ou=delegaciones,dc=pruebasnacho,dc=int”
Desativar um GPO sem desvinculá-lo da UO com PowerShell:
Outra opção é desativar temporariamente um GPO, sem desvinculá-lo da UO à qual está vinculado. Esta prática é feita geralmente para testes ou durante alterações, por isso dizemos que é temporária, mas também pode ser usada para desativar GPOs indefinidamente. No entanto, se for uma ação indefinida, é melhor desvincular e excluir, para evitar a acumulação de “lixo” .
Para desativar a vinculação de um GPO com uma UO, pode usar o seguinte comando:
Set-GPLink -Name <Nome> -Target <Path_OU_Domínio> -linkenabled no
Onde:
- Name <Nome>: Fornece o nome do GPO que queremos desativar. A string <Nome> deve ser substituída pelo nome.
- Target <Path_OU_Domínio>: O caminho da estrutura OU à qual o GPO está vinculado. A string <Path_OU_Domain> deve ser substituída pelo caminho da OU num formato como o exemplo abaixo:
Este exemplo é da UO da Delegação Zaragoza dentro do Domínio ProofsNacho.int:
Set-GPLink -Name PruebaGPO1 -Target “ou=zaragoza, dc=pruebasnacho, dc=int” -linkenabled no
Eliminar um GPO com PowerShell:
Quando precisar de eliminar um GPO porque está a causar problemas, deixou de ser útil ou simplesmente porque quer iniciar uma criação do zero, pode usar o comando “Remove-GPO” para eliminá-lo.
A sintaxe do comando é muito simples:
Remove-GPO -Name <Nome> -Domain <domínio>
Onde:
- Name <Nome>: Fornece o nome do GPO que queremos excluir. A string <Nome> deve ser substituída pelo nome.
- Domain <domínio>: É um parâmetro opcional. A string <domínio> deve ser substituída pelo nome do domínio com extensão (exemplo: pruebasnacho.int)
Este é um exemplo:
Remove-GPO -Name PruebaGPO -Domain “PruebasNacho.int”
Existe também a possibilidade de substituir o “Nome” e trabalhar com base no “Guid”, que é uma string alfanumérica que identifica de forma única o GPO no domínio. O comando seria:
Remove-GPO -Guid 0b14-50c-46dd-3e45-afa0-8b4d-331c-12bc -Domain “PruebasNacho.int”
Backup de GPOs com PowerShell (Perfeito para criar um GPO Script):
Para começar, é importante saber que fazer backup de um único GPO não é o mesmo que fazer backup de todos os GPOs existentes.
Para fazer uma cópia de segurança de todas as Políticas existentes num Controlador de Domínio, devemos executar o seguinte comando:
Backup-GPO -All -Path <Caminho_Destino>
Onde:
- Path <Caminho_Destino>: deve conter o caminho absoluto do destino do backup.
Exemplo:
Backup-GPO -All -Path F:\Backups\ADDS\GPO\
Se quiser fazer uma cópia de um único GPO, deverá fazê-lo referindo-se ao nome que foi dado ao GPO:
Backup-GPO -Name <Nome> -Path <Caminho_Destino>
Onde:
- Name <Nome>: Este é ser o nome do GPO do qual quer fazer backup.
- Path <Caminho_Destino>: deve conter o caminho absoluto do destino do backup.
Como exemplo, temos:
Backup-GPO -Name PruebaGPO -Path F:\Backups\ADDS\GPO\
Existe a possibilidade de atribuir comentários que ajudarão a conhecer a data do backup, permitindo ordená-los e saber qual é que vamos recuperar.
Este seria um exemplo com “etiqueta”:
Backup-GPO -Name PruebaGPO -Path F:\Backups\ADDS\GPO\ – Comment “Backup PruebaGPO 20221107”
Nesta parte pode ser especialmente interessante fazer a conversão para script GPO, para programar backups das políticas e poder armazená-los num repositório seguro e assim evitar possíveis desastres.
Recuperar um GPO com PowerShell:
O caso da recuperação é significativamente semelhante ao do backup, o que favorece as operações e, principalmente, a memorização de como se faz.
Caso queiramos recuperar uma cópia de um GPO guardado, devemos executar o seguinte comando:
Restore-GPO -Name <Nome> -Path <Caminho_Destino> – Comment <Comentário>
Onde:
- Name <Nome>: este é o nome do GPO que queremos recuperar.
- Path <Caminho_Destino>: deve conter o caminho absoluto do destino do backup.
- Comment <Comentário>: deve conter o comentário que foi dado ao backup e que se refere a um GPO específico num momento específico.
Um exemplo pode ser:
Restore-GPO -Name PruebaGPO -Path F:\Backups\ADDS\GPO\ – Comment “Backup PruebaGPO 20221107”
Atualizar um GPO com PowerShell:
Como qualquer pessoa que já trabalhou com políticas sabe, os GPOs nem sempre funcionam à primeira, ou melhor, nem sempre carregam ou atualizam as alterações na primeira vez. Em muitas ocasiões, é preciso forçar a execução de políticas manualmente. Para isso existe o comando CMD clássico:
Gpupdate /force
No caso do PowerShell, também há um comando que nos permite atualizar as políticas, o “Invoke-GPUpdate”, que geralmente é operado iniciando-o no computador onde se quer atualizar os GPOs:
Invoke-GPUpdate
Se queremos atualizar as políticas num computador remoto, podemos executar o seguinte comando:
Invoke-GPUpdate -Computer <computador>
Onde:
- <computador>: é o nome do computador onde se quer atualizar as políticas. Será representado da seguinte forma: “domínio\computador” como “pruebasnacho\laptop1”.
Por exemplo:
Invoke-GPUpdate -Computer “pruebasnacho\laptop1”
Normalmente é executado para todos os GPOs, mas é possível decidir atualizar apenas aqueles relacionados com determinados utilizadores ou computadores. Nesse caso, para iniciá-lo apenas para certos usuários, devemos adicionar o modificador:
-Target “User”
E no caso de querer lançá-lo em computadores, o modificador seria:
-Target “Computer”
Por outro lado, é possível lançar a atualização do GPO numa Unidade Organizacional inteira com um pequeno script de uma linha, como:
Get-ADComputer –filter * -Searchbase <Path_OU> | foreach{ Invoke-GPUpdate –computer $_.name -force}
Onde:
- Searchbase <Path_OU>: É o caminho do domínio onde a UO está localizada.
Para executá-lo na UO da delegação Zaragoza, por exemplo, teríamos:
Get-ADComputer –filter * -Searchbase “ou=zaragoza,ou=delegacoes,dc=pruebasnacho,dc=int” | foreach{ Invoke-GPUpdate –computer $_.name -force}
Se quisermos afetar o domínio inteiro, executamos o Searchbase na raiz do domínio.
Com isto, pode-se criar um GPO Script, que permite lançar atualizações de GPO nos computadores necessários ou até mesmo em todo o domínio.
Gerar um relatório de execução de GPO com PowerShell (e GPO Script):
Quando trabalhamos com políticas, pode surgir algum tipo de problema ou a necessidade de auditar o que estamos a fazer, para ver onde há falhas ou a forma como tudo está configurado.
Para poder fazer este tipo de relatórios, usamos o cmdlet “Get-GPOReport”, que gera um relatório cujo output pode ser configurado em formato HTML ou XML e que descreve as propriedades e configurações de políticas para um GPO específico ou para todos os GPOs no domínio.
Este relatório contém:
- Informação do GPO.
- Os seus vínculos.
- Os filtros de segurança.
- Filtros WMI.
- A delegação.
- A configuração de utilizadores e computadores.
Para obter este relatório, podemos usar o seguinte comando:
Get-GPOReport -name <Nome> -ReportType <HTML/XML> -Path <Caminho_Output>
Onde:
- Name <Nome>: Nome do GPO do qual queremos o relatório.
- ReportType <HTML/XML>: Especificação do formato: HTML ou XML.
- Path <Caminho_Output>: O caminho absoluto onde o relatório gerado será guardado, incluindo o nome do ficheiro de destino. Por exemplo: “F:\Reports\ADDS\GPO\report.html”.
Assim seria um exemplo:
Get-GPOReport -name PruebaGPO -ReportType HTML -Path “F:\Informes\ADDS\GPO\report.html”
Se quiser gerar o relatório de todas as políticas, deve substituir o parâmetro “-name <Nome>” por “-all”.
Conclusão e próximos passos com PowerShell e GPO Script:
As Políticas de Grupo ou GPOs são uma das principais ferramentas para podermos manter a nossa infraestrutura bem gerida, de forma rápida e eficiente, principalmente quando esta possui um grande número de hosts.
Através desta ferramenta, é possível instalar software de forma automática ou fornecer configurações padrão a conjuntos de hosts que podemos definir com base na sua localização dentro da estrutura de AD DS, ou seja, de acordo com a Unidade Organizacional (OU) a que pertence.
Como tudo o que acontece no mundo da Microsoft, os GPOs podem ser geridos com comandos de PowerShell, e a maioria das tarefas relacionadas com GPOs pode ser realizada com um conjunto relativamente pequeno de cmdlets. Na verdade, com o conteúdo deste artigo, vai poder aprender como fazer deploy do seu próprio script de GPO para automatizar a implementação de políticas no seu AD DS Server.
Esperamos que este artigo tenha sido interessante. Se tiver alguma dúvida, recomendamos que leia o artigo “O que são GPOs e para que servem?“, que dá uma pequena ideia do que são GPOs e como são executados.
Para completar a informação, recomendamos que visite os seguintes links, onde poderá consultar informação adicional e ver alguns exemplos de operações que podem ser realizadas com base em políticas de grupo, como:
Obrigado por estar connosco!