Você está na página 1de 6

TechNet http://technet.microsoft.com/pt-br/library/dd569839(printer).

aspx

Script GPMC
Script GPMC

Automatizar tarefas de gerenciamento GPO

Por Darren Mar-Elia1

Este artigo é da edição de Agosto de 2003 da Windows & .NET Magazine2 (site em inglês).

Clique aqui para assinar a revista

Em Abril, a Microsoft lançou o console de gerenciamento de diretivas de grupo (GPMC), que fornece
um console de gerenciamento Microsoft (MMC) — interface de usuário baseada para um gerenciamento
fácil da Diretiva de Grupo do Windows Server 2003 e Windows 2000. O GPMC representa um grande
passo à frente nos recursos de gerenciamento do GPO (objeto de diretiva de grupo) quando comparado
às ferramentas nativas do Win2K. Com as ferramentas nativas, criar scripts do gerenciamento GPO é
difícil. Entretanto, o GPMC inclui um conjunto de interfaces de script para automatizar várias tarefas
de gerenciamento de GPO comuns. Usando essas interfaces de script, é possível gerenciar o ambiente
da diretiva de grupo, além de gerar relatórios das configurações GPO, criar e copiar GPOs e localizar
GPOs sem vínculos. A Microsoft fornece vários scripts GPMC que cobrem várias tarefas de script
comuns. É possível também criar seus próprios scripts para desempenhar tarefas de gerenciamento
GPO personalizadas.

Embora seja possível gerenciar diretivas de grupo baseadas no domínio do Win2K, o GPMC é executado
somente em computadores com Windows 2003 e Windows XP Professional. (Para obter mais
informações sobre os requisitos e recursos do GPMC, consulte o "Console de gerenciamento de
diretivas de grupo do Windows Server 2003" de julho de 2003, http://www.winnetmag.com3,
InstantDoc ID 39190, site em inglês).
É possível fazer o download do GPMC a partir do Centro de Download da Microsoft
(http://www.microsoft.com/downloads/details.aspx?FamilyID=c355b04f-50ce-42c7-
a401-30be1ef647ea&DisplayLang=en) (site em inglês). Quando você instala o GPMC, o sistema cria
uma pasta chamada Scripts, que contém todos os scripts GPMC pré-gravados. Em um cliente Windows
2003 ou XP, essa pasta está no diretório %programfiles%\gpmc. Os principais scripts administrativos
possuem uma extensão .wsf, um dos formatos de arquivo associados ao WSH (Windows Script Host).
Scripts com a extensão .wsf são arquivos com formato XML que podem chamar outros scripts gravados
em VBScript ou JScript, o que significa que um script pode beneficiar-se dos mecanismos de script
VBScript e JScript. Para os scripts deste artigo, eu utilizo VBScript sem contar com arquivos .wsf.

As interfaces GPMC são implementadas em gpmgmt.dll, que reside no diretório %programfiles%\gpmc.


A Microsoft desenvolveu essas interfaces com o objetivo de automatizar as funções GPMC e gerenciar
GPOs. Portanto, você pode usar as interfaces não somente para criar scripts de operações GPMC, como
criar tabelas de mapeamento para migrações GPO , mas também para consultar e modificar GPOs.
Entretanto, as interfaces GPMC não permitem que você leia ou defina as configurações de diretiva
dentro de um GPO. Por exemplo, não é possível criar um script que habilite a diretiva de Modelo
Administrativo Remover Executar do menu Iniciar dentro de um GPO. Essa limitação é desfavorável;
no entanto, as interfaces GPMC ainda fornecerão um nível de automação que ultrapassa o que estiver
disponível até esta data. Vamos analisar como começar com scripts GPMC e como usar os objetos
GPMC para executar várias tarefas administrativas, como recuperar permissões para um GPO e obter
relatórios de RSoP (conjunto de diretivas resultante).

Aprender a gravar scripts GPMC é relativamente simples. Todos os scripts GPMC gravados seguirão as
mesmas etapas básicas. Como o que ocorre com a maioria dos novos objetos usados no ambiente
WSH, primeiro é preciso criar instâncias dos objetos que deseja usar ou instanciá-los. Em todos os
scripts GPMC, o primeiro objeto necessário para instanciar é o objeto GPM. Este objeto é o objeto raiz
no modelo de objetos GPMC. É necessário que o objeto GPM acesse outras interfaces GPMC, o que, em
seguida, fornece acesso a mais recursos. Por exemplo, é necessário que o objeto GPM acesse a

