La directiva de grupo

Automatizar la administración de directivas de grupo con Windows PowerShell

Darren Mar-Elia

Partes de este artículo se basan en software preliminar y está sujeta a cambios.

En resumen:

  • Mediante las API GPMC
  • Creación de informes de directiva de grupo con Windows PowerShell
  • Cmdlets en Windows 7 y Windows Server 2008 R2

Contenido

¿Qué es ofrecer GPMC?
Automatizar el ciclo de vida de objeto de directiva de grupo
Automatizar la característica de informe de directivas de grupo
Generar un informe basado en HTML
Generar un informe basada en XML
Informar sobre el registro de RSoP
Una forma simplifican

La directiva de grupo es una tecnología eficaz aún compleja. Se utiliza, en cierta medida, en casi todos los entornos. Y para muchos que dependen de él mucho para proteger y bloquear su entorno de Windows, directiva de grupo es una parte clave de su infraestructura.

Dicho esto, estoy siempre sorprenda ver cómo poco automatización se utiliza para administración de directivas de grupo en muchas organizaciones de TI. Cuando el grupo de directiva de consola de administración (GPMC) enviada, Microsoft realiza un conjunto de API y secuencias de comandos de ejemplo disponibles para automatizar las tareas que se realizaron con dicha consola. Hay mucho que se pueden realizar mediante estas API, así como oportunidades para automatizar otros aspectos de administración de directivas de grupo, como tareas de solución de problemas y diagnóstico. Y, con la llegada de Windows PowerShell, algunas de estas tareas han vuelto más fáciles.

Thorbjörn Sjövold describen utilizando Windows PowerShell para obtener algunas de las API de GPMC en su artículo" Simplificar la administración de directivas de grupo con Windows PowerShell." En este artículo, desea crear en esa base con algunas técnicas de automatización adicionales que puede usar para automatizar aún más la administración del entorno de directiva de grupo.

¿Qué es ofrecer GPMC?

La consola GPMC se centra en funcionamiento contra el toda directiva de grupo (objeto) (GPO) y sus permisos asociados, vínculos y así sucesivamente. No ofrece automatización o administración de los valores reales en el GPO. Sin embargo, puede ser útil realizar la automatización con el GPO completo como una manera de administrar el proceso de cambio en su entorno de directiva de grupo. Por ejemplo, puede utilizar la API de GPMC para modificar vínculos a objetos de directiva de grupo. Si tiene un nuevo GPO que desea implementar, puede secuencias de comandos la creación del objeto de directiva de grupo y secuencias de, a continuación, se puede comandos el proceso de vinculación después de su configuración ha se rellenaran. Se puede también scripts el cambio de permisos de un GPO, en caso de desee modificar los grupos de seguridad van dirigidos por un objeto de directiva de grupo o quién puede modificar dicho objeto.

Y, por supuesto, siempre se pueden usar las API para consultar la información acerca de objetos de directiva de grupo, en contraposición a sólo cambios. Esto incluye la generación de informes de basadas en HTML y XML para la configuración de GPO, así como informes de conjunto resultante de directivas (RSoP) contra las estaciones de trabajo remotas y los servidores para determinar si la directiva de grupo se ha aplicado correctamente.

Es también merece la pena mencionar cuando Microsoft libera la GPMC actualizada que se incluye con Windows Vista SP1 y Windows Server 2008, hay algunas actualizaciones a las API para admitir algunas de las nuevas características que admiten general en GPMC y la directiva de grupo. Éstas incluyen la capacidad para crear nuevos GPO de "GPO inicial" y para agregar comentarios a un objeto de directiva de grupo. Objetos de directiva de grupo Starter son como plantillas, permiten crear un conjunto de configuración de la directiva de plantilla administrativa que, a continuación, puede aplicar a un nuevo GPO, pre-populating algunas de sus opciones. Desee empezar examinando cómo puede automatizar el proceso de creación, permissioning y vincular un objeto de directiva de grupo y, a continuación, mostrar cómo puede aprovechar algunas de estas nuevas características GPMC en esta automatización.

Automatizar el ciclo de vida de objeto de directiva de grupo

