Comandos PowerShell para gestionar Active Directory: OU, usuarios, grupos y recursos compartidos
Gestión de Unidades Organizativas (OU) en Active Directory
Crear OU
- Crear OU
New-ADOrganizationalUnit -name "nombre ou" -path "DC=equipo13,DC=es"
- Crear OU sin protección contra eliminación
Añadimos: -ProtectedFromAccidentalDeletion $false
Ver contenido de una OU
- Ver contenido de una OU
Get-ADObject -filter 'name -like "*"' -SearchBase "OU=asdfka,DC=equipo13,DC=es" -SearchScope Subtree
- Para ver solo objetos hijos de una OU
Get-ADObject -filter 'name -like "*"' -SearchBase "OU=......." -SearchScope 1
- Para ver las OU hijas de una OU
Get-ADOrganizationalUnit -filter 'name -like "*"' -SearchBase "OU=maria,DC=equipo13,DC=es" -SearchScope 1 | ft name, distinguishedname
- Para ver todas las OU de un dominio
Get-ADObject -filter 'objectclass -eq "organizationalunit"'
- Ver todas las OU
Get-ADOrganizationalUnit -filter 'name -like "*"' | ft name, distinguishedname
- Ver información de todas las OU creadas en el dominio
Get-ADOrganizationalUnit -filter 'name -like "*"' | ft
Ver información de una OU
- Ver información de una OU
Get-ADOrganizationalUnit -filter 'name -like "maria"'
Get-ADOrganizationalUnit -Identity "OU=maria,DC=equipo13,DC=es"
- Ver toda la información de una OU
-Properties *
Eliminar una OU
Set-ADOrganizationalUnit -Identity 'OU=....,DC=e....' -ProtectedFromAccidentalDeletion $false
Remove-ADOrganizationalUnit -Identity 'OU=...,DC=..,DC=es'
Cambiar de nombre a una OU
Rename-ADObject -Identity "OU=maria,DC=equipo13,DC=es" -NewName "juana"
Mover una OU
Set-ADOrganizationalUnit -Identity "OU=maria,DC=equipo13,DC=es" -ProtectedFromAccidentalDeletion $false
Move-ADObject -Identity "OU=maria,DC=equipo13,DC=es" -TargetPath "OU=Siete Reinos,DC=equipo13,DC=es"
Set-ADOrganizationalUnit -Identity "OU=maria,OU=Siete Reinos,DC=equipo13,DC=es" -ProtectedFromAccidentalDeletion $true
Gestión de Usuarios en Active Directory
Crear usuario
- Crear usuario con variable
$password = Read-Host "introduce contraseña" -AsSecureString
New-ADUser -Name ibai -Path "OU=maria,OU=Siete Reinos,DC=equipo13,DC=es" -AccountPassword $password -Enabled $true -PassThru
- Crear usuario sin variable
New-ADUser -Name ibai -Path "OU=maria,OU=Siete Reinos,DC=equipo13,DC=es" -AccountPassword (Read-Host -AsSecureString "introduce contraseña") -Enabled $true -PassThru
Parámetros de creación de usuario
- -AccountExpirationDate "14/05/2019"
- -AccountExpirationDate "15:00"
- -CannotChangePassword $true
- -ChangePasswordAtLogon $true
- -Enabled $true
- -LogonWorkstation "w10-13,ws-2012-13"
- -PasswordNeverExpires $true
- -Path "OU=maria,DC=equipo13,DC=es"
- -ProfilePath \\ws2012-13\perfilmovil$\jane_doe
- -ScriptPath \\ws2012-13\netlogon\b.bat
Ver propiedades de usuarios
- Ver todas las propiedades de un usuario
Get-ADUser -Identity ibai -Properties *
- Ver propiedades que cumplen algunas características
Get-ADUser -filter 'name -like "a*"' | ft
Get-ADUser -filter * -SearchBase "OU=maria,OU=Siete Reinos,DC=equipo13,DC=es" | ft
- Ver todos los usuarios de un dominio
Get-ADUser -filter * | ft
- Ver a qué grupos pertenece un usuario
Get-ADUser ibai -Properties MemberOf
Contar usuarios
- Contar usuarios de un dominio
(Get-ADUser -filter *).Count
- Contar usuarios de una OU
(Get-ADUser -filter * -SearchBase "OU=maria,OU=Siete Reinos,DC=equipo13,DC=es").Count
- Contar usuarios deshabilitados / habilitados
(Get-ADUser -filter * | Where {$_.Enabled -eq $false}).Count
(Get-ADUser -filter * | Where {$_.Enabled -eq "true"}).Count
Agregar y reemplazar atributos
- Agregar atributos
Set-ADUser -Identity ibai -City Pamplona -Company Mapsa
Set-ADUser -Identity ibai -Add @{telephoneNumber = '123456'; otherTelephone = '622452432'}
- Reemplazar atributos
Set-ADUser -Identity ibai -Replace @{telephoneNumber = '1234123'}
Set-ADUser -Identity ibai -Add @{telephoneNumber = '1234123'} -Remove @{telephoneNumber = '12345'}
Buscar usuarios que cumplan condiciones
Search-ADAccount -AccountDisabled -SearchBase "DC=equipo13,DC=es" | ft Name, DistinguishedName, LockedOut, Enabled -a
Search-ADAccount -AccountExpired
Search-ADAccount -AccountExpiring -DateTime "20/10/2019" (que expiran antes del 20)
Search-ADAccount -AccountExpiring -TimeSpan "40" (que expiran antes de 40 días)
Search-ADAccount -AccountInactive -DateTime "20/10/2019" | ft Name, LastLogonDate (cuentas que no han iniciado sesión desde el 20)
Search-ADAccount -AccountInactive -TimeSpan "400" -SearchBase "OU=sistemas,DC=equipo13,DC=es" | ft Name, LastLogonDate -a (cuentas que no han iniciado sesión en los últimos 400 días)
Search-ADAccount -LockedOut -SearchBase "DC=equipo13,DC=es" | ft Name, LockedOut -a
Search-ADAccount -PasswordNeverExpires
Search-ADAccount -PasswordExpired
Formato Timespan
DH:M:SF
- D = días
- H = horas
- M = minutos
- S = segundos
- F = fracciones de segundo
Ejemplos:
- -TimeSpan "2" en dos días
- -TimeSpan "-2" en los dos días anteriores
- -TimeSpan "4:00" en 4 horas
Habilitar y deshabilitar cuentas
- Habilitar una cuenta
Enable-ADAccount -Identity ibai
Get-ADUser ibai
- Deshabilitar una cuenta
Disable-ADAccount -Identity ibai
- Deshabilitar todos los usuarios de una OU
Get-ADUser -SearchBase "OU=maria,DC=equipo13,DC=es" -filter * | Disable-ADAccount
Renombrar, borrar y cambiar contraseña
- Renombrar una cuenta
Rename-ADObject -Identity "CN=ibai,CN=Users,DC=equipo13,DC=es" -NewName mory
- Borrar una cuenta
Remove-ADUser ibai
Rename-ADObject -Identity "CN=ibai,CN=Users,DC=equipo13,DC=es"
Get-ADUser -filter 'name -like "ib*"' | Remove-ADUser
- Asignar o cambiar contraseña de usuario
Set-ADAccountPassword -Identity "CN=ibai,CN=Users,DC=equipo13,DC=es" -NewPassword (Read-Host -AsSecureString "nueva contraseña") -PassThru
Set-ADAccountPassword -Identity ibai -PassThru -Reset
- Desbloquear una cuenta
Unlock-ADAccount -Identity ibai
Mover usuarios
- Mover un usuario
Move-ADObject -Identity "CN=ibai,CN=Users,DC=equipo13,DC=es" -TargetPath "OU=Valar Morgulis,DC=equipo13,DC=es"
- Mover usuarios cuya descripción es asir
Get-ADUser -filter 'Description -eq "asir"' | Move-ADObject -TargetPath "OU=Valar Doheris,OU=Valar Morghulis,DC=equipo13,DC=es"
- Mover todos los usuarios de una OU a otra OU
Get-ADUser -filter * -SearchBase "OU=Valar Morgulis,DC=equipo13,DC=es" | Move-ADObject -TargetPath "OU=Not_Today,DC=equipo13,DC=es"
Establecer horario de inicio de sesión
Horario de inicio de sesión de 6 a 11 y de 14 a 17 h.
| 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 0 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | ||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
224, 231, 1
128, 64, 32, 16, 8, 4, 2, 1
Domingo, lunes, martes, miércoles, jueves, viernes, sábado
[byte[]]$horario = @(0,0,0D, 224,231,1L, 224,231,1M, 224,231,1X, 224,231,1J, 224,231,1V, 0,0,0S)
Get-ADUser ibai | Set-ADUser -Replace @{logonHours = $horario}
Gestión de Grupos en Active Directory
Crear grupo
- Crear grupo en una OU y ámbito global
New-ADGroup -name grupo -GroupScope Global -path "OU=ventas,DC=equipo13,DC=es"
Si no especificamos el parámetro GroupCategory, se creará un grupo de tipo Seguridad.
Ver información de un grupo
Get-ADGroup -Identity grupo
Get-ADGroup -filter 'name -like "grupo"'
Get-ADGroup -filter 'name -like "grupo" -or name -like "*dos"' | ft
Get-ADGroup -filter 'name -like "hola"' -Properties * | ft name, cn, whencreated -a
Ver miembros de grupos
Get-ADGroupMember -Identity "CN=....." | ft name, distinguishedname -a
- Ver atributos según el tipo de objeto miembro
Get-ADGroupMember -Identity "CN=ggrupo1,OU=Ejgrupos,DC=equipo13,DC=es" | Where-Object {$_.objectClass -eq "user"} | ForEach {Get-ADUser -Identity $_} | ft name, enabled -a
Donde el objeto sea igual a usuario, recorremos todos los usuarios y mostramos su información.
Modificar grupos
- Modificar la información de un grupo
Set-ADGroup -Identity "CN=ggrupo1,OU=Ejgrupos,DC=equipo13,DC=es" -Description "grupo uno"
- Modificar la información de más de un grupo
Get-ADGroup -filter 'name -like "gosgr" -or name -like "grdos"' | Set-ADGroup -Description "grupos de prueba"
Get-ADGroup -filter 'name -like "gosgr" -or name -like "grdos"' -Properties * | ft name, description -a
- Modificar atributos que no son básicos
@{parámetro = valor} Remove, Add, Replace y Clear
Set-ADGroup -Identity "CN=ggrupo1,OU=Ejgrupos,DC=equipo13,DC=es" -Add @{displayName = "grupo-1"}
Set-ADGroup -Identity "CN=ggrupo1,OU=Ejgrupos,DC=equipo13,DC=es" -Clear displayName
Set-ADGroup -Identity "CN=ggrupo1,OU=Ejgrupos,DC=equipo13,DC=es" -Remove @{description = "grupos de prueba"}
Agregar miembros a grupos
- Agregar uno o más usuarios a un grupo
Add-ADGroupMember -Identity "CN=ggrupo1,OU=Ejgrupos,DC=equipo13,DC=es" -Members ibai,eneko
- Agregar un usuario a dos grupos
Add-ADPrincipalGroupMembership -Identity ibai -MemberOf ggrupo1,ggrupo2
Get-ADUser -filter 'name -like "ibai"' -Properties * | Select name, memberof -a
- Añadir todos los miembros de una OU a un grupo
Get-ADUser -SearchBase "OU=Ejgrupos,DC=equipo13,DC=es" -filter {objectClass -eq "user"} | ForEach {Add-ADGroupMember -Identity grupos2 -Members $_}
Get-ADUser -SearchBase "OU=Ejgrupos,DC=equipo13,DC=es" -filter {objectClass -eq "user"} -Properties * | ft name, memberof -a
- Copiar los miembros de un grupo a otro
Get-ADGroupMember -Identity ggrupo1 | ForEach {Add-ADGroupMember -Identity ggrupo2 -Members $_}
Get-ADUser -SearchBase "OU=ggrupo2,DC=equipo13,DC=es" -filter {objectClass -eq "user"} -Properties * | ft name, memberof -a
Anidamiento de grupos
- Anidamiento de grupos
Add-ADGroupMember -Identity "CN=grdos,OU=grupos,DC=equipo17,DC=es" -Members dosgr
- Ver miembros de grupos anidados
Get-ADGroupMember -Identity grdos -Recursive | ft name, distinguishedname -a
- Ver de qué grupos son miembros
Get-ADGroupMember -Identity grdos -Recursive | Where-Object {$_.objectClass -eq "user"} | ForEach {Get-ADUser -Identity $_ -Properties *} | ft name, distinguishedname, memberof -a
Eliminar miembros y grupos
- Eliminar miembros de un grupo
Remove-ADGroupMember -Identity grdos -Members cuatro,dosgr
- Eliminar a un usuario de varios grupos
Remove-ADPrincipalGroupMembership -Identity cinco -MemberOf grdos,dosgr
- Eliminar/borrar un grupo
Remove-ADGroup -Identity gdos
- Eliminar más de un grupo
Get-ADGroup -filter 'name -like "*dos"' -SearchBase "OU=grupos,DC=equipo17,DC=es" | Remove-ADGroup -Confirm:$false
Permisos y Recursos Compartidos
Visualizar recursos compartidos
Net share
Get-SmbShare
Visualizar propiedades de un recurso compartido
Get-SmbShare -Name carpeta1 | fl -Property *
Compartir una carpeta
- Compartir desde consola
Net share carpeta2=C:\carpeta-2
- Compartir con PowerShell
New-SmbShare -Name "carpeta1" -Path "C:\car_com"
- Crear carpeta
New-Item -Name "car_com" -Path "C:\" -ItemType "Directory"
Parámetros de SmbShare
- ConcurrentUserLimit
- Description
- NoAccess
- ReadAccess
- ChangeAccess
- FullAccess
Modificar recursos compartidos
- Modificar el número de usuarios que pueden conectarse a la vez a un recurso
Net share carpeta-1 /users:20
- Modificar la configuración de un recurso compartido
Set-SmbShare -Name carpeta1 -Description "carpeta compartida"
- Visualizar y modificar los permisos de un recurso compartido
Grant-SmbShareAccess -Name carpeta1 -AccountName grupo -AccessRight Change
Revoke-SmbShareAccess -Name carpeta1,carpeta2,carpeta3 -AccountName juanito,manuel -Force
Block-SmbShareAccess -Name carpeta1,carpeta2 -AccountName grupo -Force
Unblock-SmbShareAccess -Name carpeta2 -AccountName grupo -Force
Get-SmbShareAccess -Name carpeta1
Dejar de compartir un recurso
- Desde consola
Net share carpeta1 /delete
Net share C:\carpeta1 /delete
Net share datos \\ws2012-13 /delete
- Desde PowerShell
Remove-SmbShare -Name carpeta1,carpeta2 -Force
Conectar un recurso compartido asignándole letra de unidad
- Desde consola
Net use W: \\ws2012-13\datos2
- Desde PowerShell
New-PSDrive -Name "Z" -PSProvider FileSystem -Root '\\ws2012-13\carpeta1' -Persist
-Persist especifica que la conexión no se eliminará en posteriores sesiones.
Desconectar un recurso compartido
- Desde consola
Net use W: /delete
- Desde PowerShell
Remove-PSDrive -Name Z
Mostrar carpetas compartidas administrativas
Get-SmbShare -Special 1