1 de 6 23/04/2011 15:39
TechNet http://technet.microsoft.com/pt-br/library/dd569839(printer).aspx

interface IGPMDomain, permitindo que você crie uma referência a um domínio do AD (Active
Directory). Depois que você possuir a referência ao domínio do AD, é possível chamar o método
GetGPO do IGPMDomain para acessar a interface IGPMGPO e criar uma referência a um GPO específico
que desejar gerenciar. A partir daqui, a interface IGPMGPO contém métodos e propriedades para
gerenciar esse GPO. Você pode obter mais informações sobre o modelo de objeto GPMC no arquivo de
Ajuda chamado gpmc.chm, localizado na pasta Scripts. Também é possível aprender sobre o modelo de
objeto na referência do console de gerenciamento de diretiva de grupo do MSDN (Microsoft Developer
Network) em http://msdn.microsoft.com/library/en-us/gpmc/gpmc
/group_policy_management_console_reference.asp4(site em inglês).

Outra interface que você provavelmente encontrará é IGPMConstants, uma interface especial no script
GPMC. Essa interface fornece um conjunto de propriedades que representa constantes relacionadas ao
GPO que você precisará com freqüência em seus scripts GPMC. Por exemplo, suponha que você precise
configurar as permissões para controlar quem poderá editar um GPO. Você poderia usar um conjunto
complexo de ACLs do AD e do sistema de arquivos para representar a permissão Editar, mas essa
abordagem exigiria muita codificação. Então, a Microsoft forneceu a interface IGPMConstants para
fazer o trabalho para você. Você pode simplesmente chamar a propriedade PermGPOEdit da interface
IGPMConstants para representar a permissão apropriada. Para acessar a interface IGPMConstants, é
possível usar o método GetConstants do objeto GPM. Após usar o método GetConstants para obter
uma referência ao objeto GPMConstants, é possível em seguida usar quaisquer das propriedades
GPMConstants dentro de seus scripts.

A Lista 1 mostra o código usado para criar os objetos GPM e GPMConstants. Vamos analisar dois scripts
de modelo — GetGPOPerms.vbs e RSoPLogging.vbs — para ver como você desenvolve este código.
Reconhecidamente, esses scripts não são os mais básicos. Eu não quis duplicar os scripts GPMC que a
Microsoft fornece.

Lista 1 Código que cria os objetos GPM e GPMConstants


BEGIN COMMENT
' Código que cria o objeto GPM.
END COMMENT
Set GPMC = CreateObject("GPMgmt.GPM")
BEGIN COMMENT
' Código que cria o objeto GPMConstants.
END COMMENT
Set Constants = GPMC.GetConstants()

Recuperando permissões para um GPO

O script na Lista 2, GetGPOPerms.vbs, demonstra como usar vários objetos GPMC para listar as
permissões para um GPO em um domínio de teste. GetGPOPerms.vbs começa a instanciar os objetos
GPM e GPMConstants. Em seguida, o script acessa IGPMDomain, uma interface útil que permite
recuperar informações sobre um domínio e gerenciar GPOs dentro dele. Para acessar o IGPMDomain,
use o método GetDomain do objeto GPM, que retorna um objeto GPMDomain. Como a chamada A na
Lista 2 mostra, o método GetDomain usa três argumentos. O primeiro argumento é o nome do domínio
que armazena os GPOs que você deseja gerenciar. O nome do domínio deve ser o nome DNS do
domínio (por exemplo, minhaempresa.net). Como a chamada A mostra, é possível embutir o valor
deste argumento em código no script. Outra abordagem é fazer com que os usuários dos scripts
forneçam o nome do domínio na linha de comando quando lançarem o script.

O segundo argumento permite que você especifique que DC (controlador de domínio) deseja usar para
conectar ao domínio. Uma seqüência nula ("") significa que você não possui uma preferência de DC, o
que significa que o método GetDomain usará o emulador PDC. Para o terceiro argumento, você
especifica a opção que deseja usar para localizar um DC ao qual conectar. Você tem três opções:
GPM_USE_ANYDC, (use qualquer DC disponível), GPM_USE_PDC (use o DC emulador de PDC) ou
GPM_DONOTUSE_W2KDC (use um DC executando o Windows 2003). Como a chamada A mostra,
GetGPOPerms.vbs usa a propriedade UseAnyDC do objeto GPMConstants para especificar a opção
GPM_USE_ANYDC.