Para demostrar cómo puede automatizar la creación y administración de GPO, voy a usar Windows PowerShell y las API de GPMC. En mi ejemplo, VOY a crear un GPO denominado "Directiva de marketing de TechNet". Cuando crea el objeto de directiva de grupo, voy a utilizar un GPO inicial denominada "plantilla de bloqueo de seguridad de usuario" como punto de partida y agregar un comentario en el que se indica que creó el objeto de directiva de grupo. Puede crear el GPO de inicial con las API de GPMC, pero en este ejemplo, voy a suponer que ya existe.

El siguiente paso que se desea automatizar es la permissioning del objeto de directiva de grupo. Voy a permiso el objeto de directiva de grupo para que sólo los usuarios dentro del grupo "usuarios marketing" va a procesar la directiva y VOY a agregar un grupo denominado los "Administradores de objeto de directiva de grupo" con los permisos para modificar el objeto de directiva de grupo. Por último, voy a vínculo el objeto de directiva de grupo a la unidad ORGANIZATIVA marketing en el dominio de Active Directory.

El comandos de Windows PowerShell completo, que ha denominado gpoCreate.ps1, se muestran en la figura 1 . He agregado los números de línea simplemente referencia.

Figura 1 scriptt de gpoCreate.ps1 el Windows PowerShell

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)

Línea 1 es necesario para empezar a usar las API de GPMC. Se utilizará en cualquier secuencia de comandos que escribir de GPMC. Esta línea crea una instancia del objeto base GPMC y le asigna a la variable de gpmc $. Línea 2 es otro comando utilizada. La consola GPMC proporciona un conjunto de constantes útiles que se utilizan en el espectro de tareas para indicar un estado determinado. Verá cómo se usa más adelante en la secuencia de comandos, pero por ahora, sólo le asignará las constantes a la variable de constantes $.

En la línea 3, es necesario obtener una referencia al dominio de Active Directory que le funciona en. En mi ejemplo, que es un dominio denominado cpandl.com. Para hacerlo, llamo al método GetDomain en la variable de gpmc $. Los dos parámetros null $ son opcionales y podrá especificar un controlador de dominio concreto para conectarse al conectarse al dominio. Dejando estos null, me elegir esencialmente el valor predeterminado, que es el emulador PDC controladores de dominio.

En la línea 4, es necesario obtener una referencia a la inicial (plantilla de bloqueo de seguridad de usuario). El método de GetStarterGPO sólo admite llamar a los GPO inicial por su GUID, para que tenga que entran en la consola de GPMC para buscar. Secuencias de (podría dispone de comandos también.) Eso es el GUID estoy pasando al método GetStarterGPO.

En línea 5, una vez que tenga la referencia de objeto de directiva de grupo inicial, uso, para crear el nuevo GPO, mediante el método CreateGPOfromStarterGPO que está disponible en la variable de dominio $. El GPO recién creado se asignan a $ gpo para que pueda usarlo. Tenga en cuenta que en este momento, el objeto de directiva de grupo no tiene ningún nombre (bueno, tiene el nombre predeterminado de "objeto de directiva de grupo nuevo"). Por lo que en la línea 6, modifique la propiedad displayName en gpo $ darle un nombre nuevo. Línea 7 es el lugar agregan un comentario en el objeto de directiva de grupo, estableciendo la propiedad de descripción en gpo $.

Ahora que tenemos el GPO creado, el siguiente conjunto de tareas es modificar los permisos en el GPO. En la línea de 8, empiezo desactivar obteniendo la lista actual de permisos en el GPO recién creado, se utiliza el método GetSecurityInfo en el objeto de directiva de grupo. El enfoque para modificar permisos en un objeto de directiva de grupo es obtener la lista de permisos actuales en el objeto de directiva de grupo, agregar y eliminar las entradas de esa lista según sea necesario y, a continuación, volver a aplicar la lista en el objeto de directiva de grupo. Con ese fin, en la línea de 9, quitar el permiso predeterminado de los usuarios autenticados del GPO recién creado.

