Home Windows POWERSHELL – TRABAJANDO CON LOS USUARIOS DEL DOMINIO

POWERSHELL – TRABAJANDO CON LOS USUARIOS DEL DOMINIO

by José Luis Sánchez Borque

Powershell proporciona una serie de cmdLets que permiten interactuar con los usuarios del domino. En este post vamos a ver un ejemplo sobre un dominio denominado profe.local

Con este post pretendo que con un pequeño recetario, poder establecer unos mínimos para la gestión de usuarios.

En la imagen adjunta veamos primero la estructura creada. Tenemos por una parte los usuarios propios del dominio en la Unidad Organizativa Users:

cn=user,dc=profe,dc=local

Por otra, los usuarios propios de la empresa que recomiendo SIEMPRE separarlos de los del dominio, ya que luego nos será más simple aplicar GPO’s a los usuarios propios de la empresa, sin que afecte al resto de usuarios. Dichos usuarios están en la Unidad Organizativa Empresa:

ou=empresa,dc=profe,dc=local

En la imagen adjunta vemos la estructura lógica de forma gráfica:

Podemos ver un listado de TODOS los usuarios del dominio y alguna de sus propiedades con el cmdLets Get-ADUser

PS C:\> Get-ADUser -filter *


DistinguishedName : CN=Administrador,CN=Users,DC=profe,DC=local
Enabled : True
GivenName :
Name : Administrador
ObjectClass : user
ObjectGUID : 312e6161-944e-4d6f-b799-330e82a786df
SamAccountName : Administrador
SID : S-1-5-21-1174377863-2858050103-3187659525-500
Surname :
UserPrincipalName :

DistinguishedName : CN=Invitado,CN=Users,DC=profe,DC=local
Enabled : False
GivenName :
Name : Invitado
ObjectClass : user
ObjectGUID : fd7753ae-cd38-457e-b0b7-6becfb64754d
SamAccountName : Invitado
SID : S-1-5-21-1174377863-2858050103-3187659525-501
Surname :
UserPrincipalName :

En el listado anterior he limitado la salida a los dos primeros usuarios, ya que al no establecer ningún tipo de filtro salen todos.

Podemos listar solo los que cuelgan de la Unidad Organizativa Empresa, añadiendo el parámetro –searchbase

PS C:\> Get-ADUser -filter * -searchbase "ou=empresa,dc=profe,dc=local"


DistinguishedName : CN=Manel Pérez,OU=Marketing,OU=EMPRESA,DC=profe,DC=local
Enabled : True
GivenName : Manel
Name : Manel Pérez
ObjectClass : user
ObjectGUID : 52280792-bf30-4c22-81c2-c4366fce83f3
SamAccountName : mperez
SID : S-1-5-21-1174377863-2858050103-3187659525-1105
Surname : Pérez
UserPrincipalName : mperez@profe.local

DistinguishedName : CN=Veronica García,OU=Marketing,OU=EMPRESA,DC=profe,DC=local
Enabled : True
GivenName : Veronica
Name : Veronica García
ObjectClass : user
ObjectGUID : ab7de55c-2d2e-4948-b6ed-00ec0791fd8c
SamAccountName : vgarcia
SID : S-1-5-21-1174377863-2858050103-3187659525-1106
Surname : García
UserPrincipalName : vgarcia@profe.local

DistinguishedName : CN=Toni Sánchez,OU=Administracion,OU=EMPRESA,DC=profe,DC=local
Enabled : True
GivenName : Toni
Name : Toni Sánchez
ObjectClass : user
ObjectGUID : b846515e-36c8-4be3-9d5d-b7e76b1776d3
SamAccountName : tsanchez
SID : S-1-5-21-1174377863-2858050103-3187659525-1107
Surname : Sánchez
UserPrincipalName : tsanchez@profe.local

DistinguishedName : CN=Montse Soler,OU=Administracion,OU=EMPRESA,DC=profe,DC=local
Enabled : True
GivenName : Montse
Name : Montse Soler
ObjectClass : user
ObjectGUID : f376131d-4838-40c3-82b0-8e85f1d06940
SamAccountName : msoler
SID : S-1-5-21-1174377863-2858050103-3187659525-1108
Surname : Soler
UserPrincipalName : msoler@profe.local

Evidentemente puede que no nos interesen todas las propiedades. Por ejemplo solo queremos saber el Name, SamAccountName y si la cuenta esta Enabled. Además puede que nos interese que el listado salga con un formato más cómodo de leer, como por ejemplo por columnas.

PS C:\> Get-ADUser -filter * -searchbase "ou=empresa,dc=profe,dc=local" | ft name, samaccountname, enabled

name            samaccountname enabled
----            -------------- -------
Manel Pérez     mperez         True
Veronica García vgarcia        True
Toni Sánchez    tsanchez       True
Montse Soler    msoler         True

