A diretiva de grupo

Automatizar o gerenciamento de diretiva de grupo com o Windows PowerShell

Darren Mar-Elia

Partes deste artigo são baseados em software pré-lançamento e estão sujeitas a alterações.

Visão geral:

  • Usando o GPMC APIs
  • Criando relatórios de diretiva de grupo com o Windows PowerShell
  • Os cmdlets no Windows 7 e no Windows Server 2008 R2

Conteúdo

O GPMC oferecer?
Automatizando o ciclo de vida do GPO
Automatizando o relatório da diretiva de grupo
Gerando um relatório com base em HTML
Gerando um relatório com base em XML
Relatório no log do RSoP
Uma maneira mais fácil

A diretiva de grupo é uma tecnologia poderosa ainda complexa. Ele é usado, até certo ponto, em quase todos ambiente. E para muitos que dependem dele muito para proteger e bloquear seu ambiente Windows, a diretiva de grupo é uma parte importante sua infra-estrutura.

Dito isso, sempre sou surpreso em ver como pouco automação é usada para gerenciamento de diretiva de grupo em muitas organizações de IT. Quando o Group Policy Management Console (GPMC) fornecido, a Microsoft fez um conjunto de APIs e scripts de exemplo disponíveis para automação de tarefas que foram realizados com esse console. Há muito que pode ser feito usando essas APIs, bem como oportunidades para automatizar a outros aspectos do gerenciamento de diretiva de grupo, como tarefas de solução de problemas e diagnóstico. E, com o advento do Windows PowerShell, algumas dessas tarefas têm se tornado mais fácil.

Thorbjörn Sjövold abordado usando o Windows PowerShell para obter algumas das APIs do GPMC em seu artigo" Simplificar a administração da diretiva de grupo com o Windows PowerShell." Neste artigo, eu desejo criar em que base com algumas técnicas de automação adicionais que você pode usar para automatizar ainda mais o gerenciamento de seu ambiente de diretiva de grupo.

O GPMC oferecer?

O GPMC está concentrado no operacional contra o todo grupo diretiva de GPO e suas permissões associadas, links e assim por diante. Ele não fornece automação ou gerenciamento das configurações reais no GPO. No entanto, pode ser útil executar automação contra o GPO inteiro como uma forma de gerenciar o processo de alteração em seu ambiente de diretiva de grupo. Por exemplo, você pode usar as APIs do GPMC para modificar os links para GPOs. Se você tiver um novo GPO que você deseja implantar, você pode criar scripts da criação do GPO e, em seguida, você pode script o processo de vinculação depois que suas configurações foram preenchidas. É possível criar um também script a alteração das permissões de um GPO, caso você deseje modificar os grupos de segurança são direcionados por um objeto de diretiva de grupo ou quem pode editar esse objeto.

E claro, você sempre pode usar as APIs para consultar informações sobre GPOs, em oposição a apenas fazer alterações. Isso inclui a geração de relatórios baseados em HTML e XML configurações do GPO, bem como relatórios de conjunto de diretivas resultante (RSoP) em estações de trabalho remotas e servidores para determinar se diretiva de grupo foi aplicada com êxito.

É também vale a pena mencionar que quando o Microsoft lançado o GPMC atualizado fornecida com o Windows Vista SP1 e Windows Server 2008, havia algumas atualizações para as APIs para oferecer suporte a alguns dos novos recursos que em geral suportam GPMC e a diretiva de grupo. Elas incluem a capacidade para criar novos GPOs de "GPOs de Starter" e adicionar comentários a um objeto de diretiva de grupo. Starter GPOs são como modelos — eles permitem criar um conjunto de configurações de diretiva de modelo administrativo que você pode, em seguida, aplicar a um novo GPO, pre-populating algumas das suas configurações. Eu desejo começar examinando como você pode automatizar o processo de criação, permissioning e vinculando um GPO e, em seguida, mostrar como você pode aproveitar alguns desses novos recursos GPMC nessa automação.

Automatizando o ciclo de vida do GPO

Para demonstrar como é possível automatizar Criando e Gerenciando GPOs, vou usar o Windows PowerShell e as APIs do GPMC. No meu exemplo, ESTOU criando um GPO chamado "diretiva de marketing do TechNet". Ao criar o GPO, eu vou usar um GPO Starter chamado "modelo de bloqueio de usuário" como o ponto de partida e adicionar um comentário, indicando que criei o GPO. Eu poderia criar o GPO de Starter usando APIs do GPMC, mas neste exemplo, vou para assumir a que ela já existe.

