Windows PowerShell Automatización de usuario de aprovisionamiento, parte 2

Don Jones

Contenido

Crear un usuario
¿Falta Exchange?
Opciones de opciones, opciones,

En la entrega anterior de esta columna, he creado la base para un usuario automatizada aprovisionamiento de secuencia de comandos. He creado una función denominada ProvisionInputCSV, que está diseñado para leer información de usuario de un archivo CSV y devolver dicha información en forma de una tabla hash. Tardó ese enfoque porque me ha permitido para, a continuación, crear varias otras funciones de "importar", importar una base de datos, importar desde una hoja de cálculo, o lo que, y cada una devolución un aspecto idéntico tabla hash. Mi función aprovisionamiento real simplemente necesita Aceptar que tabla hash, que podría contener elementos de un usuario nombre, último, ciudad, departamento y así sucesivamente.

En la columna de este mes, puede empezar a usar esa tabla hash para crear un nuevo usuario habilitada para usar buzones en Active Directory (o un usuario no buzón,) si no utiliza Exchange Server 2007.

El marco de trabajo de la función aprovisionamiento básico es similar a ésta:

Function Provision {
  PROCESS {
  }
}

Ya ha establecido que la función recibirá una tabla hash de la canalización, tendrá acceso a través de la variable especial $ _ dentro de la scriptblock proceso. La tabla hash tiene claves que se corresponden con atributos de usuario y los valores de dichas teclas contendrá información de cada usuario. Algunos ejemplos son:

  • $ _ ['sn"] = "Jones"
  • $ _ "[givenName"] = "Don"
  • $ _ ["sAMAccountName"] = "donj"

Los atributos exactos disponibles dependerá de lo que haya colocado en la función ProvisionInputCSV u otra función de importación.

Tenga en cuenta que normalmente aprovisionamiento de usuario implica varios pasos, como la creación de una cuenta, crear una carpeta y así sucesivamente. Sería fácil de cumplir todas las tareas en mi función provisión, pero hacerlo haría que la función es bastante complicada, y mucho más complicado significa más difícil para depurar y solucionar problemas. En su lugar, usaré la función de provisión como una especie de lista de tareas principal, dividir cada tarea fuera en su propia función subsidiaria. Al final, la función de provisión será similar a esto:

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

Windows PowerShell preguntas y respuestas

P no se ve un parámetro –computerName de cmdlets muy muchos. ¿Windows PowerShell se puede utilizar para administrar equipos remotos?

una versión de Windows PowerShell 1 ha limitado de funciones remotas. El cmdlet Get-WmiObject ofrece, como es posible que ha descubierto, un parámetro computerName modo que se puede recuperar información desde uno o varios equipos remotos, así:

Get-WmiObject Win32_Service –computerName
  "localhost","server2","server3"

Pero eso es acerca de la capacidad de administración remota sólo integrada que encontrará en la primera versión de Windows PowerShell.

Sin embargo, otras tecnologías, como Exchange Server y Active Directory, son intrínsecamente "remotos", es decir, el equipo cliente sabe no es un servidor de correo o un controlador de dominio y se apropiadas de un contacto como. Por lo que realmente no es necesario un de parámetro de computerName de comandos que funcionan con esas tecnologías.

Cada una de las cuatro funciones subsidiarias administra una de las principales tareas que describen en la primera parte de esta serie y cada uno se se pasa el conjunto completo de información del usuario en la variable $ _. Por lo que hay, se realiza mi script aprovisionamiento!

Crear un usuario

Sólo kidding. Obviamente, aún tengo que escribir la funcionalidad real, que reside en las cuatro funciones subsidiarias. En esta entrega, me centro en la función CreateUser. La primera iteración de este código supone que hay Exchange Server 2007 en su entorno. (Perdón, esto no funciona para versiones anteriores de Exchange Server.) Cualquier equipo que está utilizando para ejecutar esta secuencia de comandos debe las herramientas de administración de Exchange Server instalado, y deberá para asegurarse de que se carga el complemento servidor de Exchange para Windows PowerShell. Para comprobar, ejecutar Get-PSSnapin y vea si está disponible. Si no lo está, ejecutar Get-PSSnapin-registrado para asegurarse de que está instalado. A continuación, para cargar el complemento en el shell, ejecute esto:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin. 

