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

forum

Outros artigos que podem interessar-lhe

21 de Fevereiro de 2024
Como empresa de software, é possível que tenha sentido atração pela reputação, variedade de serviços e solidez de algum
21 de Fevereiro de 2024
Para muitas empresas de software, ter uma infraestrutura própria significa independência e controlo, bem como uma potencial fonte de
21 de Fevereiro de 2024
Para um ISV, escolher o fornecedor de serviços cloud ideal é uma decisão crucial que pode impactar a satisfação