A próxima etapa que desejo automatizar é o permissioning do GPO. Vou permissão o GPO para que somente usuários dentro do grupo "usuários marketing" processará a diretiva e VOU adicionar um grupo chamado "administradores GPO" com as permissões para editar o GPO. Finalmente, vou para o link do GPO para a OU Marketing em meu domínio do Active Directory.

O script de Windows PowerShell inteiro, que chamei gpoCreate.ps1, é mostrado na Figura 1 . Adicionei os números de linha simplesmente para referência.

Figura 1 O Windows PowerShell gpoCreate.ps1 scriptt

1. $gpmc = New-Object -ComObject GPMgmt.GPM
2. $constants = $gpmc.GetConstants()
3. $domain = $gpmc.GetDomain("cpandl.com",$null,$null)
4. $starter = $domain.GetStarterGPO("{CDFD6B94-BF4E-4D07-8D99-3D416EC7C9A0}")
5. $gpo = $domain.CreateGPOFromStarterGPO($starter)
6. $gpo.DisplayName = "Technet Marketing Policy"
7. $gpo.Description = "Created by Darren for Technet Demo"
8. $permissions = $gpo.GetSecurityInfo()
9. $permissions.RemoveTrustee("Authenticated Users")
10. $applyPermission = $gpmc.CreatePermission("Marketing Users",$constants.permGPOApply,$false)
11. $editPermission = $gpmc.CreatePermission("GPO Admins",$constants.permGPOEdit,$false)
12. $permissions.Add($applyPermission)
13. $permissions.Add($editPermission)
14. $gpo.SetSecurityInfo($permissions)
15. $som = $domain.GetSOM("OU=Marketing,DC=cpandl,DC=com")
16. $som.CreateGPOLink(1,$gpo)

Linha 1 é necessário para começar a usar as APIs do GPMC. Você usará isso em qualquer script GPMC que você escreve. Essa linha cria uma instância do objeto GPMC base e o atribui à variável $ gpmc. Linha 2 é outro comando comumente usado. O GPMC fornece um conjunto de constantes úteis que são usados entre o espectro de tarefas para indicar um estado particular. Você verá como eu usá-lo mais tarde no script, mas por enquanto, eu apenas irá atribuir as constantes à variável $ constantes.

Na linha 3, preciso obter uma referência para que eu irá estar operando no domínio do Active Directory. No meu exemplo, que é um domínio chamado cpandl.com. Para fazer isso, chamo o método GetDomain na variável de gpmc $. Os dois parâmetros nulos $ são opcionais e permitem que você especifique um determinado controlador de domínio para se conectar a Quando você se conectar ao domínio. Mantendo essas nulo, eu estou essencialmente escolhendo o padrão, o que é o emulador PDC controladores de domínio.

Na linha 4, preciso obter uma referência para o GPO de Starter (modelo de bloqueio do usuário). O método GetStarterGPO suporta apenas chamar o GPO de Starter por seu GUID, para que eu precise ir para o console do GPMC para procurar por que. (Eu poderia ter script-lo também.) Esse é o GUID que estou passando para o método GetStarterGPO.

Na linha 5, uma vez que eu tenha meu referência Starter GPO, uso-lo para criar o novo GPO, usando o método CreateGPOfromStarterGPO que está disponível na variável $ domínio. EU atribuir o GPO recém-criado para $ gpo para que eu possa continuar a usá-lo. Observe que nesse ponto, o GPO não tem nenhum nome (bem, ela tem o nome padrão de "novo objeto de diretiva de grupo"). Portanto, na linha 6, eu modifico a propriedade displayName no gpo de $ para dar a ele um novo nome para. Linha 7 é onde eu adicionar um comentário ao GPO, definindo a propriedade de descrição no gpo de $.

Agora que tem o GPO criado, o próximo conjunto de tarefas é modificar as permissões no GPO. Na linha 8, eu começar obter a lista atual de permissões no meu GPO recém-criado, usando o método GetSecurityInfo no GPO. A abordagem para modificar permissões em um GPO é obter a lista de permissões atuais no GPO, adicionar e excluir entradas da lista conforme necessário e, em seguida, aplique novamente a lista para o GPO. Para esse fim, na linha 9, remova a usuários autenticados padrão permissão do GPO recém-criado.

Em linhas 10 e 11, eu crio as duas novas permissões que desejo adicionar ao GPO. Eu crio aquelas que estejam usando o gpmc $ CreatePermission método, fornecendo o nome do (grupo de usuário) Trustee e a permissão deseja que o grupo tenha. Observe que ESTOU usando a variável de constantes $ para definir a permissão. A propriedade $constants.permGPOApply concede as permissões de "ler e aplicar diretiva de grupo" que permitem que os membros de um grupo para processar um GPO, enquanto a propriedade permGPOEdit concede a capacidade para esse grupo editar um GPO. O parâmetro de $ false no final da chamada do método CreatePermission simplesmente diz que a permissão deve não ser herdada, que é o padrão para permissões de GPO.

