# PowerShell para gestionar Active Directory

## Importar módulo de Active Directory

Para utilizar la mayoria de los Cmdlets listados en este artículo, debemos importar en primer lugar el modulo **ActiveDirectory**.

```powershell
Import-Module ActiveDirectory
```

## Sistema

### Obtener Variables de entorno

```powershell
Get-ChildItem Env:
```

### Obtener funciones en el scope de Powershell

```powershell
Get-Command -CommandType Function
```

### Obtener una lista de los modulos de PowerShell cargados

```powershell
Get-Module
```

### Listar comandos para un módulo específico

```powershell
Get-Command -Module ActiveDirectory
```

### Obtener información del Dominio

```powershell
Get-ADDomain
```

### Obtener ayuda de un cmd-let

```powershell
Get-Help <cmd-let>
```

### Obtener el estado actual de Windows Defender

```powershell
Get-MpComputerStatus
```

### Obtener AppLockerPolicy

```powershell
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
```

***

## Usuarios

### Crear un nuevo usuario

```powershell
New-ADUser -Name "NombreUsuario" -SamAccountName "NombreUsuario" -UserPrincipalName "NombreUsuario@dominio.com" -AccountPassword (ConvertTo-SecureString -AsPlainText "Contraseña" -Force)
```

### Filtrar por un nombre de usuario especifico

```powershell
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

```powershell
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
```

### Crear un nuevo usuario asignado algunos atributos

```powershell
New-ADUser -Name "first last" -Accountpassword (Read-Host -AsSecureString "Super$ecurePassword!") -Enabled $true -OtherAttributes @{'title'="Analyst";'mail'="f.last@domain.com"}
```

### Agregar un usuario a un grupo específico

```powershell
Add-ADGroupMember -Identity "NombreGrupo" -Members "NombreUsuario"
```

### Cambiar la contraseña de un usuario

```powershell
Set-ADAccountPassword -Identity "NombreUsuario" -NewPassword (ConvertTo-SecureString -AsPlainText "NuevaContraseña" -Force) -Reset
```

### Forzar el cambio de contraseña en el proximo inicio de sesión

```powershell
Set-ADUser -Identity amasters -ChangePasswordAtLogon $true
```

### Obtener los grupos del un usuario

```powershell
$user = Get-ADUser -Identity "NombreUsuario"
$groups = Get-ADPrincipalGroupMembership -Identity $user
$groups | Select-Object -ExpandProperty Name
```

### Quitar un usuario de un grupo

```powershell
Remove-ADGroupMember -Identity "NombreGrupo" -Members "NombreUsuario"
```

### Deshabilitar una cuenta de usuario

```powershell
Disable-ADAccount -Identity "NombreUsuario"
```

### Habilitar una cuenta de usuario

```powershell
Enable-ADAccount -Identity "NombreUsuario"
```

### Desbloquear una cuenta de usuario

```powershell
Unlock-ADAccount -Identity "NombreUsuario"
```

### Obtener información detallada de un usuario

```powershell
Get-ADUser -Identity "NombreUsuario" -Properties *
```

***

## Grupos

### Crear un nuevo grupo

```powershell
New-ADGroup -Name "NombreGrupo" -GroupCategory Security -GroupScope Global -DisplayName "Nombre Descriptivo del Grupo" -Description "Descripción del Grupo"
```

### Listar los miembros de un grupo

```powershell
Get-ADGroupMember -Identity "NombreGrupo" | Select-Object Name, SamAccountName
```

### Obtener información detallada de un grupo

```powershell
Get-ADGroup -Identity "NombreGrupo" -Properties *
```

### Renombrar un grupo

```powershell
Rename-ADObject -Identity "CN=NombreGrupo,OU=Origen,DC=dominio,DC=com" -NewName "NuevoNombreGrupo"
```

### Eliminar un grupo

```powershell
Remove-ADGroup -Identity "NombreGrupo"
```

### Listar los grupos

```powershell
Get-ADGroup -Filter * | select name
```

### Obtener una lista de todos los grupos en una OU específica

```powershell
Get-ADGroup -Filter * -SearchBase "OU=NombreOU,DC=dominio,DC=com"
```

### Obtener una lista de todos los miembros de un grupo

```powershell
Get-ADGroupMember -Identity "NombreGrupo"
```

***

## Trusts (Confianzas)

### Verificar las relaciones de confianza de dominio

```powershell
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

```powershell
Get-ADComputer -Identity "NombreEquipo" -Properties *
```

### Obtener una lista de todos los equipos en un dominio

```powershell
Get-ADComputer -Filter *
```

### Obtener información detallada de un equipo específico

```powershell
Get-ADComputer -Identity "NombreEquipo" -Properties *
```

### Crear un nuevo objeto de equipo en Active Directory

```powershell
New-ADComputer -Name "NombreEquipo" -Path "OU=NombreOU,DC=dominio,DC=com"
```

### Cambiar el nombre de un equipo en Active Directory

```powershell
Rename-ADObject -Identity "CN=NombreEquipo,OU=Origen,DC=dominio,DC=com" -NewName "NuevoNombreEquipo"
```

### Deshabilitar una cuenta de equipo

```powershell
Disable-ADAccount -Identity "NombreEquipo"
```

### Habilitar una cuenta de equipo

```powershell
Enable-ADAccount -Identity "NombreEquipo"
```

### Eliminar un objeto de equipo de Active Directory

```powershell
Remove-ADComputer -Identity "NombreEquipo"
```

***

## Unidades Organizativas

### Crear una nueva Unidad Organizativa

```powershell
New-ADOrganizationalUnit -Name "NombreOU" -Path "OU=ParentOU,DC=dominio,DC=com"
```

### Mover un objeto (usuario, grupo, etc.) a una OU diferente

```powershell
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

```powershell
Get-ADOrganizationalUnit -Filter *
```

### Mover un equipo a una unidad organizativa diferente

```powershell
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

```powershell
Get-GPO -All
```

### Obtener una lista de todas las GPO en un dominio específico

```powershell
Get-GPO -All -Domain "NombreDominio"
```

### Crear una nueva GPO

```powershell
New-GPO -Name "NombreGPO"
```

### Cambiar el nombre de una GPO

```powershell
Rename-GPO -Name "NombreActualGPO" -NewName "NuevoNombreGPO"
```

### Copiar una GPO

```powershell
Copy-GPO -SourceName "NombreGPOOrigen" -TargetName "NombreGPODestino"
```

### Eliminar una GPO

```powershell
Remove-GPO -Name "NombreGPO"
```

### Obtener la configuración de una GPO

```powershell
Get-GPOReport -Name "NombreGPO" -ReportType XML
```

### Establecer la configuración de una GPO

```powershell
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

```powershell
New-GPLink -Name "NombreGPO" -Target "OU=NombreOU,DC=dominio,DC=com"
```

### Desenlace de una GPO de una OU específica

```powershell
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:

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

Para restaurar desde una copia de seguridad:

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://d4redevil.gitbook.io/d4redevil/active-directory/powershell-para-gestionar-active-directory.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
