Visualizar las propiedades de una cuenta

Fuente: Get-ADUser-basics.ps1

El cmdlet Get-ADUser permite obtener los datos de uno o mas usuarios de AD (Active-Directory).

Podemos ver un listado de TODOS los usuarios del dominio y sus propiedades básicas con este comando:

Get-ADUser -filter *

Este es el ejemplo más sencillo, la siguiente consulta obtiene sólo algunas de la propiedades de la cuenta, buscamos una cuenta de un empleado ficticio llamado Bob Sinclair:

Get-ADUser -Identity 'b.sinclair'
# Podemos hacer lo mismo filtrando por la propiedad Name
Get-ADUser -Filter 'Name -like "Bob Sinclair"'
Get-ADUser -Filter 'Name -like "Oscar*"'

Para ver que propiedades podemos consultar de un objeto usuario es siempre útil tener enlaces como estos a mano:

Propiedades adicionales

Si queremos visualizar propiedades que no se muestran por defecto, por ejemplo la oficina de trabajo y la descripción de la cuenta:

Get-ADUser -Identity 'b.sinclair' -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires
# Para ver TODAS las propiedades de forma paginada
Get-ADUser -Identity 'b.sinclair' -Properties * | more 
Get-ADUser -Identity 'b.sinclair' -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword, PasswordExpired

Modificar las propiedades de un usuarios

Set-ADUser permite modificar un usuario AD (advertencia: La cuenta de Manager debe existir en AD)

Set-ADUser -Identity 'b.sinclair' -Office 'London'
Get-ADUser -Identity 'b.sinclair' -Properties Office

Set-ADUser -Identity 'b.sinclair' -Manager 'i.landajuela'
# Otra forma de hacerlo usando un pipe
# Get-ADUser -Identity 'b.sinclair' | Set-ADUser -Manager 'i.landajuela'
Get-ADUser -Identity 'b.sinclair' -Properties Manager

# Para comprobar si la clave a expirado
Get-ADUser -Identity 'b.sinclair' -Properties PasswordExpired

Modificar las propiedad de usuarios resultantes de una búsqueda, en el siguiente ejemplos obtenemos una lista de cuentas de usuario que tienen la propiedad de que expire clave activada y además está caducada la clave.

$usrLst = Get-ADUser -Filter {(PasswordNeverExpires -eq $False) -and (PasswordExpired -eq $True)}
foreach($User in $usrLst)
{
    $User.department = "Dpto. Administración"
    Set-ADUser -Instance $User
}

Asignar un script de inicio a todos los usuarios de la empresa:

$usrLst = Get-ADUser -Filter *
foreach($User in $usrLst)
{

 $User.Scriptpath = "ini.vbs"
 Set-ADUser -Instance $User
}

Enlaces:

Ejemplos avanzados

Fuente: Filter-Users.ps1

Las fecha de caducidad de la clave y la fecha cuando se estableció la clave por última vez siempre son valores interesantes para los admins. Si queremos realizar varias operaciones sobre una lista de usuarios primero lo almacenamos en una lista de objetos.

El siguiente comando filtra las cuentas de usuarios habilitadas y que sus claves expiren.

$Users = Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword

Si solo queremos mostrar una lista de usuarios junto a fecha de expiración de la clave y la última vez que se modifico la clave:

$Users | select Name, @{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, PasswordLastSet

Como el atributo UserPasswordExpiryTimeComputed no se almacena de forma legible para humanos usamos la función FromFileTime.

Seguridad de cuentas de usuarios

Fuente: Users-SecOp.ps1.

Algunas operaciones básicas de seguridad para administrar usuarios:

# Deshabilitar una cuenta 
Disable-ADAccount -Identity 'b.sinclair' 

# Habilitar una cuenta 
Enable-ADAccount -Identity 'b.sinclair' 

# Desbloquear una cuenta de usuario
Unlock-ADAccount -Identity 'b.sinclair' 

# Cambiar la clave 
Set-ADAccountPassword -Identity b.sinclair -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "p@ssw0rd" -Force)