Depois de conectar-se ao domínio, começa a ficar divertido. Como o código da chamada B na Lista 2
mostra, você usa o método GetGPO do objeto GPMDomain para recuperar o objeto GPMGPO que
representa o GPO para o qual deseja listar as permissões. Para usar GetGPOPerms.vbs, é necessário

2 de 6 23/04/2011 15:39
TechNet http://technet.microsoft.com/pt-br/library/dd569839(printer).aspx

substituir o nome do domínio minhaempresa.net pelo nome DNS de seu domínio do AD. Observe que o
argumento do método GetGPO é o GUID (globally unique identifier) do GPO e não o nome amigável do
GPO. Nesse script, incluí o GUID para a diretiva de domínio padrão presente em todo domínio do AD.
Esse GUID é o mesmo para todos os domínios do AD.

Se os usuários dos scripts fornecerão as informações do GPO necessárias na linha de comando, fazer
com que eles insiram o GUID, que é difícil de inserir, pode não ser uma opção. Uma alternativa é fazer
com que os usuários forneçam os nomes amigáveis dos GPOs. Você poderá então obter o GUID
correspondente usando a função GetGPObyName, que a Microsoft oferece no arquivo
lib_commongpmcfunctions.js na pasta Scripts. O GetGPObyName usa a interface IGPMSearchCriteria
para pesquisar todos os GPOs em um domínio e, correspondendo ao nome amigável inserido, retorna
um GUID que o script pode passar para GetGPO. Entretanto, o GetGPObyName é uma função JScript.
Se você preferir usar VBScript, é possível gravar uma versão VBScript do GetGPObyName ou usar os
métodos GetGPOs, GPOName e GPOGuid no objeto IADsTools COM, parte das Ferramentas de Suporte
do Win2K. Para obter mais informações sobre esses métodos, consulte o artigo "Criando script com
IADsTools", de abril de 2003, http://www.winnetmag.com5 (site em inglês), InstantDoc ID 38286.

Em seguida, o script usa o método GetSecurityInfo do objeto GPMGPO para recuperar as permissões
para o GPO. O método GetSecurityInfo retorna uma referência a um objeto de coleção
GPMSecurityInfo, que o script atribui ao GPOSec variável. O objeto GPMSecurityInfo contém o
conjunto de permissões atribuído ao GPO. O script então itera pela coleção e usa a propriedade Count
do objeto GPMSecurityInfo para contar e retornar o número de entradas de permissão na coleção.

Para recuperar cada entrada de permissão, o script usa a propriedade Item do objeto GPMSecurityInfo,
que retorna uma referência a um objeto GPMPermission. Após o script atribuir essa referência à
variável Ace, o script usa a propriedade Trustee do objeto GPMPermission para acessar o objeto
GPMTrustee. Chamando a propriedade TrusteeName do objeto GPMTrustee, o script determina o nome
do usuário ou grupo atribuído à permissão atual e, em seguida, atribui o nome à variável
PrincipalName.

O código na chamada C da Lista 2 usa uma afirmação Selecionar Caso para determinar o direito de
segurança atribuído àquele usuário ou grupo. Um GPO pode ter cinco direitos de segurança diferentes,
conforme definido na interface IGPMConstants. A afirmação Selecionar Caso contém esses cinco
direitos.

A primeira linha da afirmação Selecionar Caso diz ao mecanismo de tempo de execução VBScript para
comparar o valor Ace.Permission (isto é, o valor da propriedade Permission do objeto GPMPermission)
para cada caso. Quando o valor da propriedade Permission corresponder a um dos cinco direitos de
segurança, o script atribui uma descrição amigável dessa permissão à variável Perm. Finalmente, o
script usa o comando WScript.Echo do WSH para retirar o nome e a permissão do usuário ou do grupo
para a tela do console.

