Operaciones básicas con Powershell / AD
Operaciones Básicas con PowerShell y Active Directory
Crear un usuario nuevo
New-ADUser -Name «Carlos Ruiz» -SamAccountName «cruiz» -UserPrincipalName «cruiz@dominio.local» -Path «OU=Usuarios,DC=dominio,DC=local» -AccountPassword (ConvertTo-SecureString «Password123!» -AsPlainText -Force) -Enabled $true -ChangePasswordAtLogon $true -GivenName «Carlos» -Surname «Ruiz» -EmailAddress «cruiz@dominio.local»
Agregar un usuario a múltiples grupos
Add-ADGroupMember -Identity «TI»,»VPN_Users» -Members «cruiz»
Crear múltiples usuarios desde CSV
Import-Csv «usuarios.csv» | ForEach-Object {
New-ADUser -Name $_.Nombre -SamAccountName $_.Usuario -UserPrincipalName $_.Email -Path $_.RutaOU -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -Force) -Enabled $true
}
Cambiar múltiples contraseñas
Get-ADUser -Filter * -SearchBase «OU=TempUsers,DC=dominio,DC=local» | ForEach-Object {
Set-ADAccountPassword -Identity $_ -NewPassword (ConvertTo-SecureString «Temporal123!» -AsPlainText -Force)
}
Consultas y filtros útiles
Buscar usuarios inactivos en los últimos 90 días
Search-ADAccount -AccountInactive -UsersOnly -TimeSpan 90.00:00:00 | Select-Object Name, LastLogonDate
Usuarios bloqueados actualmente
Search-ADAccount -LockedOut | Select-Object Name, SamAccountName
Buscar duplicados por dirección de correo
Get-ADUser -Filter * -Properties EmailAddress | Group-Object EmailAddress | Where-Object { $_.Count -gt 1 }
Buscar todos los objetos de un tipo específico (como Impresoras)
Get-ADObject -Filter ‘ObjectClass -eq «printQueue»‘ -SearchBase «DC=dominio,DC=local»
Consultar miembros de todos los grupos de seguridad
Get-ADGroup -Filter ‘GroupCategory -eq «Security»‘ | ForEach-Object {
Get-ADGroupMember $_ | Select-Object Name, SamAccountName, @{Name=»Grupo»;Expression={$_.DistinguishedName}}
}
Gestión de GPOs desde PowerShell
Listar todas las GPOs
Get-GPO -All
Crear una nueva GPO
New-GPO -Name «BloqueoAutomaticoPantalla» -Comment «Bloqueo tras 10 minutos de inactividad»
Enlazar una GPO a una OU
New-GPLink -Name «BloqueoAutomaticoPantalla» -Target «OU=Usuarios,DC=dominio,DC=local» -LinkEnabled Yes
Ver configuraciones específicas de una GPO
Get-GPOReport -Name «BloqueoAutomaticoPantalla» -ReportType Html -Path C:\Informes\bloqueo.html
Aplicar backup y restore de GPOs
Backup-GPO -Name «SeguridadTI» -Path «C:\Backups\GPOs»
Restore-GPO -Name «SeguridadTI» -Path «C:\Backups\GPOs»

Administración avanzada
Listar todos los controladores de dominio y su estado
Get-ADDomainController -Filter * | Select-Object Name, IPv4Address, OperatingSystem, IsGlobalCatalog
Elevar un servidor a controlador de dominio
Install-ADDSDomainController -DomainName «dominio.local» -InstallDns -Credential (Get-Credential) -SiteName «Default-First-Site-Name»
Crear OU y delegar permisos
New-ADOrganizationalUnit -Name «Proyectos» -Path «DC=dominio,DC=local»
$ou = «OU=Proyectos,DC=dominio,DC=local»
$group = Get-ADGroup «TI»
dsacls $ou /G «$($group.SamAccountName):LCRP»
Migración y niveles funcionales
Ver esquema y nivel funcional del dominio
Get-ADObject (Get-ADRootDSE).schemaNamingContext -Property objectVersion
Get-ADDomain | Select-Object DomainMode
Get-ADForest | Select-Object ForestMode
Migración: preparar dominio y bosque
Desde ISO o medio de instalación del nuevo sistema (en cmd, no PowerShell):
adprep /forestprep
adprep /domainprep
Subir nivel funcional (solo si todos los DCs ya corren nueva versión)
Set-ADDomainMode -Identity «dominio.local» -DomainMode Windows2016Domain
Set-ADForestMode -Identity «dominio.local» -ForestMode Windows2016Forest
Otros comandos de PowerShell interesantes
Habilitar la papelera de reciclaje de AD
Enable-ADOptionalFeature ‘Recycle Bin Feature’ -Scope ForestOrConfigurationSet -Target ‘dominio.local’
Obtener la OU de todos los usuarios
Get-ADUser -Filter * | Select-Object Name, DistinguishedName
Exportar todos los grupos de un usuario
Get-ADUser cruiz -Properties MemberOf | Select-Object -ExpandProperty MemberOf
Desactivar cuentas que no han iniciado sesión en 6 meses
Search-ADAccount -AccountInactive -UsersOnly -TimeSpan 180.00:00:00 | Disable-ADAccount
Buscar objetos que fueron modificados hoy
Get-ADObject -Filter * -Properties whenChanged | Where-Object { $_.whenChanged -gt (Get-Date).Date }
