Windows PowerShellAutomatización de usuario de aprovisionamiento, parte 1

Don Jones

Contenido

Establecer los objetivos
Crear la estructura inicial
Obtención de entrada
Expansión
Entrantes hacia arriba la siguiente

En esta columna, me kicking fuera una serie de cuatro partes sobre crear una secuencia de comandos práctica real, de aprovisionamiento de usuario en Windows PowerShell.En esta primera parte, me centraré en la creación de la estructura de la secuencia de comandos.Próximo mes, examinaré en realidad creando un nuevo usuario habilitada para usar buzones en Active Directory y Exchange Server 2007.El mes siguiente, se se encargan de crear directorios particulares y aplicar la adecuada listas de control de acceso (ACL) a ellos.Y en la entrega final, le colocar el nuevo usuario en grupos y se encargan de rellenar los atributos adicionales de Active Directory.

Vídeo

Don Jones se activa fuera una serie de cuatro partes examina cómo puede utilizar Windows PowerShell para crear un usuario aprovisionamiento de secuencia de comandos.Ver Don demostrar estas técnicas en este vídeo.

Establecer los objetivos

La parte más complicada del aprovisionamiento de usuario es decidir de donde se entran los datos iniciales.¿Se cómo PUEDO saber qué a los usuarios crear?¿Y donde se obtener su información, como nombres, direcciones de correo electrónico, dirección de correo, departamento y otros detalles?

Casi todos los entornos tendrá una respuesta diferente y, por lo que VOY a crear una secuencia de comandos que es capaz de aceptar la entrada de diversos lugares.Que hará que la secuencia de comandos un poco más complicado, pero va ser proporciona justifican el esfuerzo largo plazo porque la secuencia de comandos será más flexible.También queremos crear una secuencia de comandos capaz de crear un cientos nuevos usuarios tan fácilmente como uno, se trata acerca de automatización, después de todo!

Crear la estructura inicial

Hacer una cantidad decente de consultoría con varias compañías, y una gran cantidad del enfoque está en las secuencias de comandos y automatización.No es sorprendente, vea una gran cantidad de secuencias de comandos y ha observado que un enfoque común es para que un administrador crear sólo una única secuencia de comandos aprovisionamiento.

A lo largo del tiempo, el administrador modifique la secuencia de comandos para controlar más y más tareas.Eso no es un método incorrecto, pero gracias a tiempo con antelación para crear un poco más estructura modularizada, puede crear una secuencia de comandos que es realmente más flexible y más fáciles de mantener.Y esto no requiere mucho trabajo adicional.

Voy a iniciar con una función central denominada provisión.Realmente no va a hacer mucho; aceptará una tabla hash (o matriz Asociativa) que contiene la información de usuario nueva y, a continuación, llamará a una serie de sub-functions que realmente se controlan todas las tareas de aprovisionamiento.Puesto que se trata de Windows PowerShell, quiero todo esto para trabajar en la canalización.Por lo que voy a que acepte una tabla hash para cada nuevo usuario, y habilitará el para aceptar una canalización toda completa de hashtables para crear varios usuarios.

La plantilla de función básica es similar a ésta:

Function Provision {
  PROCESS {
  }
}

No muy impresionante, ¿es? Con Windows PowerShell, no es necesario. Ese bloque de secuencias de comandos de proceso se ejecutará una vez para cada objeto que canalizar a la función. Y dentro del bloque script PROCESS, utilizará la variable $ _ para tener acceso al objeto canalización actual.

Windows PowerShell preguntas y respuestas

P busca la clase Win32_OperatingSystem Windows Management Instrumentation (WMI) en el sitio Web de MSDN. Indica que la clase contiene información de versión service pack. Cuando ejecuta Get-WmiObject Win32_OperatingSystem en Windows PowerShell, no se muestra ninguna información de paquete de servicio. ¿Por qué?

A la Windows PowerShell formato subsistema selecciona un subconjunto de predeterminado de las propiedades de esa clase para la presentación. Una manera de forzar que muestre todas las propiedades es usar un cmdlet de formato para reemplazar los valores predeterminados:

Get-WmiObject Win32_OperatingSystem | Format-List *

O, si sólo desea propiedades específicas:

Get-WmiObject Win32_OperatingSystem | 
Format-List BuildNumber,CSName,ServicePackMajorVersion

Obtención de entrada

La razón que no tienen la función de provisión realmente obtener los datos en su propia es que se desea una mayor flexibilidad, y no quiero volver atrás y cambiar la función de cada vez desee adoptar un nuevo formulario de entrada. En su lugar, VOY a crear dos funciones que obtienen mi información de nuevo usuario, de un archivo CSV y otro de una base de datos. Por ahora, sólo trabajará en la función relacionada con-CSV puesto que los archivos CSV son fáciles de crear con el Bloc de notas o otro editor de texto (o incluso Microsoft Excel y la mayoría de las aplicaciones de base de datos).

Un truco sobre CSVs, especialmente si se proporciona por alguien decididos menos técnicamente, es que no se puede confiar en encabezados de columna del archivo que se va a los atributos adecuados de Active Directory. Es decir, en lugar de nombres de columna como sn y samAccountName, es más probable obtener los nombres de columna como apellido y nombre de inicio de sesión. Ningún problema, Windows PowerShell puede realizar la conversión. Comenzaré suponiendo que un archivo CSV contiene las columnas siguientes:

  • Nombre de pila
  • Apellido
  • Ciudad
  • Departamento
  • Título del trabajo
  • Nombre de inicio de sesión
  • Contraseña