Lista 2 GetGPOPerms.vbs
BEGIN COMMENT
' Criar os objetos GPM e GPMConstants e conectar ao domínio.
END COMMENT
Set GPMC = CreateObject("GPMgmt.GPM")
Set Constants = GPMC.GetConstants()
‘ BEGIN CALLOUT A
Set GPMCDomain = GPMC.GetDomain("mycompany.net", "",
Constants.UseAnyDC)
‘ END CALLOUT A

‘ BEGIN CALLOUT B
BEGIN COMMENT
' Criar um objeto para o GPO para o qual deseja listar as
permissões.
END COMMENT
Set MyGPO = GPMCDomain.GetGPO
("{31B2F340-016D-11D2-945F-00C04FB984F9}")

BEGIN COMMENT
' Obter permissões.
END COMMENT
Set GPOSec = MyGPO.GetSecurityInfo()
‘ END CALLOUT B

For indx=1 to GPOSec.Count


BEGIN COMMENT

3 de 6 23/04/2011 15:39
TechNet http://technet.microsoft.com/pt-br/library/dd569839(printer).aspx

' Definir a ACE para a variável Ace.


END COMMENT
Set Ace = GPOSec.Item(indx)
BEGIN COMMENT
' Descobrir o nome do usuário ou do grupo para a ACE.
END COMMENT
Set UsrorGrp= Ace.Trustee
PrincipalName=UsrorGrp.TrusteeName
‘ BEGIN CALLOUT C
BEGIN COMMENT
' Descobrir que permissão o usuário ou grupo possui.
END COMMENT
Select Case Ace.Permission
Case Constants.permGPOApply
Perm="Read and Apply Group Policy"
Case Constants.permGPOEdit
Perm="Edit Group Policy"
Case Constants.permGPOEditSecurityAndDelete
Perm="Edit Group Policy, Modify Security and Delete
Group Policy"
Case Constants.permGPORead
Perm="Read Group Policy"
Case Constants.permGPOCustom
Perm="Custom Permission"
End Select
‘ END CALLOUT C
WScript.Echo "O usuário ou grupo: " & PrincipalName & _
" possui a seguninte permissão: " & Perm
Next

Obtendo relatórios de RSoP

Um recurso útil do GPMC é sua habilidade em executar o log e planejamento da Diretiva de Grupo.
Usando as interfaces GPMC, é possível obter por meio de programação os resultados das sessões de log
e de planejamento da Diretiva de Grupo. Por exemplo, para obter os resultados de uma sessão de log
de uma Diretiva de Grupo, será necessário usar provedores WMI (Windows Management
Instrumentation) RSoP.

RSoPLogging.vbs, que a Lista 3 mostra, demonstra como você pode usar as interfaces RSoP para
executar uma consulta de log e criar um relatório de log em formato HTML. As primeiras linhas do
script criam os objetos GPM e GPMConstants. Em seguida, o script usa o método GetRSOP do objeto
GPM para criar uma instância do objeto GPMRSOP. Este método usa três parâmetros,o primeiro
especifica o modo RSoP. Como o código na chamada A da Lista 3 mostra, uma maneira pela qual é
possível fornecer este modo é usar a propriedade RSOPModeLogging do objeto GPMConstants. Se você
estivesse executando uma sessão de planejamento, usaria a propriedade RSOPModePlanning. O
segundo parâmetro especifica o caminho para o espaço para nome WMI no qual dados RSoP anteriores
residem. Nesse caso, o parâmetro é uma seqüência nula porque não existem dados anteriores. O
último parâmetro é sempre 0.

Após criar uma instância do objeto GPMRSOP, o script define duas propriedades — as propriedades
LoggingComputer e LoggingUser do objeto GPMRSOP — para a consulta de log do RSoP. A propriedade
LoggingComputer especifica o nome da máquina de destino (neste caso, myworkstation), enquanto que
a propriedade LoggingUser especifica o nome do usuário de destino (neste caso, Darren). Em seguida,
o script executa a consulta de log chamando o método CreateQueryResults do objeto GPMRSOP, que
não possui parâmetros.

Finalmente, o script chama o método GenerateReportToFile do objeto GPMRSOP, que usa dois
parâmetros. O primeiro parâmetro especifica o tipo de relatório a gerar (HTML ou XML). O script usa a
propriedade ReportHTML do objeto Constants para especificar um relatório HTML. Se preferir receber
um relatório em XML, poderá usar a propriedade ReportXML em vez da propriedade ReportHTML. O
segundo parâmetro especifica o nome do caminho para o relatório.