Si recibe cansado de escribir este comando, puede agregarlo a la secuencia de comandos que contiene todas las funciones de aprovisionamiento o puede agregar a su perfil Windows PowerShell que se carga cuando se abre el shell. (Explica cómo puede crear perfiles personalizados en la entrega de 2008 de octubre de esta columna " El poder de perfiles."

Éste es el marco básico para mi función:

Function CreateUser {
  Param($userinfo)
}

Observe que ha incluido un bloque de param, que indica al shell qué parámetros estoy esperando. Cuando llama a esta función, la tabla hash que se pasa se almacenarán automáticamente en la variable de userinfo $.

Aquí es otra manera de escribir este:

Function CreateUser($userinfo) {
}

Esta sintaxis tiene exactamente el mismo efecto. Sin embargo, el del shell utiliza la primera versión internamente para que tienden a usar esa versión yo mismo. También CREO que utiliza el bloque de param facilita la función de la lectura hacia abajo de la carretera.

Dentro de la función, necesito ejecutar un único comando: nuevo buzón. Esto realmente algo más que crea un nuevo buzón; también crea un nuevo usuario en Active Directory. Necesito saber un par de fragmentos de información con antelación, incluidos la base de datos de buzones que donde desea el buzón para almacenarlo. La sintaxis básica es similar a éste (que es realmente todo una larga y única línea de comandos):

New-Mailbox –UserPrincipalName don@concentratedtech.com 
  -alias DonJ 
  –database "Storage Group 1\Mailbox Database 1" 
  –name Don Jones 
  –organizationalUnit Users 
  –password $password 
  –FirstName Don 
  –LastName Jones 
  –DisplayName "Don Jones" 
  –ResetPasswordOnNextLogon $true

Puede ver que necesito elaborar una contraseña para el nuevo usuario y decidir qué unidad ORGANIZATIVA (unidad organizativa) para poner el usuario en. (En este ejemplo, "usuarios" es técnicamente un contenedor, no una OU, pero el comando acepta bien). Suponiendo que se ha modificado mi función ProvisionInputCSV para producir todo lo que necesita, puede esperar la variable de userinfo $ para incluir la información de ­minimum siguiente:

  • UPN (nombre principal de usuario)
  • OU (unidad ORGANIZATIVA de destino)
  • MailDatabase
  • givenName (nombre)
  • sn (Apellido)
  • samAccountName (que VOY a utilizar como el alias)

Me ofrece la siguiente función:

Function CreateUser {
  Param($userinfo)

New-Mailbox –UserPrincipalName $userinfo['upn'] 
  -alias $userinfo['samAccountName'] 
  –database $userinfo['mailboxDatabase'] 
  –name ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –organizationalUnit $userinfo['ou'] 
  –password 'P@ssw0rd!' –FirstName ($userinfo['givenName'] 
  –LastName $userinfo['sn']) 
  –DisplayName ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –ResetPasswordOnNextLogon $true
}

(De nuevo, el comando debe ser una sola línea, pero ha dividido aquí para facilitar el resumen.) Combinar con mis funciones de provisión y ProvisionInputCSV, esta función se crear los nuevos usuarios y que sean habilitada para usar buzones.

Algunas cosas interesantes merecen la pena destacar aquí:

  • No hay nada en el comando distingue mayúsculas de minúsculas, aunque Active Directory conserva cualquier mayúsculas y minúsculas se utiliza en cosas como los nombres.
  • Estoy dando los de parámetros de nombre y de displayName una expresión como un valor. Incluya la expresión (entre paréntesis) para asegurarse del shell evalúa la expresión y pasa los resultados al parámetro. Esta técnica permite me utilice los atributos givenName y sn para construir un nombre completo.
  • Ha codificados una contraseña temporal en lugar de realizar una copia. Ajustando las contraseñas requiere una forma comunicar las contraseñas a los usuarios, y que está fuera del ámbito de este tema.
  • La variable true $ está integrada en el shell y representa el valor booleano true (el opuesto de false).

¿Falta Exchange?

Windows PowerShell no ayudar a crear un usuario habilitada para usar buzones si no utiliza Exchange Server 2007. Sin embargo, todavía puede crear la cuenta de usuario básica en Active Directory. Para ello, necesitará los cmdlets de Active Directory gratuitos para Windows PowerShell, que están disponibles en www.Quest.com/PowerShell. Instalar los que están en el equipo donde se se ejecute la secuencia de comandos y agregar el complemento al shell mediante la ejecución de esta:

Add-PSSnapin Quest.ActiveRoles.ADManagement 

Tenga en cuenta que el nombre del complemento, incluye el nombre de un producto Quest comercial (ActiveRoles Server), pero no necesita ese producto para usar los cmdlets en el complemento.

Se utilizará el comando New-QADUser, ejecutar algo así en la función CreateUser:

New-QADUser –samAccountName $userinfo['samAccountName'] 
  –parentContainer $userinfo['OU'] 
  –FirstName $userinfo['givenName'] 
  –LastName $userinfo['sn'] 
  –Name ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –UserPrincipalName $userinfo['UPN'] 
  –displayName ($userinfo['givenName'] + ' ' + $userinfo['sn']) 
  –userPassword "P@ssw0rd!" | Enable-QADUser

Tenga en cuenta que ha canalizar la salida de este comando, que consta de un usuario crea, a un segundo comando que permite la cuenta de usuario. Puede decidir si es apropiado para su entorno de ese diseño.

El comando New-QADUser tiene docenas de parámetros que puede utilizar para establecer los atributos adicionales de Active Directory, pero me deja este comando como - es para que sea más paralelo con la versión de Exchange Server. Le llenar atributos adicionales de la última parte de esta secuencia de comandos.

Opciones de opciones, opciones,

Incluso si se ejecuta Exchange Server 2007, aún puede que prefiera utilizar QADUser de nuevo para crear cuentas de usuario. Le hacerlo ciertamente, ofrece más flexibilidad, como este comando puede controlar cualquier atributo de directorio. Y New-QADUser realice la secuencia de comandos compatible con cualquier entorno si Exchange Server 2007 está en uso o no.

Si dispone de Exchange Server 2007, puede utilizar una sintaxis alternativa de New-Mailbox para crear un buzón y vincularlo a la cuenta Active Directory creado sólo. Encontrará que Windows PowerShell ofrece normalmente varias formas diferentes de hacer algo, el enfoque correcto es normalmente el mejor para usted con la menor cantidad de aprendizaje que.

Próximo mes, le tomar un poco más esta función aprovisionamiento al tener que crear las carpetas particulares para los usuarios y aplicar el derecho listas de control de acceso (ACL) a esas carpetas. Son especialmente difícil trabajar con listas de control de acceso, y es posible que sorprenda Windows PowerShell técnica que puede ayudarle a obtener el trabajo realizado más fácilmente.

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.