Crear una cuenta AD y Exchange para un usuario

Fuente: New-UserAccount.ps1

Vamos a crear un usuario de AD y su buzón de correo en Exchange, para poder ejecutar el script deben estar cargados los módulos AD y Exhange.

Empezamos el script comprobando previamente si existe el buzón, es importante saber también que cuando borramos el buzón se elimina también el objeto de usuario de AD.

$Mailboxes = Get-Mailbox -Identity 'b.sinclair' | measure-object
if ( $Mailboxes.Count -gt 0 ) 
{
        Remove-Mailbox -Identity 'b.sinclair'
}

Podemos hacer una comprobación similar para una cuenta AD.

$Users =  Get-ADUser -Identity 'b.sinclair' | measure-object
if ( $Users.Count -gt 0 ) 
{       
    Remove-ADUser -Identity 'b.sinclair'
}

Después de esas comprobaciones vamos al caso concreto, para crear el usuario en AD vamos a usar tres cmdlets: New-ADUser, Set-ADUser,Add-ADGroupMember. El último comando no es imprescindible, nos permite incorporar la cuenta a un grupo.

Vamos a definir los parámetros a pasar al comando New-ADUser en un array. Definimos en variables simples los valores de los campos, por ejemplo:

$PlainPassword = "ClaveInicial"
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force

$MyName = "Bob"
$MySurname = "Sinclair"
$MySamAccountName = "b.sinclair"
  • ADVERTENCIA: Es posible que este no funcione porque no genera una cadena compleja de clave inicial

Ahora sí creamos el array:

$parms = @{ 
        Name = $MyName + " " + $MySurname
        GivenName = $MyName
        Surname = $MySurname
        SamAccountName = $MySamAccountName 
        }

Podemos modificar cualquier propiedad del objeto, en algunos casos como el pais Country debemos usar codificaciones especiales ("ES" para españa).

Y creamos el usuario:

New-ADUser @parms
Set-ADUser -Identity $MySamAccountName -ChangePasswordAtLogon $False
Add-ADGroupMember -Identity "Escritorio Remoto" -Member $MySamAccountName

Ahora ya podemos crear la cuenta de correo en Exchange:

Enable-Mailbox -Identity $MyEmailAddress -Database "Mailbox Database 12" 
Enable-Mailbox -Identity $MyEmailAddress -Archive

La tabla en este enlace es muy útil con todas las propiedades y su tipo, la imagen inferior sólo es una muestra de toda la tabla:

Resetear la clave de usuario

Fuente: Reset-ADUserPassword.ps1

Write-Host "Cree una contraseña segura usando un servicio como https://passwordsgenerator.net/"
$UserId = Read-Host "Deme Identidad del usuario (ejemplo: 'b.sinclair')"

$Newpwd = Read-Host "Deme nueva clave (compleja)" 

Set-ADAccountPassword $UserId -NewPassword (ConvertTo-SecureString -AsPlainText -String "$Newpwd" -force)
Set-ADUser -Identity $UserId -ChangePasswordAtLogon $true

Buscar usuarios con una propiedad determinada

También podemos buscar todos los que contengan en su nombre de cuenta la expresión “perez”:

Get-ADUser -filter {samaccountname -like "*perez*"}

Podemos también listar todos los usuarios activos (Enabled = True):

PS C:\> Get-ADUser -Filter {Enabled -eq "True"} | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table

Usuarios que no han cambiado su contraseña en los últimos 100 días (no estoy seguro si este cmdlet funciona bien):

$200_Days = (Get-Date).adddays(-200)
Get-ADUser -filter {(passwordlastset -le $200_Days) -and (PasswordNeverExpires -eq $False) -and (Enabled -eq $True)}  

Deshabilitar una cuenta

PS> Disable-ADAccount -Identity b.sinclair
# Comprobamos 
PS> Get-ADUser -Identity 'b.sinclair' -Properties Enabled

Recursos externos