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 }