O método GenerateReportToFile pode retornar uma referência ao objeto GPMResult. O objeto


GPMResult possui duas propriedades — Result e Status — que você pode usar para determinar quando
o relatório terminou a execução ou falhou em executar com êxito. Entretanto, em RSoPLogging.vbs, a
geração do relatório é a última tarefa, portanto não é necessário saber quando o relatório foi
concluído. (Você saberá que o relatório foi concluído quando o script terminar de ser executado.)
Portanto, o script não armazena a referência para GPMResult.

4 de 6 23/04/2011 15:39
TechNet http://technet.microsoft.com/pt-br/library/dd569839(printer).aspx

Lista 3 RSoPLogging.vbs
BEGIN COMMENT
' Criar os objetos GPM e GPMConstants.
END COMMENT
Set GPMC = CreateObject("GPMgmt.GPM")
Set Constants = GPMC.GetConstants()

‘ BEGIN CALLOUT A
BEGIN COMMENT
' Criar uma referência a um objeto RSoP.
END COMMENT
Set RSOP= GPMC.GetRSOP(Constants.RSOPModeLogging,"",0)
BEGIN COMMENT
‘ END CALLOUT A
' Configurar as propriedades da sessão de log do RSoP.
END COMMENT
RSOP.LoggingComputer="myworkstation"
RSOP.LoggingUser="darren"
BEGIN COMMENT
' Executar a consulta de log do RSoP e enviar os resultados a um arquivo em HTML.
END COMMENT
RSOP.CreateQueryResults()
RSOP.GenerateReportToFile Constants.ReportHTML,
"c:\reports\myrsop.html"

GPMC abre novas possibilidades

As novas interfaces GPMC são extremamente flexíveis, poderosas e relativamente bem documentadas
pela Microsoft. Elas fornecem muito mais controle sobre a infra-estrutura da Diretiva de Grupo do que
as ferramentas nativas do Win2K. Se você criar scripts personalizados e usá-los em conjunto com os
scripts que a Microsoft fornece, você poderá automatizar a maioria das tarefas de gerenciamento do
GPO.

© 2003 Windows & .NET Magazine. Todos os direitos reservados.

Obtenha uma edição de amostra da Windows & .NET Magazine em: https://secure.pentontech.com
/nt/windows/index.cfm?promocode=fs&Code=WI201XTN(site em inglês).

O Windows & .NET Magazine UPDATE é um boletim informativo gratuito enviado por e-mail que
contém notícias, dicas e outros recursos para profissionais da área de informática que usam o
Windows. Inscreva-se agora em http://email.winnetmag.com/winnetmag/winnetmag_prefctr.asp (site
em inglês).

Nós, da Microsoft Corporation, esperamos que essas informações sejam valiosas. No entanto, você
assume inteiro risco quanto ao uso das informações contidas neste documento. Todas as informações
contidas neste trabalho são fornecidas "como estão", sem quaisquer garantias, quer explícitas ou
implícitas, de sua precisão, abrangência, adequação a uma finalidade específica, titularidade ou
não-violação. A Microsoft Corporation não cria, recomenda, dá suporte ou garante nenhum dos
produtos ou das informações de terceiros mencionados neste trabalho. A Microsoft Corporation não se
responsabilizará por quaisquer danos ocorridos em decorrência do uso dessas informações, quer sejam
diretos, indiretos, especiais, incidentais ou conseqüenciais, mesmo que tenha sido informada da
possibilidade de tais danos. Todos os preços dos produtos mencionados neste documento estão sujeitos
a alterações sem aviso prévio.

5 de 6 23/04/2011 15:39
TechNet http://technet.microsoft.com/pt-br/library/dd569839(printer).aspx

Tabela de Ligações
1
http://www.winnetmag.com/Authors/Index.cfm?AuthorID=546
2
http://www.winnetmag.com/magazine/
3
http://www.winnetmag.com/
4
http://msdn.microsoft.com/en-us/library/aa814150.aspx
5
http://www.winnetmag.com/

© 2011 Microsoft. Todos os direitos reservados.

6 de 6 23/04/2011 15:39

Você também pode gostar