PowerShell para gestionar AD

Listado de Cmdlets utiles para realizar operaciones y enumeración básica en Active Directory.

Para utilizar la mayoria de los Cmdlets listados a continuación, debemos importar en primer lugar el modulo ActiveDirectory.

Import-Module ActiveDirectory

Sistema

Obtener Variables de entorno
Get-ChildItem Env:
Obtener funciones en el scope de Powershell
Get-Command -CommandType Function
Obtener una lista de los modulos de PowerShell cargados
Get-Module
Listar comandos para un módulo específico
Get-Command -Module ActiveDirectory
Obtener información del Dominio
Get-ADDomain
Obtener ayuda de un cmd-let
Get-Help <cmd-let>
Obtener el estado actual de Windows Defender
Get-MpComputerStatus
Obtener AppLockerPolicy
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

Usuarios

Crear un nuevo usuario
New-ADUser -Name "NombreUsuario" -SamAccountName "NombreUsuario" -UserPrincipalName "NombreUsuario@dominio.local" -AccountPassword (ConvertTo-SecureString -AsPlainText "Contraseña" -Force)
Filtrar por un nombre de usuario especifico
Get-ADUser -Filter * | Where-Object {$_.SamAccountName -eq "NombreUsuario"}

En este comando:

  • Get-ADUser -Filter * obtiene todos los usuarios de Active Directory.

  • Where-Object se utiliza para filtrar los resultados.

  • {} delimita el script de bloque para la condición de filtro.

  • $_ representa el objeto actual en el pipeline (en este caso, cada usuario obtenido por Get-ADUser).

  • .SamAccountName es la propiedad que contiene el nombre de usuario.

  • -eq "NombreUsuario" es el operador de igualdad para comparar el valor de la propiedad SamAccountName con el nombre de usuario que deseas buscar.

Filtrar por un usuario donde el campo ServicePrincipalName sea distinto de null
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
Crear un nuevo usuario asignado algunos atributos
New-ADUser -Name "first last" -Accountpassword (Read-Host -AsSecureString "Super$ecurePassword!") -Enabled $true -OtherAttributes @{'title'="Analyst";'mail'="f.last@domain.local"}
Agregar un usuario a un grupo específico
Add-ADGroupMember -Identity "NombreGrupo" -Members "NombreUsuario"
Cambiar la contraseña de un usuario
Set-ADAccountPassword -Identity "NombreUsuario" -NewPassword (ConvertTo-SecureString -AsPlainText "NuevaContraseña" -Force) -Reset
Obtener los grupos del un usuario
$user = Get-ADUser -Identity "NombreUsuario"
$groups = Get-ADPrincipalGroupMembership -Identity $user
$groups | Select-Object -ExpandProperty Name
Quitar un usuario de un grupo
Remove-ADGroupMember -Identity "NombreGrupo" -Members "NombreUsuario"
Deshabilitar una cuenta de usuario
Disable-ADAccount -Identity "NombreUsuario"
Habilitar una cuenta de usuario
Enable-ADAccount -Identity "NombreUsuario"
Desbloquear una cuenta de usuario
Unlock-ADAccount -Identity "NombreUsuario"
Obtener información detallada de un usuario
Get-ADUser -Identity "NombreUsuario" -Properties *

Grupos

Crear un nuevo grupo
New-ADGroup -Name "NombreGrupo" -GroupCategory Security -GroupScope Global -DisplayName "Nombre Descriptivo del Grupo" -Description "Descripción del Grupo"
Listar los miembros de un grupo
Get-ADGroupMember -Identity "NombreGrupo" | Select-Object Name, SamAccountName
Obtener información detallada de un grupo
Get-ADGroup -Identity "NombreGrupo" -Properties *
Renombrar un grupo
Rename-ADObject -Identity "CN=NombreGrupo,OU=Origen,DC=dominio,DC=com" -NewName "NuevoNombreGrupo"
Eliminar un grupo
Remove-ADGroup -Identity "NombreGrupo"
Listar los grupos
Get-ADGroup -Filter * | select name
Obtener una lista de todos los grupos en una OU específica
Get-ADGroup -Filter * -SearchBase "OU=NombreOU,DC=dominio,DC=com"
Obtener una lista de todos los miembros de un grupo
Get-ADGroupMember -Identity "NombreGrupo"

Trusts (Confianzas)

Verificar las relaciones de confianza de dominio
Get-ADTrust -Filter *

