Comandos-Powershell-GPOS

Comandos de Powershell para deploy e gestão de GPOs (GPO Script)

Partilhar

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

 

Imagem. Lista de comandos do módulo de Políticas de Grupo
Imagem. Lista de comandos do módulo de Políticas de Grupo

 

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

 

Imagem. Lista de todos os GPOs do domínio
Imagem. Lista de todos os GPOs do domínio

 

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”

 

Imagem. Criar um novo GPO com PowerShell
Imagem. Criar um novo GPO 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”

 

Imagem. Vincular o GPO a uma OU
Imagem. Vincular o GPO a uma OU

 

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”

 

Imagem. Desvincular o GPO de uma OU
Imagem. Desvincular o GPO de uma OU

 

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

 

Imagem. Desativar o GPO numa OU
Imagem. Desativar o GPO numa OU

 

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”

 

Imagem. Eliminar o GPO de uma OU
Imagem. Eliminar o GPO de uma OU

 

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.

 

Imagem. Criar uma cópia de segurança dos GPOs do domínio e validar a criação
Imagem. Criar uma cópia de segurança dos GPOs do domínio e validar a criação

 

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”.

 

Imagem. Gerar o relatório e comprovação do conteúdo.
Imagem. Gerar o relatório e comprovação do conteúdo.

 

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!

Categorias:Cloud e sistemas

Outros artigos que podem interessar-lhe

26 de Dezembro de 2024
Como já sabe, na Jotelulu gostamos de fazer as coisas de forma diferente e, mais uma vez, vamos manter
13 de Novembro de 2024
Temos novas distribuições em Servidores! Em resposta aos múltiplos pedidos de vários dos nossos parceiros, foi ativada a opção
13 de Novembro de 2024
Já é possível configurar modelos de diferentes softwares através do assistente de configuração de servidores. Inauguramos esta funcionalidade do