En líneas de 10 y 11, crear los dos permisos nuevos que desea agregar en el objeto de directiva de grupo. SE crearlos mediante la gpmc $ método CreatePermission, suministra el nombre del (grupo de usuario) Trustee y el permiso que desea que tiene el grupo. Tenga en cuenta que ESTOY utilizando la variable de constantes $ para definir los permisos. La propiedad $constants.permGPOApply otorga los permisos de "Read and Apply Group Policy" que permiten los miembros de un grupo para procesar un objeto de directiva de grupo, mientras que la propiedad permGPOEdit otorga la capacidad para ese grupo para modificar un objeto de directiva de grupo. El parámetro es false $ al final de la llamada de método CreatePermission simplemente indica que el permiso debe no se heredan, que es el predeterminado para los permisos de objeto de directiva de grupo.

Una vez que se crean los dos permisos, líneas de 12 y 13 agregarlos volver a la lista de permisos $ y 14 línea llama al método SetSecurityInfo en el GPO para aplicar la nueva lista de volver al objeto de directiva de grupo.

Las dos líneas finales vincule el GPO a la unidad ORGANIZATIVA marketing. En la línea de 15, llame al método GetSOM (ámbito de administración (SOM) significa "ámbito de administración") en la variable $ dominio "conectar" a la unidad ORGANIZATIVA. En la línea de 16, llame al CreateGPOLink en el objeto de som $ recién creado y se pásele dos parámetros. El primer parámetro indica el orden en la unidad ORGANIZATIVA que desea el GPO que se van a vincular (una unidad organizativa (OU) puede tener varios GPO vinculados a ella). El "1" se indica para el primer parámetro indica que desea el GPO que se vincularán primero en la lista. El segundo parámetro (en este caso, la variable de gpo $) es la referencia a los GPO desee vincular. Y ahora ha creado, permissioned correctamente y se vincular un GPO por medio de automatización. El resultado se muestra en la figura 2 .

fig01.gif

La Figura 2 ver el GPO recién creado

Automatizar la característica de informe de directivas de grupo

Otro aspecto de administración de directivas de grupo que puede automatizar es el informe. En este sentido, hay al menos dos tipos de informes que ofrece de GPMC. La primera es la posibilidad de informar sobre la configuración de un objeto de directiva de grupo. Esto permite generar cualquier un basados en HTML o XML informe de la configuración que estén habilitadas actualmente en el GPO, como se muestra en la figura 3 .

fig02.gif

La figura 3 informes en la configuración de objeto de directiva de grupo

La segunda función informes permite Generar conjunto resultante de directivas (RSoP) o informes de resultados de directiva de grupo. Hay dos tipos de informes de RSoP, registro y el planeamiento. Un informe de registro se ejecuta en un escritorio remoto o servidor, que indica qué directivas se entregan a ese sistema remoto y si se realizó correctamente. El informe de planeamiento de RSoP permite realizar análisis y si contra una determinada unidad ORGANIZATIVA, equipo o usuario para determinar qué directivas se aplican. En ambos casos, la sesión y el planeamiento, puede generar HTML o XML utilizando la API de GPMC y Windows PowerShell de salida.

Generar un informe basado en HTML

Para generar un informe de configuración de objeto de directiva de grupo en Windows PowerShell, comenzar con dos comandos de inicialización familiar, que utiliza en la secuencia de comandos anterior:

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

A continuación, se necesita para obtener una referencia a los GPO que desea informar sobre, así:

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

En la línea 3 aquí, vuelva a estoy conectar en el dominio y, a continuación, en la línea 4, utilice el método GetGPO en el dominio para obtener una referencia a los GPO desea informar sobre. En este caso, tienen que pasar el GUID del GPO, que resulta ser la "predeterminada directiva de dominio."

A continuación, se necesita para generar el informe de configuración:

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

A continuación, me llamar al método GenerateReportToFile en el GPO para crear el informe de configuración. El primer parámetro utiliza la variable de constantes $ para especificar un tipo de informe HTML. El segundo parámetro apunta a la ruta de acceso que van a guardar el informe.

Generar un informe basada en XML