Este cmdlet imprimirá las relaciones de confianza que tenga el dominio. Podemos determinar si son confianzas dentro de nuestro bosque o con dominios de otros bosques, el tipo de confianza, la dirección de la confianza y el nombre del dominio con el que está la relación.

Computadoras

Obtener información detallada de un equipo
Get-ADComputer -Identity "NombreEquipo" -Properties *
Obtener una lista de todos los equipos en un dominio
Get-ADComputer -Filter *
Obtener información detallada de un equipo específico
Get-ADComputer -Identity "NombreEquipo" -Properties *
Crear un nuevo objeto de equipo en Active Directory
New-ADComputer -Name "NombreEquipo" -Path "OU=NombreOU,DC=dominio,DC=com"
Cambiar el nombre de un equipo en Active Directory
Rename-ADObject -Identity "CN=NombreEquipo,OU=Origen,DC=dominio,DC=com" -NewName "NuevoNombreEquipo"
Deshabilitar una cuenta de equipo
Disable-ADAccount -Identity "NombreEquipo"
Habilitar una cuenta de equipo
Enable-ADAccount -Identity "NombreEquipo"
Eliminar un objeto de equipo de Active Directory
Remove-ADComputer -Identity "NombreEquipo"

Unidades Organizativas

Crear una nueva Unidad Organizativa
New-ADOrganizationalUnit -Name "NombreOU" -Path "OU=ParentOU,DC=dominio,DC=com"
Mover un objeto (usuario, grupo, etc.) a una OU diferente
Move-ADObject -Identity "CN=NombreObjeto,OU=Origen,DC=dominio,DC=com" -TargetPath "OU=Destino,DC=dominio,DC=com"
Obtener una lista de todas las unidades organizativas
Get-ADOrganizationalUnit -Filter *
Mover un equipo a una unidad organizativa diferente
Move-ADObject -Identity "CN=NombreEquipo,OU=Origen,DC=dominio,DC=com" -TargetPath "OU=Destino,DC=dominio,DC=com"

GPO (Group Policy Object)

Obtener una lista de todas las GPO
Get-GPO -All
Obtener una lista de todas las GPO en un dominio específico
Get-GPO -All -Domain "NombreDominio"
Crear una nueva GPO
New-GPO -Name "NombreGPO"
Cambiar el nombre de una GPO
Rename-GPO -Name "NombreActualGPO" -NewName "NuevoNombreGPO"
Copiar una GPO
Copy-GPO -SourceName "NombreGPOOrigen" -TargetName "NombreGPODestino"
Eliminar una GPO
Remove-GPO -Name "NombreGPO"
Obtener la configuración de una GPO
Get-GPOReport -Name "NombreGPO" -ReportType XML
Establecer la configuración de una GPO
Set-GPRegistryValue -Name "NombreGPO" -Key "HKEY_CURRENT_USER\Software\Ejemplo" -ValueName "Ejemplo" -Type String -Value "ValorEjemplo"
Enlace de una GPO a una OU específica
New-GPLink -Name "NombreGPO" -Target "OU=NombreOU,DC=dominio,DC=com"
Desenlace de una GPO de una OU específica
Remove-GPLink -Name "NombreGPO" -Target "OU=NombreOU,DC=dominio,DC=com"
Realizar una copia de seguridad y restauración de una GPO

Para realizar una copia de seguridad:

Backup-GPO -Name "NombreGPO" -Path "C:\Ruta\Backup"

Para restaurar desde una copia de seguridad:

Restore-GPO -Name "NombreGPO" -Path "C:\Ruta\Backup"

Habilitar DONT-REQ-PRE-AUTH

# Nombre del usuario a modificar
$user = "usuario.test"

# Obtener el objeto del usuario
$u = Get-ADUser -Identity $user -Properties userAccountControl

# Mostrar los flags actuales
Write-Host "UAC antes: $($u.userAccountControl)"

# Agregar la flag de DONT_REQUIRE_PREAUTH
$newUAC = $u.userAccountControl -bor 0x400000

# Aplicar el nuevo valor
Set-ADUser -Identity $user -Replace @{userAccountControl=$newUAC}

# Verificar
(Get-ADUser -Identity $user -Properties userAccountControl).userAccountControl

Deshabilitar DONT-REQ-PRE-AUTH

$newUAC = $u.userAccountControl -band -bnot 0x400000
Set-ADUser -Identity $user -Replace @{userAccountControl=$newUAC}