Puede, por supuesto, expandir esa lista, le mostraré cómo funciona en un momento. Con esta lista, un archivo CSV de ejemplo puede parecerse a esto:

First Name,Last Name,City,Department,Job  Title,Logon Name,Password
Don,Jones,Las Vegas,IT,Writer,donj,P@ssw0rd
Greg,Shields,Denver,IT,Administrator,gregs,  P@ssw0rd

Será crear una función denominada ProvisionInputCSV, que acepta un nombre de archivo como un parámetro de entrada y que simplemente leer el archivo CSV:

Function ProvisionInputCSV {
  Param ([string]$filename)
  Import-CSV $filename
}

PUEDO ejecutar esa función por sí mismo, como por lo tanto, sólo para asegurarse de es leer el archivo CSV:

ProvisionInputCSV c:\files\myinput.csv

Ahora me gustaría que la función de cada línea de la CSV se traducen en una tabla hash. Y, en lugar de conservar los nombres de encabezado de columna del archivo CSV, desea traducir los encabezados de columna en nombres de atributo aceptable en Active Directory más. Hay una varias maneras de hacerlo en Windows PowerShell pero voy a cumplir con un enfoque que es relativamente fácil: Utilice un bucle foreach para procesar cada línea del archivo CSV, una cada vez. Para cada línea del archivo, creará una tabla hash y escribir a la canalización.

Eche un vistazo a la función, que se muestra en la figura 1 . Hay unos puntos merece la pena destacar:

  • Dentro del bloque de foreach, la variable de usuario de $ contiene un solo usuario. La construcción de foreach se ejecuta a través de cada línea en la variable de los usuarios $ y rellena automáticamente $ usuario con la siguiente.
  • Dado que algunos de los nombres de encabezado de columna contengan espacios, es necesario escriba los nombres comillas.
  • He agregado otro atributo, displayName, que se construye desde dos de las columnas CSV: nombre y apellidos.
  • Salida de escritura se utiliza para escribir cada tabla de hash a la canalización.

Figura 1 (función) utilizando un bucle foreach

Function ProvisionInputCSV {
  Param ([string]$filename)
  $users = Import-CSV $filename
  foreach ($user in $users) {
    $ht = @{'givenName'=$user."First Name";
            'sn'= $user."Last Name";
            'title'= $user."Job Title";
            'department'= $user.Department;
            'displayName'= $user."First Name" + " " + $user."Last Name";
            'city'= $user.City;
            'password'= $user.Password;
            'samAccountName'= $user."Logon Name"
           }
    Write-Output $ht
  }
}                                                  
 

La conclusión práctico de todo esto es que puede utilizar una función para leer el archivo CSV y transformar los datos en hashtables. A continuación, se puede canalizar el hashtables a mi función aprovisionamiento:

ProvisionInputCSV c:\data\myinput.csv | Provision

Puesto que mi función provisión acepta una tabla hash estándar, pueden crear varias funciones de entrada de generación diferentes, ProvisionInputDatabase, Pro­visionInputSpreadsheet, y así sucesivamente.

Siempre que esas funciones habían salida mi tabla hash estándar completo de los datos de usuario, la función principal de provisión funcionará correctamente. Este enfoque permite, en el futuro, utilizar completamente nuevos orígenes de entrada para los nuevos datos de usuario, sin tener que modificar el núcleo de la función de provisión.

Expansión

Puede agregar fácilmente más columnas a la versión del archivo CSV para rellenar cosas tales como números de teléfono o lo que otros datos que desee. Sólo tiene que asegurarse de que expandir la tabla hash para contener esa información. Por ejemplo, supongamos que desea agregar la descripción y Office a mi archivo CSV. La tabla hash simplemente desea expandir agregando algunas líneas, como se muestra en la figura 2 . En otras palabras, puede utilizar la estructura básica que he proporcionado para adaptarse a los requisitos de cualquier entorno tiene para los atributos de directorio de nuevas cuentas de usuario.

Función de la figura 2 revisado

Function ProvisionInputCSV {
  Param ([string]$filename)
  $users = Import-CSV $filename
  foreach ($user in $users) {
    $ht = @{'givenName'=$user."First Name";
            'sn'= $user."Last Name";
            'title'= $user."Job Title";
            'department'= $user.Department;
            'displayName'= $user."First Name" + " " + $user."Last Name";
            'city'= $user.City;
            'password'= $user.Password;
            'samAccountName'= $user."Logon Name";
            'office' = $user.office;
            'description' = $user.description
           }
    Write-Output $ht
  }
}

Entrantes hacia arriba la siguiente

Próximo mes, comenzaré rellenar la función de provisión principal mediante la creación de un sub-function que crea nuevas cuentas de usuario. Dará dos versiones de dicha subrutina de función, uno para los amigos que dispongan de Exchange Server 2007 (que es Windows PowerShell habilitado) y otro para el equipo que no. En ese momento, realmente tendrá una secuencia de comandos muy útil: sólo se creará cuentas de usuario. Pero puesto que es una de las partes más lento de tratar con los nuevos usuarios, esta función puede ayudar a iniciar guardar inmediatamente.

Don Jones es cofundador de Tecnología concentrateddonde 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.