Depois que as duas permissões são criadas, 12 linhas e 13 adicioná-los a volta à lista de permissões $ e 14 linha chama o método SetSecurityInfo no GPO para aplicar a nova lista de volta ao GPO.

As duas linhas finais vincular o GPO para a OU Marketing. Na linha 15, chame o método de GetSOM (SOM significa "escopo de gerenciamento") na variável $ domínio "conexão" para a OU. Na linha 16, chame CreateGPOLink no objeto de som $ que acabou de criar e passe a ele dois parâmetros. O primeiro parâmetro indica a ordem na unidade ORGANIZACIONAL de que eu quero que o GPO a ser vinculado (uma OU pode ter vários GPOs vinculados a ele). O "1" indicado para o primeiro parâmetro indica que que deseja que o GPO a ser vinculado primeiro na lista. O segundo parâmetro (no caso, a variável de gpo $) é a referência para o GPO que deseja vincular. E agora eu com êxito já criado, permissioned e vinculado um GPO usando automação. O resultado é mostrado na Figura 2 .

fig01.gif

A Figura 2 exibir o GPO recém-criado

Automatizando o relatório da diretiva de grupo

Outro aspecto do gerenciamento de diretiva de grupo, que você pode automatizar é o relatório. Nesse sentido, existe pelo menos dois tipos de relatórios que fornece o GPMC. A primeira é a capacidade de gerar relatórios sobre as configurações em um GPO. Isso permite que você gerar qualquer um baseada em HTML ou XML relatório das configurações no momento estão habilitadas no GPO, como mostrado na Figura 3 .

fig02.gif

A Figura 3 relatórios em configurações de GPO

O segundo recurso relatório permite que você gerar conjunto de diretivas resultante (RSoP) ou relatórios de resultados de diretiva de grupo. Há dois tipos de relatórios de RSoP — de log e de planejamento. Um relatório de log é executado em uma área de trabalho remota ou servidor, indicando quais diretivas foram entregues ao sistema remoto e se fossem bem-sucedidas. O relatório de planejamento do RSoP permite que você execute análise hipotética contra um determinado OU, computador ou usuário para determinar quais diretivas serão aplicadas. Em ambos os casos, de log e de planejamento — você pode gerar HTML ou XML saída usando o GPMC APIs e o Windows PowerShell.

Gerando um relatório com base em HTML

Para gerar um relatório de configurações de GPO no Windows PowerShell, eu comece logoff com dois comandos de inicialização familiar, que usei no script anterior:

1. $gpmc = New-Object -ComObject GPMgmt.GPM
2. $constants = $gpmc.GetConstants()

Em seguida, preciso obter uma referência para o GPO que desejo relatar, assim:

3. $domain = $gpmc.GetDomain("cpandl.com",$null,$null)
4. $gpo = domain.GetGPO("{31B2F340-016D-11D2-945F-00C04FB984F9}")

Na linha 3 aqui, eu estou conectar novamente para o domínio e, em seguida, na linha 4, eu uso o método GetGPO no domínio para obter uma referência para o GPO que deseja relatar. Nesse caso, eu necessário que passar o GUID do GPO, que por acaso, é a "diretiva de domínio padrão".

Em seguida, preciso gerar o relatório de configurações:

5. $gpo.GenerateReportToFile($constants.ReportHTML,"c:\GPReports\DDPSettings.html")

Aqui, eu estou chamando o método GenerateReportToFile no GPO para criar o relatório de configurações. O primeiro parâmetro usa a variável de constantes $ para especificar um tipo de relatório HTML. O segundo parâmetro aponta para o caminho onde deseja salvar o relatório.

Gerando um relatório com base em XML

Outra maneira para acessar os dados de configurações usando o Windows PowerShell é aproveitar o XML interno analisar recursos no Windows PowerShell e sua capacidade de gerar um relatório de configurações em XML. Portanto, em vez de linha 5 acima, altere que para o seguinte:

[xml]$report = ($gpo.GenerateReport($constants.ReportXML)).Result

