Windows PowerShell Automatización de usuario de aprovisionamiento, elemento 4

Don Jones

Contenido

Decidir en la entrada
Rellenar los grupos
Atributos adicionales
Se tarda reducir
Algunas consideraciones finales

Se trata de la conclusión de una serie de cuatro en la que ha mostrado cómo automatizar el proceso de aprovisionamiento de nuevos usuarios en Active Directory. Hasta ahora, ha demostrado cómo crear cuentas de Active Directory de nuevo usuario, crear sus carpetas principales y asignar permisos a estas carpetas particulares. Ahora, es necesario agregar los usuarios a algunos grupos de dominio y actualizar unos cuantos atributos de directorio.

Para actualizar rápidamente la memoria, ESTOY utilizando una "función principal" para coordinar todos estos esfuerzos, que explican en la parte 1 de esta serie. La función principal es similar a ésta:

Function Provision {
  PROCESS {
    CreateUser $_
    CreateHomeFolder $_
    AddToGroups $_
    UpdateAttributes $_
  }
}

En la parte 2 de la serie, se ha creado la función CreateUser y, en la parte 3, trata la función CreateHomeFolder. Este mes, se tratan con las funciones AddToGroups y UpdateAttributes.

Decidir en la entrada

Cuatro de mis funciones obtienen una tabla hash que contiene los atributos de usuario. Mi ejemplo original, en la parte 1, leer los atributos de un archivo Comma-Separated valores (CSV). En el momento, no entre en mucho profundidad en cómo planeado transmitir grupos de qué dominio de un usuario debe agregarse a. Hay muchas formas de que potencialmente podría hacer esto. Por ejemplo, podría tener mi archivo CSV incluir una única columna denominada grupos y rellenar dicha columna con algunos lista delimitada de nombres, como éste:

"Domain Users,Sales,Marketing,East"

O bien, pueden tener una columna independiente en el CSV para cada grupo y, a continuación, en los datos de filas coloca un 1 cuando el usuario debe pertenecer a que grupo y un 0 para los grupos no desea que el usuario pertenece a. Es posible que este aspecto en el CSV:

Domain Users,Sales,Marketing,East
1,1,0,0
1,0,1,1

Sospecha que el segundo enfoque podría resultar más fácil para una persona técnica de menor (quizás alguien del departamento de recursos humanos) trabajar con ya que parece un poco más como una lista de comprobación. Esto también es algo puede crear fácilmente en una tabla de Microsoft Access o una hoja de cálculo de Microsoft Excel y, a continuación, exportar a un archivo CSV, conservar este formato. Por lo que para que este ejemplo, voy a ir con el diseño de segundo.

Como para los "atributos adicionales", le seguir supone que los proceden columnas específicas en el archivo CSV. Por ejemplo, si desea rellenar el atributo postalCode, a continuación, vamos a Supongamos que ha incluido una columna correspondiente en el archivo CSV, y que mi función de importación (que describe en la parte 1 de esta serie) está leyendo esa columna en la tabla hash junto con las otras columnas.