Otra forma de acceso a los datos configuración de uso de Windows PowerShell es aprovechar el análisis las capacidades de Windows PowerShell y su capacidad para generar un informe de configuración en XML de XML integrado. Por lo tanto, en lugar de línea 5 anterior, cambiar a las siguientes:

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

En este ejemplo, ESTOY utilizando un método diferente en el GPO, denominado GenerateReport. Este método toma un parámetro único, que es el tipo de informe. Pero en este caso, me asignando los resultados de la llamada al método en un informe de variable denominada $ y estoy precede ese nombre de variable con el acelerador de tipo de Windows PowerShell [xml], que indica a PowerShell para tomar la salida del comando que estoy almacenando en informe $ y convertirlo en un documento XML en lugar de simplemente un montón de texto. Sin embargo, para poder obtener el XML real desde GenerateReport, debe utilizar la propiedad Result en dicho resultado, que es lo que ve al final de esa instrucción. Por lo que la propiedad de resultados contiene el XML real que ESTOY utilizando para generar el documento XML.

Una vez que tenga el código XML en la variable de informe $, pueden hacer muchas cosas interesantes con él. Por ejemplo, considere el siguiente comando:

$report.GPO

Esto devuelve el elemento "objeto de directiva de grupo" en el documento que proporciona información de información general sobre el GPO estoy informar sobre. O este comando:

$report.GPO.LinksTo

Esto devuelve una lista de todos los lugares en los que se ha vinculado este objeto de directiva de grupo.

Pero más Curiosamente, puede usar la naturaleza de XML estructurada para investigar la configuración real en el GPO desde la línea de comandos. Por ejemplo, dado que este es el GPO de la directiva de dominio predeterminado, sabe que probablemente contiene algunas opciones de seguridad relacionados con la directiva de contraseñas. Navegando el espacio de nombres de objeto de directiva de grupo como representado en el archivo XML, puede ir rápidamente al esa configuración, los siguientes:

$report.GPO.Computer

Esto devuelve información sobre la parte del equipo del objeto de directiva de grupo. Si ven las propiedades en esta propiedad de equipo, observe un conjunto de áreas de directiva en la propiedad ExtensionData, tal como se muestra en la figura 4 .

fig03.gif

La figura 4 ver la configuración del objeto de directiva de grupo a través de XML

En este ejemplo, hay dos áreas de extensión de la parte de equipo de este objeto de directiva de grupo: registro y la seguridad. Por lo que ejecute el comando siguiente:

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

Esto me proporciona una lista de áreas de la directiva implementada en la sección de directiva de seguridad. PUEDO ver dos propiedades denominadas cuenta y opciones de seguridad. Ahora escriba el siguiente comando:

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

Esto proporciona me una lista de cada uno de la configuración de directiva de cuentas de este objeto de directiva de grupo, tal como se muestra en La figura 5 .

fig04.gif

La figura 5 ver la configuración de directiva de la cuenta en el objeto de directiva de grupo

Observe que algunas de las opciones de configuración no realmente mostrar el valor en la figura 5 . Cada valor se devuelve como un miembro de una colección en la propiedad Account. Modo para ver, por ejemplo, el valor de Longitud de contraseña mínima, necesita índice en la colección, así:

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

Una vez que recibe el bloqueo de desplazarse por el espacio de nombres XML para la configuración de objeto de directiva de grupo, puede obtener acceso a determinados valores fácilmente y utilizar esta capacidad en conjunción con Windows PowerShell para encontrar los valores de configuración de un objeto de directiva de grupo muy rápidamente.

Informar sobre el registro de RSoP

Al igual que con objeto de directiva de grupo Configuración, puede generar un informe basados en XML o HTML en Windows PowerShell que se muestra la configuración de directiva de grupo que ha aplicado a un equipo dado. El método es un poco diferente, aunque. A partir volver a los dos comandos de inicialización, tomar la secuencia de comandos en una dirección ligeramente 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")