Neste exemplo, ESTOU usando um método diferente no GPO, chamado GenerateReport. Este método usa um único parâmetro, que é o tipo de relatório. Mas nesse caso, eu estou atribuindo a saída de chamada do método a um relatório de variável chamada $ e eu estou anterior que nome de variável com o acelerador de tipo de Windows PowerShell [xml], que informa o PowerShell seja a saída do comando que eu estou armazenando no relatório de $ e convertê-lo em um documento XML em vez de apenas uma série de texto. No entanto, para obter o XML real do GenerateReport, preciso usar a propriedade Result nessa saída, que é o que você vê no final dessa instrução. Portanto, a propriedade de resultado contém o XML real que ESTOU usando para gerar o documento XML.

Assim que tiver o XML na variável $ relatório, pode fazer muitas coisas interessantes com ele. Por exemplo, considere o seguinte comando:

$report.GPO

Isso retorna o elemento "GPO" no documento que fornece informações de visão geral sobre o GPO que estou relatório no. Ou este comando:

$report.GPO.LinksTo

Isso retorna uma lista de todos os locais que esse GPO foi vinculado.

Mas de forma mais interessante, pode usar a natureza estruturada do XML para investigar as configurações reais dentro do GPO da linha de comando. Por exemplo, como este é o GPO de diretiva de domínio padrão, sabe que ela provavelmente contém algumas configurações de segurança relacionadas à diretiva de senha. Navegando o espaço para nome do GPO conforme representado no arquivo XML, pode rapidamente obter essas configurações, da seguinte maneira:

$report.GPO.Computer

Isso retorna informações sobre o lado do computador do GPO. Se eu exibir as propriedades na propriedade neste computador, observar um conjunto de áreas de diretiva na propriedade ExtensionData, conforme mostrado na Figura 4 .

fig03.gif

A Figura 4 exibindo as configurações de GPO por meio de XML

Este exemplo, existem duas áreas de extensão no lado desse GPO computador: registro e segurança. Portanto, emita o seguinte comando:

$report.GPO.Computer.ExtensionData[0].Extension

Isso me fornece uma lista das áreas de diretiva implementada na seção Diretiva de segurança. Vejo duas propriedades chamadas a conta e opções de segurança. Agora eu digite o seguinte comando:

$report.GPO.Computer.ExtensionData[0].Extension.Account

Isso me oferece uma lista de cada uma das configurações de diretiva de conta para esse GPO, conforme mostrado na A Figura 5 .

fig04.gif

A Figura 5 exibindo conta configurações de diretiva no GPO

Observe que algumas das configurações não, na verdade, mostram o valor na Figura 5 . Cada configuração é retornada como um membro de uma coleção em que a propriedade de conta. Portanto, para que, por exemplo, a configuração de Minimum Password Length, preciso indexar na coleção, assim:

$report.GPO.Computer.ExtensionData[0].Extension.Account[4]

Depois que você obtiver a paralisação de navegar o namespace XML para as configurações do GPO, você pode facilmente acessar determinadas configurações e usar esse recurso em conjunto com o Windows PowerShell para localizar os valores de configurações em um GPO muito rapidamente.

Relatório no log do RSoP

Assim como configurações de GPO, você pode gerar um relatório baseados em XML ou HTML no Windows PowerShell que mostra as configurações de diretiva de grupo que foram aplicadas a um determinado computador. A abordagem é um pouco diferente, no entanto. Começando novamente com os dois comandos de inicialização, execute o script em uma direção de um pouco diferente:

1. $gpmc = New-Object -ComObject GPMgmt.GPM
2. $constants = $gpmc.GetConstants()
3. $rsop = $gpmc.GetRSOP($constants.RSOPModeLogging,$null,0)
4. $rsop.LoggingComputer = "xp2"
5. $rsop.LoggingUser = "cpandl\dpmtest"
6. $rsop.CreateQueryResults()
7. $rsop.GenerateReportToFile($constants.ReportHTML,"c:\gpreports\XP2Rsop.html")

Depois de linhas 1 e 2 configurar o processo, linha 3 cria a variável de rsop $ chamando o método GetRSOP no gpmc $. Em que chamada de método, indique que que deseja criar um log do RSOP e não um relatório de planejamento. Propriedades de conjunto de linhas 4 e 5 no objeto rsop $ para informar a ele o computador e usuário deseja coletar dados RSOP contra. Em seguida, o único objetivo de linha 6 é se conectar ao computador especificado na linha 5 e gerar o namespace RSoP para esta consulta. Finalmente, na linha 7, saída os resultados da consulta para um arquivo HTML.