Que significa que la tabla hash puede contener algo parecido a $ userinfo ["usuarios del dominio'], que sería 1 si desea que el usuario que pertenezca a ese grupo. La tabla hash también puede contener $ userinfo ['postalcode'] con el valor correspondiente para cada nuevo usuario.

Rellenar los grupos

Mi función AddToGroups necesita dar cabida a cada grupo posible que es posible que se enumeran en el archivo de entrada. Básicamente sólo voy a comprobar cada grupo para ver si este usuario tiene un 1 o 0 y, si el usuario tiene un 1, a continuación, le agregue al usuario al grupo. Puesto que el número 0 es normalmente sinónimo con el valor booleano False, al nada no, cero (como 1) es sinónimo con True, que realizará las comparaciones es bastante fácil. Por lo que la función este aspecto:

Function AddToGroup {
  Param($userinfo)
  If ($userinfo['Sales']) { Add-QADGroupMember 
    -identity 'DOMAIN\Sales' '
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
  If ($userinfo['East]) { Add-QADGroupMember 
    -identity 'DOMAIN\East' '
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
  If ($userinfo['Marketing]) { Add-
    QADGroupMember 
    -identity 'DOMAIN\Marketing' 
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
}

Y así sucesivamente. Tenga en cuenta que todavía estamos utilizando los cmdlets de Active Directory Quest, que son gratuita de www.Quest.com/PowerShell.

Código repetitivo todo lo que bugs me. CREO que lo que me gustaría hacer en lugar de ello es crear una matriz de nombres de grupo posibles y, a continuación, enumerar a través de dicha matriz. De esta forma, agregar y quitar grupos en el futuro no requieren que copie y pegue el código, simplemente tendría que modificar la matriz. Ahora la función este aspecto:

Function AddToGroup {
  Param($userinfo)
    $groups = 'Sales','Marketing','East'
  Foreach ($group in $groups) {
    If ($userinfo[$group]) { 
      Add-QADGroupMember
        -identity 'DOMAIN\'+$group
        -member ('DOMAIN\'+$userinfo
         ['samAccountName']) }
}
}

Que un poco leaner y limpieza y se acomodar fácilmente los cambios futuros.

Atributos adicionales

Por último, debe tratar con los atributos adicionales que va a definir. Aquí voy a utilizar el mismo enfoque: crear una matriz de atributos permitido nombres y, a continuación, enumerar a través de dicha matriz. En este caso, voy a permitir para una situación donde uno o varios atributos están en blanco para un usuario determinado, así:

Function UpdateAttributes {
  Param($userinfo)
    $attribs = 'postalCode','title',
      'physicalDeliveryOfficeName'
  Foreach ($attrib in $attribs) {
    If ($userinfo[$attrib] –ne '') {
      $update = @{$attrib=$userinfo
       ['attrib']}
    Set-QADUser
      -identity 'DOMAIN\'+$userinfo
       ['samAccountName'] 
      -objectAttributes $update
    }
  }
}

Porque el cmdlet Set-QADUser realmente acepta una tabla hash para el parámetro –objectAttributes, es posible que piensa que puede sólo avance se la tabla hash userinfo $. Sin embargo, tienen las cosas hay, como nombres de grupo, que no son los nombres de atributo de Active Directory para que truco no trabajar. Además, no desea enviar los atributos vacíos, por lo que la capacidad, como ha hecho con esta función, para ejecutar a través de todos los atributos en primer lugar y, a continuación, actualizar sólo los atributos que en realidad tienen valores en el archivo CSV original.

Se tarda reducir

Obviamente, hay muchas de cosas que puede hacer para expandir esta secuencia de comandos. A continuación figuran algunas ideas que vienen a cuenta:

  • En lugar de recuperar información desde un archivo CSV, se pudo obtener de una base de datos (como una base de datos de personal). Sólo tiene que reemplazar la función de importación, como se describe en la parte 1 de esta serie.
  • Podría realice otras tareas de aprovisionamiento. Sólo necesita agregar más funciones a la función principal de provisión. No olvide tener cada tarea importante en su propia función subordinado y tendrá las cosas más fácilmente escribir, depurar y mantener.
  • Podría escribir un archivo de registro de actividad de aprovisionamiento. Por ejemplo, se puede utilizar Out-File para anexar texto a un archivo de registro dentro de cada una de las funciones de subordinados.
  • Mediante las técnicas se trata en esta serie, se puede escribir una secuencia de comandos reprovisioning para reasignar grupos, permisos y los atributos de Active Directory cuando un usuario se mueve a una posición diferente dentro de la compañía.

Windows PowerShell preguntas y respuestas

P ¿Qué productos de Microsoft pueden administrarse con los cmdlets de Windows PowerShell?

AActualmente, la lista incluye Exchange Server 2007, System Center Virtual Machine Manager, System Center Operations Manager y System Center Data Protection Manager. SQL Server 2008 también incluye algunos cmdlets de Windows PowerShell, aunque en gran medida está orientados a lo que permite la ejecución de instrucciones Transact-SQL (Transact-SQL que se va al lenguaje de secuencias de comandos nativo en SQL Server).

Pero no hay ninguna razón para detener la hay. También puede administrar Active Directory mediante un conjunto de los cmdlets de libre www.Quest.com/PowerShell; los cmdlets de Internet Information Services (IIS) 7.0 están bajo desarrollo; y hay cmdlets incluso para productos que no sean de Microsoft, como VMWare, IBM WebSphere MQ etc.. También puede utilizar las herramientas de línea de comandos existentes para administrar componentes de Windows, como IIS, DNS, DHCP, Firewall de Windows y más.

Algunas consideraciones finales

Espero que encontrará la secuencia de comandos completa y todas sus funciones subordinadas para ser, al menos, un punto de partida útil para crear sus propias secuencias de comandos aprovisionamiento. Por medio de conclusión, desea ofrecer unos comentarios acerca de algunas de las decisiones que ha realizado a lo largo.

Optado por utilizar hashtables para la información de usuario en lugar de objetos personalizados porque hashtables proporcionan una manera un poco más fácil para enumerar a través de un conjunto de propiedades cuando no sé con antelación cuáles serán esas propiedades. En otras palabras, hashtables son un poco más fácil de usar cuando sé que necesito agregar varios atributos y cuando no pueden utilizar los mismos atributos de cada vez ejecute la secuencia de comandos.

Optado por utilizar cacls.exe para modificar permisos de carpeta porque, como se describe en la parte 3 de esta serie, es simplemente más fácil que el shell *-cmdlets ACL. Además, mediante cacls.exe me ha permitido Demuestre una forma que se pueden parametrizar herramientas externas de la línea de comandos mediante las variables de shell.

Optado por utilizar de Quest cmdlets de Active Directory lugar ADSI porque los cmdlets ofrecen lo que me siento es un enfoque más nativo para manipular el directorio de Windows PowerShell. ADSI puede constituir todo un trabajar y obliga a utilizar un estilo de programación más procedimiento sobre el estilo de comandos centrado en que podía utilizar en este ejemplo.

Si elige realizar las mismas decisiones para las secuencias de comandos, o no espero que encontrará estas técnicas y los enfoques diferentes útil para solucionar algunos de los desafíos de automatización administrativa. Invitamos también a que compartir sus sugerencias y mejoras con me. En mi sitio Web, ConcentratedTech.com, encontrará una página de contacto donde está para enviar un correo electrónico. Y por favor, asegúrese me saber si pueden compartir sus comentarios en un problema futuro de TechNet Magazine permite.

Don Jones es cofundador de Tecnología concentrated, en blogs semanales sobre Windows PowerShell, SQL Server, app-V y otros temas. Póngase en contacto con él a través de su sitio Web.