También nos podemos preguntar cuales son todas las propiedades de un determinado usuario…. Las podemos obtener de la siguiente manera (cortamos el listado :

PS C:\> Get-ADUser -identity mperez -properties *


AccountExpirationDate :
accountExpires : 9223372036854775807
AccountLockoutTime :
AccountNotDelegated : False
AllowReversiblePasswordEncryption : False
AuthenticationPolicy : {}
AuthenticationPolicySilo : {}
BadLogonCount : 0
badPasswordTime : 0
badPwdCount : 0
CannotChangePassword : False
CanonicalName : profe.local/EMPRESA/Marketing/Manel Pérez
Certificates : {}
City :
.....
.....
.....   "AQUÍ HE CORTADO EL LISTADO"
.....
.....
....
createTimeStamp : 26/01/2018 16:54:33
Deleted :
Department :
Description :
DisplayName : Manel Pérez
DistinguishedName : CN=Manel Pérez,OU=Marketing,OU=EMPRESA,DC=profe,DC=local
Division :
DoesNotRequirePreAuth : False
dSCorePropagationData : {01/01/1601 1:00:00}
EmailAddress :
EmployeeID :
EmployeeNumber :
Enabled : True
Fax :
GivenName : Manel
HomeDirectory :
HomedirRequired : False
HomeDrive :
HomePage :
HomePhone :
Initials :
instanceType : 4
isDeleted :
KerberosEncryptionType : {}
LastBadPasswordAttempt :
LastKnownParent :
lastLogoff : 0
pwdLastSet : 131614556730881928
SamAccountName : mperez
sAMAccountType : 805306368
ScriptPath :
sDRightsEffective : 15
ServicePrincipalNames : {}
SID : S-1-5-21-1174377863-285805
SIDHistory : {}
SmartcardLogonRequired : False
sn : Pérez
State :
StreetAddress :
Surname : Pérez
Title :
TrustedForDelegation : False
TrustedToAuthForDelegation : False
UseDESKeyOnly : False
userAccountControl : 512
userCertificate : {}
UserPrincipalName : mperez@profe.local
uSNChanged : 16446
uSNCreated : 16441
whenChanged : 26/01/2018 16:54:33
whenCreated : 26/01/2018 16:54:33

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

PS C:\> Get-ADUser -filter {samaccountname -like "*perez*"}


DistinguishedName : CN=Manel Pérez,OU=Marketing,OU=EMPRESA,DC=profe,DC=local
Enabled : True
GivenName : Manel
Name : Manel Pérez
ObjectClass : user
ObjectGUID : 52280792-bf30-4c22-81c2-c4366fce83f3
SamAccountName : mperez
SID : S-1-5-21-1174377863-2858050103-3187659525-1105
Surname : Pérez
UserPrincipalName : mperez@profe.local

Podemos también listar todos los usuarios activos (Enabled = True) del dominio con el siguiente comando:

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

SamAccountName   Name            Surname GivenName
--------------   ----            ------- ---------
Administrador    Administrador
mperez           Manel Pérez     Pérez   Manel
vgarcia          Veronica García García  Veronica
tsanchez         Toni Sánchez    Sánchez Toni
msoler           Montse Soler    Soler   Montse

También podemos saber los usuarios que no han cambiado su contraseña en los últimos 60 días.

PS C:\> $60_Days = (Get-Date).adddays(-60)
PS C:\> Get-ADUser -filter {(passwordlastset -le $60_days)}

DistinguishedName : CN=Invitado,CN=Users,DC=profe,DC=local
Enabled : False
GivenName :
Name : Invitado
ObjectClass : user
ObjectGUID : fd7753ae-cd38-457e-b0b7-6becfb64754d
SamAccountName : Invitado
SID : S-1-5-21-1174377863-2858050103-3187659525-501
Surname :
UserPrincipalName :

DistinguishedName : CN=DefaultAccount,CN=Users,DC=profe,DC=local
Enabled : False
GivenName :
Name : DefaultAccount
ObjectClass : user
ObjectGUID : 5dcc9686-a8b2-4101-8877-eec45775a908
SamAccountName : DefaultAccount
SID : S-1-5-21-1174377863-2858050103-3187659525-503
Surname :
UserPrincipalName :

También podríamos generar un script powershell para cambiar una propiedad de algunos usuarios de forma masiva. Por ejemplo añadir el departamento “Dpto. administración” a todos los usuarios de dicho departamento;

poc1.ps1

$AdmonUsers = Get-ADUser -Filter * -SearchBase "ou=administracion,OU=empresa,DC=profe,DC=local"

foreach($AdmonUser in $AdmonUsers)
{
 
 $AdmonUser.department = "Dpto. Administración"
 Set-ADUser -Instance $admonUser
}

Podemos ver lo que hemos conseguido con esta otra instrucción:

PS C:\> get-aduser -filter * -searchbase "ou=administracion,ou=empresa,dc=profe,dc=lo
cal" -properties * | ft samaccountname, department

samaccountname   department
--------------   ----------
tsanchez         Dpto. Administración
msoler           Dpto. Administración

 

O asignar el script de inicio de todos los usuarios de la empresa con este otro script:

poc2.ps1

$AdmonUsers = Get-ADUser -Filter * -SearchBase "OU=empresa,DC=profe,DC=local"

foreach($AdmonUser in $AdmonUsers)
{
 
 $AdmonUser.Scriptpath = "ini.vbs"
 Set-ADUser -Instance $admonUser
}

 

You may also like

Leave a Comment