Observe que o objeto RSoP também tem um método GenerateReport semelhante ao exemplo de configurações de GPO. E você pode dar saída o relatório RSOP para um documento XML e navegar por ele no Windows PowerShell para descobrir o que está acontecendo de uma perspectiva de diretiva de grupo daquele cliente remoto. Por exemplo, digamos que eu desejo rapidamente descobrir se o processamento da diretiva de grupo êxito para o lado de computador do processamento do GPO. Pode usar o script anterior, mas substitua essa linha 7:

[xml]$rsopReport = 
  ($rsop.GenerateReport($constants.ReportXML)).Result

Isso coloca o meu relatório de RSoP em um documento XML.

Em seguida, eu poderão navegar até o nome-espaço do XML para verificar o status de extensão do lado do cliente (CSE) para o computador da seguinte maneira:

$rsopReport.Rsop.ComputerResults.ExtensionStatus

Quando o fazer isso, É exibida uma lista que mostra me o status em cada CSE que foi processado pelo computador!

Uma maneira mais fácil

Como já mostrei até o momento, há muita powerin aproveitando as APIs do GPMC para automatizar a diretiva de grupo ciclo de vida, relatórios e tarefas de diagnóstico. Mas ele têm poucas etapas para obter o resultado desejado. No entanto, há somerelief e muito mais que chegam no futuro.

Criei um conjunto de 25 cmdlets GPMC Windows PowerShell livres dispor a maioria das funções GPMC comuns em cmdlets fáceis de usar. Você pode baixar esses cmdlets GPMC no www.sdmsoftware.com/freeware. Para fornecer um exemplo do processo simplificado, do primeiro exemplo de criação e, em seguida, permissioning e vincular um GPO, o seguinte script usando o Meus cmdlets GPMC deve realizar as tarefas mesmas que o script apresentadas anteriormente, mas com menos de comandos:

$gpo = New-SDMgpo "Technet Marketing Policy" 
  -FromStarterGPO "User Lockdown Template" –native
$gpo.Description = 
  "Darren's Technet Demo GPO" Remove-SDMgpoSecurity 
$gpo.DisplayName -Trustee "Authenticated Users"  –PermApply
Add-SDMgpoSecurity $gpo.DisplayName 
  -Trustee "Marketing Users" –PermApply
Add-SDMgpoSecurity $gpo.DisplayName 
  -Trustee "GPO Admins" –PermEdit
Add-SDMgplink "Technet Marketing Policy" 
  -Scope "OU=Marketing,DC=cpandl,DC=com" -Location 1

Melhor ainda, 7 do Windows e Windows Server 2008 R2 fornecerá cmdlets internos do Windows PowerShell para o GPMC. Por exemplo, para criar meu exemplo GPO a partir de um GPO Starter com um comentário, pode emitir um comando do Windows PowerShell, da seguinte maneira:

new-gpo "Darren's Technet Policy" -starterGPOName 
 "User Lockdown Template" -Comment "Darren's Demo"

A Microsoft também está adicionando suporte para leitura e gravação a um subconjunto das configurações de diretiva de grupo. Especificamente, haverá suporte para ler e gravar configurações do Registro em diretiva de modelo administrativo nativa ou a extensão de registro de preferências de diretiva de grupo mais recente. Por exemplo, para gravar um novo valor de registro em Preferências de diretiva de grupo, poderia emitir o comando a seguir:

Set-GPPrefRegistryValue "Darren's Technet Policy" 
  -key 'HKEY_LOCAL_MACHINE\Software\SDM Software' 
  -ValueName "Path" -Value "2" -Type String 
  -Context Computer -Action Update

Aqui, o cmdlet set-GPPrefRegistryValue pega um número de parâmetros para criar uma configuração de diretiva do Registro na minha "diretiva do Darren TechNet" GPO para o valor do Registro HKEY_LOCAL_MACHINE\Software\SDM Software\Path = REG_SZ 2. O parâmetro Context informa a diretiva se ele deve ser colocado abaixo do lado computador ou usuário do GPO e o parâmetro de ação especifica como aplicar o valor do Registro e corresponde às opções na interface do usuário GPP (outras opções incluem substituir, criar e excluir).

Como parte do tempo de gravação neste artigo, 7 do Windows e Windows Server 2008 R2 são planejados para remeter com cmdlets 25 para o gerenciamento de diretiva de grupo. Depois que elas estiverem disponíveis, o gerenciamento de diretiva de grupo no Windows PowerShell será muito mais fácil.

Darren Mar-Elia é um MVP diretiva de grupo da Microsoft, criador do site da diretiva de grupo popular www.gpoguy.come co-autor do Microsoft Windows Group Policy Guide (Microsoft Press, 2005). Ele também é CTO e fundador da SDM Software, Inc. Entrar no Darren@gpoguy.com.