Después de las líneas 1 y 2 configurar el proceso, línea 3 crea la variable de rsop de $ llamando al método GetRSOP en gpmc $. En esa llamada de método, indique que desea crear un registro de RSOP y no un informe de diseño. Las líneas 4 y 5 conjunto de propiedades que $ rsop objeto para indicar qué equipo y usuario desea recopilar datos RSOP frente a. A continuación, el único propósito de línea 6 es conectar con el equipo especificado en la línea 5 y generar el espacio de nombres RSoP para esta consulta. Por último, en la línea 7, había salida los resultados de la consulta a un archivo HTML.

Observe que el objeto de RSoP también tiene un método GenerateReport similar al objeto de directiva de grupo Configuración de ejemplo. Y puede representar el informe de RSOP en un documento XML y desplazarse por ella en Windows PowerShell para averiguar lo que sucede desde una perspectiva de directiva de grupo en que cliente remoto. Por ejemplo, supongamos desee averiguar rápidamente si Procesamiento de directivas de grupo se realizó correctamente la parte de equipo de procesamiento de objeto de directiva de grupo. Puede usar la secuencia de comandos anterior, pero reemplace línea 7 Esto:

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

Esto coloca mi informe RSoP en un documento XML.

A continuación, pueden navegar hacia el espacio de nombres XML para averiguar el estado de extensión de cliente (CSE) para el equipo de manera:

$rsopReport.Rsop.ComputerResults.ExtensionStatus

Al hacerlo, aparece una lista que me muestra el estado en cada CSE que se ha procesado por el equipo.

Una forma simplifican

Como he mostrado hasta ahora, hay una gran cantidad de powerin aprovechando las API de GPMC para automatizar la directiva de grupo ciclo de vida, informes y las tareas de diagnóstico. Pero muy pocos pasos para obtener el resultado deseado. Sin embargo, hay somerelief y aún más entrantes en el futuro.

Ha creado un conjunto de 25 cmdlets GPMC Windows PowerShell libres que contienen la mayoría de las funciones GPMC comunes en los cmdlets fáciles de usar. Puede descargar estos cmdlets GPMC en www.sdmsoftware.com/Freeware. Para proporcionarle un ejemplo del proceso simplificado, en nuestro primer ejemplo de creación y, a continuación, permissioning y vincular un objeto de directiva de grupo, la siguiente secuencia de comandos con los cmdlets GPMC debe realizar las tareas mismas como la secuencia de comandos que presentado anteriormente, pero con menos 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

Aún mejor, 7 de Windows y Windows Server 2008 R2 proporcionará cmdlets integrados de Windows PowerShell de GPMC. Por ejemplo, para crear el objeto de directiva de grupo de ejemplo a partir de un GPO inicial con un comentario, puede emitir un comando de Windows PowerShell, los siguientes:

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

Microsoft también es agregar compatibilidad para leer y escribir un subconjunto de la configuración de directiva de grupo. En concreto, habrá compatibilidad para leer y escribir valores del registro en directiva de plantilla administrativa nativo o la extensión de registro más reciente de preferencias de directiva de grupo. Por ejemplo, para escribir un nuevo valor del registro en preferencias de directiva de grupo, se ejecute el comando siguiente:

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

Aquí, el cmdlet set-GPPrefRegistryValue toma un número de parámetros para crear una configuración de directiva del registro dentro de la directiva" de Darren TechNet" GPO para el valor del registro HKEY_LOCAL_MACHINE\Software\SDM Software\Path = REG_SZ 2. El parámetro de contexto indica que la directiva si debería ser colocar en la parte de equipo o usuario del objeto de directiva de grupo, y el parámetro de acción especifica cómo aplicar el valor del registro y corresponde a las opciones en la interfaz de usuario de GPP (otras opciones incluyen reemplazar, crear y eliminar).

Partir del momento de escribir este artículo, 7 de Windows y Windows Server 2008 R2 se planean para enviar con los cmdlets 25 para administrar la directiva de grupo. Una vez que éstos se disponible, administrar la directiva de grupo a través de Windows PowerShell será mucho más fácil.

Darren Mar-Elia es un MVP de directiva de grupo de Microsoft, creadora del sitio conocido de la directiva de grupo www.gpoguy.comy coautor de Microsoft Windows Group Policy Guide (Microsoft Press, 2005). También es director y fundador de SDM Software, Inc. Ponerse en Darren@gpoguy.com.