Como ir equipo por equipo añadiendo permisos es un rollo, la manera más sencilla de hacerlo es a través de las Directivas de Grupo GPO :
Mostrando entradas con la etiqueta Active Directory. Mostrar todas las entradas
Mostrando entradas con la etiqueta Active Directory. Mostrar todas las entradas
jueves, 10 de noviembre de 2016
Añadir usuario de dominio al grupo de Administradores locales
Seguro que en algún momento te has encontrado con la necesidad de tener que dar permiso a un usuario del dominio como Administrador local de una serie de equipos del dominio, para hacer un despliegue de una aplicación o realizar algún cambio en la configuración local que no puedes hacer a través de las herramientas de gestión que uses habitualmente.
Como ir equipo por equipo añadiendo permisos es un rollo, la manera más sencilla de hacerlo es a través de las Directivas de Grupo GPO :
Como ir equipo por equipo añadiendo permisos es un rollo, la manera más sencilla de hacerlo es a través de las Directivas de Grupo GPO :
miércoles, 27 de abril de 2016
Nuevo dominio de AD preparado para sincronizar con Office 365 2/2
Esta es la segunda parte del post Nuevo dominio de AD preparado para sincronizar con Office 365 en el que expliqué como preparar un nuevo dominio para poder sincronizarlo con el AD de Azure.
Antes de empezar a sincronizar el Active Directory con la nube, hay que tener configurado y en marcha un tenant de Office 365 y añadir el dominio que queremos usar.
Pasos
1. Microsoft recomienda pasar la herramienta IdFix antes de empezar con la sincronización del Active Directory para solucionar posibles problemas con la información de los objetos. En este caso se trata de una AD nuevo así que no vamos a encontrar problemas.
2. Después de comprobar que no tenemos errores en nuestro AD, descargamos y ejecutamos la herramienta Azure AD Connect .
viernes, 22 de abril de 2016
Nuevo dominio de AD preparado para sincronizar con Office 365 1/2
Viendo que todo va hacia la nube, el siguiente post explicaré como crear un dominio local desde 0 y dejarlo preparado para sincronizar con un tenant de Office 365. Definiré también los pasos previos para permitir que el mismo usuario y contraseña nos sirve para identificarnos tanto en los sistemas locales como en los servicios de Azure.
Recomendaciones
Siguiendo las best practices de Active Directory, lo primero en tener en cuenta es el nombre del dominio. La recomendación es que si los servicios online de la empresa están en lasendadeladmin.com , el FQDN del AD sea por ejemplo ad.lasendadeladmin.com o internal.lasendadeladmin.com .
Así los nombres de los servidores serian:
·
DC01.ad.lasendadeladmin.com
·
FILESERVER .ad.lasendadeladmin.com
·
...
También se recomienda usar la dirección de email como UPN. Utilizar un login con un dominio público como puede ser la dirección de email, simplifica la integración con servicios cloud como Office365 y Azure.
Pasos
1. El primer paso es definir el nombre del equipo que hará de Domain Controller y ponerle una IP fija.miércoles, 23 de septiembre de 2015
Formulario Powershell para alta de usuarios (parte 1/3)
Estoy descubriendo la herramienta genial que es Powershell .
Como comente en el post anterior , estamos preparando una serie de scripts para automatizar la gestión de usuarios. Investigando un poco sobre como hacer estos scripts, descubrí que en PowerShell han implementado una librería para hacer un interfaz gráfico: Forms .
Después de revisar algunos tutoriales del technet, dedicí usar lo aprendido para hacer una aplicación de alta de usuarios con esta librería.
El objetivo de la aplicación es completar en un solo formulario el Alta de un usuario en Active Directory, Exchange, Lync y agregar los grupos necesarios para poder acceder a las aplicaciones corporativas de su departamento.
El script de la aplicación nos deberá permitir seleccionar lo siguiente:
- Si queremos dar de alta la cuenta de Active Directory, de Exchange, de Lync y añadir los Grupos.
- Escoger al entorno o país al que pertenecerá el usuario.
- Escoger la base de datos donde se creara el buzón de Exchange
- Escoger la plantilla que usaremos para añadir los grupos.
Para ello necesitamos acceso a los diferentes powershell de estos servicios, que ya resolvimos en el post de Automatizar el inicio de sesiones remotas en PowerShell y unas plantillas de usuarios que dejaremos en una OU.
Formulario Powershell para alta de usuarios (parte 2/3)
Ahora empieza lo interesante. Vamos a buscar dentro de nuestro servidor de exchange (que tenemos hemos almacenado antes en la constante $mailboxserver )y escoger en que base de datos queremos crear el nuevo buzón. Para listar las bases de datos, usaremos el comando get-mailboxes y el listado obtenido lo presentaremos en una ListBox igual que la que hemos creado para seleccionar el entorno:
# Add Mailbox Database ==================================
$objLabelMailDatabase = New-Object System.Windows.Forms.Label
$objLabelMailDatabase.Location = New-Object System.Drawing.Size(50,290)
$objLabelMailDatabase.Size = New-Object System.Drawing.Size(180,20)
$objLabelMailDatabase.Text = "Selecciona una base de datos:"
$objForm.Controls.Add($objLabelMailDatabase)
$objMailDatabaseListbox = New-Object System.Windows.Forms.Listbox
$objMailDatabaseListbox.Location = New-Object System.Drawing.Size(50,310)
$objMailDatabaseListbox.Size = New-Object System.Drawing.Size(150,400)
$objForm.Controls.Add($objMailDatabaseListbox)
$mailDatabases = Invoke-Expression "get-mailboxdatabase -server $mailboxserver | sort-object Name"
foreach ($mailDatabase in $mailDatabases)
{
[void] $objMailDatabaseListbox.Items.Add($mailDatabase.Name)
}
Para seleccionar la plantilla necesitamos tener estas creadas en una OU del Active Directory, que hemos definido como constante al principio. Estas plantillas no son otra cosa que usuarios de AD con los grupos a los que deben pertenecer segun su entorno y departamento. Estas plantillas se pueden crear y modificar directamente sobre el Active Directory sin tener que hacer modificaciones en el script del formulario.
El código seria el siguiente:
# Add Groups from Template =================================
$objLabelUserTemplate = New-Object System.Windows.Forms.Label
$objLabelUserTemplate.Location = New-Object System.Drawing.Size(250,290)
$objLabelUserTemplate.Size = New-Object System.Drawing.Size(180,20)
$objLabelUserTemplate.Text = "Selecciona una plantilla:"
$objForm.Controls.Add($objLabelUserTemplate)
$objUserTemplateListbox = New-Object System.Windows.Forms.Listbox
$objUserTemplateListbox.Location = New-Object System.Drawing.Size(250,310)
$objUserTemplateListbox.Size = New-Object System.Drawing.Size(150,400)
$objForm.Controls.Add($objUserTemplateListbox)
$userTemplates = get-AdUser -Filter * -SearchBase $templateBase
foreach ($userTemplate in $userTemplates)
{
[void] $objUserTemplateListbox.Items.Add($userTemplate.SamAccountName)
}
Lo que hace el código es leer los usuarios de la OU (en la constante $templateBase) y listarlo en un textbox.
El resultado es el siguiente:
El resultado es el siguiente:
En este caso los objetos de Base de Datos de Exchange y Plantillas no muestran datos. Pero en un entorno consulando a servidores reales el resultado es este:
Los siguientes elementos que definiremos son los Check Box y los usaremos para definir que funciones queremos habilitar de el nuevo usuario que estamos creando.
Con este codigo solo añadimos los checkbox en el formulario. Estos checkbox los marcaremos para confirmar si queremos crear el usuario del AD, si queremos que habilitar el buzon de Exchange, añadir los grupos de la plantilla o habilitar las funciones de Lync.
# Add ActiveDirectory CheckBox
$objADCheckbox = new-object System.Windows.Forms.checkbox
$objADCheckbox.Location = new-object System.Drawing.Size(450,290)
$objADCheckbox.Size = new-object System.Drawing.Size(200,20)
$objADCheckbox.Text = "Crear Usuario AD"
$objADCheckbox.Checked = $false
$objForm.Controls.Add($objADCheckbox)
# Add Exchange CheckBox
$objMailCheckbox = new-object System.Windows.Forms.checkbox
$objMailCheckbox.Location = new-object System.Drawing.Size(450,310)
$objMailCheckbox.Size = new-object System.Drawing.Size(200,20)
$objMailCheckbox.Text = "Habilitar Mailbox"
$objMailCheckbox.Checked = $false
$objForm.Controls.Add($objMailCheckbox)
# Add Group CheckBox
$objGroupCheckbox = new-object System.Windows.Forms.checkbox
$objGroupCheckbox.Location = new-object System.Drawing.Size(450,330)
$objGroupCheckbox.Size = new-object System.Drawing.Size(200,20)
$objGroupCheckbox.Text = "Habilitar "
$objGroupCheckbox.Checked = $false
$objForm.Controls.Add($objGroupCheckbox)
# Add Lync CheckBox
$objLyncCheckbox = new-object System.Windows.Forms.checkbox
$objLyncCheckbox.Location = new-object System.Drawing.Size(450,350)
$objLyncCheckbox.Size = new-object System.Drawing.Size(200,20)
$objLyncCheckbox.Text = "Habilitar Lync"
$objLyncCheckbox.Checked = $false
$objForm.Controls.Add($objLyncCheckbox)
Con este codigo solo añadimos los checkbox en el formulario. Estos checkbox los marcaremos para confirmar si queremos crear el usuario del AD, si queremos que habilitar el buzon de Exchange, añadir los grupos de la plantilla o habilitar las funciones de Lync.
Formulario Powershell para alta de usuarios (parte 3/3)
La última parte de este articulo/trilogia es la parte donde recogemos todos los datos que introducimos en los elementos y damos el alta del usuario en sí y mostramos un output amigable en un elemento tipo textbox.
El primer paso es crear el textbox:
# Add a text box to the form ==================================
$objOutputBox = New-Object System.Windows.Forms.TextBox
$objOutputBox.Location = New-Object System.Drawing.Size(680,40)
$objOutputBox.Size = New-Object System.Drawing.Size(460,500)
$objOutputBox.Multiline = $True
$objOutputBox.Font = New-Object System.Drawing.Font("Courier New", "8.5")
$objOutputBox.Wordwrap = $True
$objOutputBox.ReadOnly = $True
$objOutputBox.ScrollBars = [System.Windows.Forms.ScrollBars]::Vertical
$objForm.Controls.Add($objOutputBox)
Usaremos el nuevo objeto para mostrar toda la información y los pasos que estamos dando en el proceso de creación del usuario.
El siguiente paso es añadir un boton de OK, para lanzar el procedimiento de crear el usuario.
# Add OK Button ========================================
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(500,720)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.Add_Click(
{
# TODO: Substituir por procedimiento de alta de usuario
$objForm.Close()
})
$objForm.Controls.Add($OKButton)
I el aspecto final es este:
En la procedimiento al ejecutar el Click es donde devemos introducir nuestro script para el alta de usuario que deve recoger todos los datos del formulario y teniendo en cuenta los check que haya marcados, realizar unas tareas u otras. Como esta es la madre del cordero de todo este formulario, aquí os dejo un ejemplo de el script que usamos nosotros:
# TODO: Substituir por procedimiento de alta de usuarioLo primero que hace el script es leer todos los elementos de entrada de datos del formulario y guardarlos dentro de variables. Despues mediante los CheckBox y con las expresiones de condicion IF..THEN.. ejecutamos los comandos para crear el usuario. En un caso completo hariamos de forma simplificada:
$country = $objEnviromentsListbox.SelectedItem
$name = $objTextBoxName.Text
$surname = $objTextBoxSurname.Text
$username = $objTextBoxUsername.Text
$password = $objTextBoxPassword.Text
$alias = $objTextBoxAlias.Text
$database = $objMailDatabaseListbox.SelectedItem
$template = $objUserTemplateListbox.SelectedItem
$groups = Invoke-Expression "get-AdUser -Identity $template -Properties memberof | select-object -ExpandProperty memberof"
$enabledAD = $objADCheckbox.Checked
$enabledExchange = $objMailCheckbox.Checked
$enabledLync = $objLyncCheckbox.Checked
$enabledGroup = $objGroupCheckbox.Checked
$profpath = "\\fileserver\prof$country`$\profile\$username"
$homepath = "\\fileserver\prof$country`$\home\$username"
$objOutputBox.Text = " Los datos del nuevo usuario son:
Nuevo uusuario es $name $surname
Su usuario es $username y el password $password
Su Alias de email es $alias y su direccion de email $alias@dominio.com
La base de datos de correo es $database
Y usara los grupos de la plantilla $template" $objOutputBox.Text += "`r`n "
$objOutputBox.Text += "`r`n Profile Path = $profpath"
$objOutputBox.Text += "`r`n Profile Path = $homepath"
if ($enabledAD) {
$upn = "$username" + "$intdomain"
$completename = "$name $surname"
$objOutputBox.Text += "`r`n Creando AD User..."
new-aduser -Name $completename -GivenName $name -Surname $surname -UserPrincipalName $upn -Path $altaOU -SamAccountName $username -AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force) -Enabled $true
$objOutputBox.Text += "`r`n Esperar durante 5 segundos los cambios del AD"
Start-Sleep -s 5
if($enabledGroup)
{ $objOutputBox.Text += "`r`n Habilitar perfil de TS ..."
$objOutputBox.Text += get-AdUser -Identity $template -Properties memberof | select-object -ExpandProperty memberof | Add-ADGroupMember -Members $username
$adUser = Get-ADUser $username | select -ExpandProperty disting*
$adUser = [ADSI]"LDAP://$ADUser"
$adUser.psbase.invokeset('TerminalServicesProfilePath',$profpath)
$adUser.psbase.invokeSet('TerminalServicesHomeDirectory',$homepath)
$adUser.psbase.invokeSet('TerminalServicesHomeDrive',"Y:")
$adUser.setinfo()
# Pause 10 for AD changes
$objOutputBox.Text += "`r`n Esperar durante 10 segundos para la creación del perfil de TS"
Start-Sleep -s 10 } if($enabledExchange)
{
$objOutputBox.Text += "`r`n Habilitando Mailbox..."
$objOutputBox.Text += enable-mailbox -Identity $upn -Database $database -Alias $alias
# Pause for 30 seconds for AD
$objOutputBox.Text += "`r`n Esperar durante 30 segundos la creación del Mailbox"
Start-Sleep -s 30
if($enabledLync)
{
$objOutputBox.Text += "`r`n Habilitando Lync ..."
$objOutputBox.Text += Get-mailbox -identity $completename | Enable-csuser -registrarpool $registrar -sipaddresstype EmailAddress
$objOutputBox.Text += "`r`n Lync Habilitado"
}
} }
else
{
$objOutputBox.Text += "`r`n NO SE HA MARCADO LA OPCION DE CREAR USUARIO DE AD"
}
- Crear el usario en AD mediante New-ADUser
- Añadimos los grupos de la plantilla mediante el comando Get-ADUser $template | Add-ADGroupMember $username
- Creamos el perfil de Terminal Server con el InvokeSet
- Habilitamos el buzón de Exchange en la base de datos que hemos seleccionado Enable-Mailbox .
- Habilitamos el servicio de Lync usando la direccion de email como SIP Address Enable-CSUser .
El procedmiento es sencillo y el flujo de condiciones es bastante intuituvo, se puede modificar y adaptar a cualquier empresa.
Lo más importante y que hay que tener en cuenta, es que para ejecutar este formulario y poder dar de alta los usuario y todos sus servicios hay que tener sesiones abiertas con todas las consolas de gestión de estos servicio.
jueves, 23 de julio de 2015
Automatizar el inicio de sesiones remotas en PowerShell
Estamos preparando, junto con un compañero de trabajo, un script de powershell para dar de alta usuarios en Active Directory, Exchange y Lync, y de paso agregar los grupos de seguridad para Citrix y parámetros de perfiles de Terminal Server .
El primer paso es conseguir acceso a todas las consolas de PowerShell de los diferentes servicios. Para hacerlo solo hay que crear nuevas sesiones de PoweShell con el comando New-PSSession.
Aquí dejo un pequeño script para iniciar sesión en los diferentes servicios en una misma consola PowerShell . Solo tenéis que copiar el texto, guardarlo en un archivo .ps1 y modificar los parámetros iniciales.
lunes, 23 de diciembre de 2013
INCIDENCIA: Problemas al migrar un usuario entre dominios PARENT-CHILD
Síntomas:
Al intentar mover un usuario de un subdominio Child al dominio Parent mediante la herramienta Active Directory Migration Tool 3.2 ( ADMT ), esta nos devuelve un error:
Causa:
El usuario tiene asociado un objeto hoja que normalmente suele ser los dispositivos móviles sincronizados a la cuenta de correo (CN=ExchangeActiveSyncDevices) . Este objeto hoja es el que impide mover la cuenta de un rama del árbol de AD a la otra.
Solución:
La solución pasa por eliminar manualmente el objeto que cuelga del usuario a migrar y después repetir el proceso. Esto provocara que la cuenta pierda la información de los dispositivos móviles y será necesario volver a sincronizarlos.
Para eliminarlo el objeto es necesario abrir el Active Directory con la herramienta ADSIEdit y buscar el o los usuarios que queremos migrar. En cada usuario veremos la hoja con el nombre CN=ExchangeActiveSyncDevices , se puede borrar el objeto y la información que contiene de forma segura.
Una vez migrado el usuario podremos volver a sincronizar los dispositivos móviles para que se vuelva a crear esta información.
Al intentar mover un usuario de un subdominio Child al dominio Parent mediante la herramienta Active Directory Migration Tool 3.2 ( ADMT ), esta nos devuelve un error:
2013-12-16 12:28:45 ERR2:7422 Failed to move source object ‘CN=xxxxx xxxxx'. hr=0x8007208c No se puede realizar la operación porque existen objetos secundarios. Esta operación sólo se puede realizar en un objeto hoja.
Causa:
El usuario tiene asociado un objeto hoja que normalmente suele ser los dispositivos móviles sincronizados a la cuenta de correo (CN=ExchangeActiveSyncDevices) . Este objeto hoja es el que impide mover la cuenta de un rama del árbol de AD a la otra.
Solución:
La solución pasa por eliminar manualmente el objeto que cuelga del usuario a migrar y después repetir el proceso. Esto provocara que la cuenta pierda la información de los dispositivos móviles y será necesario volver a sincronizarlos.
Para eliminarlo el objeto es necesario abrir el Active Directory con la herramienta ADSIEdit y buscar el o los usuarios que queremos migrar. En cada usuario veremos la hoja con el nombre CN=ExchangeActiveSyncDevices , se puede borrar el objeto y la información que contiene de forma segura.
Una vez migrado el usuario podremos volver a sincronizar los dispositivos móviles para que se vuelva a crear esta información.
Suscribirse a:
Entradas (Atom)