Cómo gestionar usuarios de Windows desde PowerShell: guía total

Última actualización: octubre 23, 2025
Autor: 2c0bi
  • Estructura de cmdlets, módulos y ayuda para administrar identidades con PowerShell.
  • Operaciones completas sobre usuarios y grupos locales y de Active Directory.
  • Automatización con CSV y scripts para altas/bajas masivas y cambios de atributos.
  • Panorama de gestión en Microsoft 365 (usuarios, grupos, licencias) con PowerShell.

Gestión de usuarios con PowerShell

Gestionar usuarios desde PowerShell es una de esas habilidades que, una vez la dominas, te ahorra un tiempo brutal y te da control total de tu entorno. Da igual si trabajas con un equipo aislado, con un clúster de servidores o con un dominio completo: hacerlo por consola es más rápido, scriptable y repetible que pelearte con ventanas.

Además, muchos servidores carecen de interfaz gráfica por rendimiento, seguridad o simple economía de recursos. PowerShell encaja como un guante en ese escenario: un shell moderno, orientado a objetos y con una sintaxis consistente de verbo-sustantivo que permite operar a bajo nivel sin tener que recordar cada palanca del sistema.

PowerShell en dos pinceladas: cmdlets, ayuda y filosofía

PowerShell se basa en cmdlets con sintaxis verbo-sustantivo (por ejemplo, ‘New-LocalUser’), orientados a trabajar con objetos del sistema en vez de texto plano. Eso implica que puedes canalizar (pipeline) resultados a otros cmdlets y filtrar por propiedades con total comodidad.

Para apoyarte en el día a día, actualiza los contenidos de ayuda con ‘Update-Help’ y consulta ejemplos reales con ‘Get-Help Nombre-Cmdlet -Examples’. Mantener la ayuda al día te permitirá descubrir parámetros, usos y matices que no recordarás de memoria.

Los cmdlets están agrupados en módulos funcionales. Por ejemplo, todo lo de cuentas locales vive en ‘Microsoft.PowerShell.LocalAccounts’, mientras que el directorio activo se administra con el módulo ‘ActiveDirectory’. Carga y consulta lo disponible con ‘Get-Module -ListAvailable’ y luego inspecciona sus comandos con ‘Get-Command -Module NombreDelModulo’.

La canalización es clave: puedes hacer filtros expresivos con ‘Where-Object’. La sintaxis moderna te deja escribir algo como ‘Where-Object Name -like ‘*LocalAccounts*» en lugar del clásico ‘$_.Name -like ‘*LocalAccounts*», quedando más legible y fácil de mantener.

Administrar cuentas locales y AD con PowerShell

Usuarios locales: listar, crear, modificar y eliminar

El módulo ‘Microsoft.PowerShell.LocalAccounts’ ofrece cmdlets para administrar usuarios y grupos locales. Comprueba que está disponible con ‘Get-Module -ListAvailable -Name Microsoft.PowerShell.LocalAccounts’ y explora sus comandos con ‘Get-Command -Module Microsoft.PowerShell.LocalAccounts’.

Para obtener cuentas locales, usa ‘Get-LocalUser’. Este cmdlet devuelve tanto cuentas integradas (como ‘Administrador’ o ‘Invitado’) como las que crees tú. Acepta filtros por nombre (‘-Name’) e incluso por identificador de seguridad (SID):

Get-LocalUser
Get-LocalUser -Name 'Administrador'
Get-LocalUser -SID 'S-1-5-21-...'  # Ejemplo de consulta por SID

La salida es un objeto ‘LocalUser’ que incluye, entre otras, la propiedad ‘PrincipalSource’ (Windows 10/Server 2016 o superior) indicando su origen: ‘Local’, ‘Active Directory’, ‘Cuenta Microsoft’ o ‘Microsoft Entra group’.

Crear usuarios es tan simple como ejecutar ‘New-LocalUser’. Puedes arrancar con lo mínimo (nombre) o definir una contraseña segura y otros atributos desde el primer momento:

# Alta básica (sin contraseña; la cuenta no podrá iniciar sesión hasta que se habilite y asigne clave)
New-LocalUser -Name 'Usuario1' -Description 'Cuenta de pruebas'

# Alta con contraseña solicitada por consola
$password = Read-Host -AsSecureString
New-LocalUser -Name 'Usuario2' -Password $password -FullName 'Usuario 2 curso' -Description 'Usuario número 2'

Entre los parámetros más útiles de ‘New-LocalUser’ están -AccountExpires, -AccountNeverExpires, -Description, -Disabled, -FullName, -NoPassword, -UserMayNotChangePassword y -Confirm. Elige la combinación que te encaje con la política de permisos en Windows 10.

Relacionado:  Cómo configurar impresora hp en windows 10

Si necesitas renombrar o ajustar atributos, combina ‘Rename-LocalUser’ y ‘Set-LocalUser’:

Rename-LocalUser -Name 'Usuario2' -NewName 'i.landajuela'
Set-LocalUser -Name 'i.landajuela' -Description 'Responsable TIC'
Get-LocalUser -Name 'i.landajuela' | Set-LocalUser -FullName 'Iker Landajuela'
Set-LocalUser -Name 'i.landajuela' -PasswordNeverExpires $false

Para controlar el inicio de sesión, recuerda que puedes deshabilitar o habilitar cuentas locales directamente:

Disable-LocalUser -Name 'Usuario1'
Enable-LocalUser -Name 'i.landajuela'

El cambio de contraseña en una cuenta existente se hace con ‘Set-LocalUser -Password’:

$password = Read-Host -AsSecureString
Get-LocalUser -Name 'i.landajuela' | Set-LocalUser -Password $password

Para la eliminación, ‘Remove-LocalUser’ es directo y admite canalización. Conviene listar el estado tras el borrado para validar el resultado:

Remove-LocalUser 'Usuario1'
Get-LocalUser | Format-Table Name, Enabled

Grupos locales: alta, membresía y limpieza

Consulta primero lo que tienes con ‘Get-LocalGroup’ y el detalle de un grupo con ‘Get-LocalGroup -Name’. Para crear un contenedor lógico nuevo:

New-LocalGroup -Name 'Empleados' -Description 'Grupo empleados'

Añadir y quitar miembros es tarea de ‘Add-LocalGroupMember’ y ‘Remove-LocalGroupMember’. Aceptan usuarios locales y de dominio (usando el formato ‘DOMINIO\cuenta’):

Add-LocalGroupMember -Group 'Empleados' -Name 'i.landajuela' -Verbose
Add-LocalGroupMember -Group 'Empleados' -Name 'DOMINIO\i.landajuela'
Get-LocalGroupMember -Name 'Empleados'
Remove-LocalGroupMember -Group 'Empleados' -Name 'i.landajuela'

Si el grupo deja de ser necesario, puedes borrarlo sin complicación:

Remove-LocalGroup -Name 'Empleados'

Active Directory (AD DS): preparar el entorno y primeras consultas

Para un dominio, lo primero es verificar tu versión de PowerShell y cargar el módulo ‘ActiveDirectory’. Comprueba la versión con ‘Get-Host’ o ‘$PSVersionTable.PSVersion’ y, si trabajas en Windows Server 2012 R2, asegúrate de tener WMF 5.1 instalado para acceder a cmdlets actuales.

Abre PowerShell como administrador e importa el módulo:

Import-Module ActiveDirectory

Conéctate conceptualmente al bosque y al dominio consultando su información con ‘Get-ADForest’ y ‘Get-ADDomain’. Puedes seleccionar sólo campos clave y dar formato a la salida para verla en tabla, lista o incluso en una cuadrícula interactiva:

Get-ADForest | Select-Object Name, Domains, ForestMode
Get-ADDomain | Select-Object Name, DomainMode
Get-ADDomain | Select-Object Name, DomainMode | Format-Table
Get-ADDomain | Select-Object Name, DomainMode | Format-List
Get-ADDomain | Select-Object Name, DomainMode | Out-GridView

Para saber dónde estás pisando, identifica controladores de dominio y filtra propiedades con ‘-Filter’ o ‘Select-Object’:

Get-ADDomainController -Filter * | Select-Object Name, IPv4Address, Site, OperationMasterRoles

Usuarios en Active Directory: alta, consulta, cambios y baja

Crear usuarios de AD es cosa de ‘New-ADUser’. El alta mínima define el nombre del objeto, pero lo normal es añadir nombre, apellidos y ubicación (OU o contenedor) dentro del directorio. Conviene preparar la contraseña como objeto seguro:

# Alta mínima
New-ADUser -Name 'Victor'

# Alta más completa con ubicación
New-ADUser -Name 'Victor' -GivenName 'Victor' -Surname 'Genovés' -Path 'CN=Users,DC=somebooks,DC=local'

# Alta con contraseña (ejemplo genérico)
$userPassword = ConvertTo-SecureString -AsPlainText -Force -String 'ContraseñaSegura123!'
New-ADUser -Name 'jioller2' -Description 'Segunda Cuenta de Nacho' -Enabled $true -AccountPassword $userPassword

Para consultar la información de un usuario, ‘Get-ADUser’ a pelo devuelve lo básico. Si quieres verlo todo, usa ‘-Properties *’ y, si la salida es enorme, apóyate en ‘more’ para paginar:

Get-ADUser 'Victor' -Properties * | more

También puedes auditar cuántos usuarios hay en el dominio con un simple recuento:

(Get-ADUser -Filter *).Count

Una vez creada la cuenta, lo habitual es asignarla a grupos con ‘Add-ADGroupMember’. Recuerda que utiliza el ‘SamAccountName’ de la cuenta:

Add-ADGroupMember 'GrupoPrueba' 'jioller'

Para modificar atributos (descripción, ciudad, departamento, etc.) usa ‘Set-ADUser’ con los parámetros apropiados. Si hay espacios, es prudente mantener la cadena entre comillas:

Set-ADUser 'jioller' -Description 'Usuario de Nacho'

En cuanto a contraseñas, si conoces la actual, solicita el cambio interactivo con ‘Set-ADAccountPassword’; si no, usa ‘-Reset’ para forzar el restablecimiento:

Set-ADAccountPassword 'jioller'
Set-ADAccountPassword 'jioller' -Reset

Si una cuenta está bloqueada por intentos fallidos, la solución es desbloquearla con ‘Unlock-ADAccount’, y puedes probar primero con ‘-WhatIf’ para simular:

Unlock-ADAccount 'jioller' -Verbose
Unlock-ADAccount 'jioller' -WhatIf

La eliminación en AD se realiza con ‘Remove-ADUser’ especificando la identidad; por ejemplo, con el nombre distinguido de la cuenta (‘CN=…,OU=…,DC=…’). No confundas este cmdlet con ‘Remove-LocalUser’, que es exclusivamente para cuentas locales:

Remove-ADUser -Identity 'CN=Victor,CN=Users,DC=somebooks,DC=local'

Grupos en Active Directory: información y membresías

Para revisar datos de un grupo específico, usa ‘Get-ADGroup’ con el nombre del grupo. Es rápido para confirmar tipo, ámbito o atributos clave:

Get-ADGroup 'GrupoPrueba'

Si lo que buscas es saber quién pertenece a un grupo y el tipo de objeto de cada entrada (usuario, grupo, etc.), ‘Get-ADGroupMember’ te lo muestra de un vistazo:

Get-ADGroupMember 'GrupoPrueba'

Gestión masiva con CSV (local y dominio)

Para altas a granel, la receta típica es un CSV con cabeceras claras y un bucle ‘foreach’ que procese línea a línea. En local, una estructura mínima puede ser ‘user,password’:

# usuarios.csv
user,password
usuario01,password01
usuario02,password02

Importa el fichero y crea cada cuenta local convirtiendo la contraseña a SecureString. Este patrón evita meter contraseñas en claro en el cmdlet de creación:

$lista = Import-Csv -Path 'usuarios.csv'
foreach ($i in $lista) {
  $pwd = ConvertTo-SecureString $i.password -AsPlainText -Force
  New-LocalUser $i.user -Password $pwd
}

Para borrados masivos, basta con un CSV con la cabecera ‘user’ y un bucle que llame a ‘Remove-LocalUser’:

# borradousuarios.csv
user
usuario01
usuario02

$lista = Import-Csv -Path 'borradousuarios.csv'
foreach ($i in $lista) {
  Remove-LocalUser $i.user
}

Si haces lo mismo en Active Directory, adapta el cmdlet de alta/borrado y el destino (ou/Path) a tu estructura. Como guía, usa ‘New-ADUser’ y ‘Remove-ADUser’, y considera parametrizar OU, UPN, licencias, etc., según tus políticas.

Relacionado:  Cómo configurar el juego gang beasts

Get-LocalUser en profundidad: sintaxis, filtros y ejemplos útiles

El cmdlet ‘Get-LocalUser’ acepta dos conjuntos de parámetros principales: por nombre (‘-Name’) y por SID (‘-SID’). Ambos admiten valores en la canalización y ‘-Name’ soporta comodines:

# Sintaxis esencial
Get-LocalUser  <String[]>]
Get-LocalUser  <SecurityIdentifier[]>]

Ejemplos prácticos que te sacan de apuros en segundos: por nombre exacto, por cuenta Microsoft vinculada o por SID específico:

# Por nombre
Get-LocalUser -Name 'AdminContoso02'

# Cuenta conectada a Microsoft Account
Get-LocalUser -Name 'MicrosoftAccount\username@outlook.com'

# Por SID
Get-LocalUser -SID 'S-1-5-21-9526073513-1762370368-3942940353-500'

Combina ‘Get-LocalUser’ con ‘Where-Object’ para búsquedas flexibles aprovechando comodines (‘*’) y filtrado por columnas/propiedades:

Get-LocalUser | Where-Object Name -like 'Admin*' | Select-Object Name, Enabled, Description

Trucos de productividad, requisitos y GUI alternativa

Antes de ponerte a fondo, mantén la ayuda actualizada y revisa versiones. En entornos antiguos como Windows Server 2012 R2, instala WMF 5.1 para acceder a cmdlets modernos. Te evitarás errores raros y parámetros que no existen.

Para localizar cmdlets por palabra clave, usa ‘Get-Command’ con ‘-Module’ o ‘-Name’ y haz búsquedas tipo ‘usuario’ o ‘group’ según idioma de tu entorno. Es una forma rápida de descubrir capacidades sin salir de la consola.

Si prefieres una vista gráfica puntual, abre ‘lusrmgr.msc’ para gestionar usuarios y grupos locales. No es tan ágil como scriptar, pero te puede ayudar a validar cambios en vivo o a resolver una urgencia visualmente.

Recuerda siempre validar lo que haces: revisa membresías de grupos, estados de ‘Enabled/Disabled’, fechas de expiración de cuentas y la propiedad ‘PasswordNeverExpires’ conforme a las políticas de tu organización.

Microsoft 365 desde PowerShell: panorama de operaciones clave

Más allá del equipo y del dominio, muchos administradores gestionan usuarios en la nube. Con PowerShell y Microsoft Graph puedes gestionar cuentas de Microsoft 365 y automatizar tareas clásicas: altas, bajas, actualización de atributos, membresías de grupos, gerentes (manager), y administración de licencias.

Relacionado:  Cómo configurar una poliza dinamica en coi 8.0

A nivel operativo, las acciones típicas incluyen crear usuarios (individual y masivo), listar todos los usuarios, actualizar propiedades, añadir/quitar usuarios de grupos (también en lote), asignar y retirar licencias y, llegado el caso, eliminar cuentas. El enfoque es similar al de AD: cmdlets consistentes y pipelines para encadenar pasos.

Para empezar con M365, plantéate un módulo de conexión a tu tenant, roles adecuados y patrones repetibles: scripts parametrizados, ficheros CSV para cargas masivas y comprobaciones automáticas (existencia previa, licencias disponibles, pertenencias requeridas).

Seguridad y buenas prácticas al administrar identidades

Trabajar con identidades exige mimo: usa siempre SecureString para contraseñas, evita que queden en texto claro en scripts y repositorios, y contempla el cifrado de credenciales si automatizas en tareas programadas.

Aplica el principio de mínimo privilegio: no ejecutes la consola como administrador si no es necesario, y limita permisos de cuenta de servicio y de los scripts de automatización según su alcance real, y considera medidas para evitar que los usuarios instalen software.

Si vas a toquetear en serio, monta antes un entorno de pruebas (maqueta/piloto) para evitar sustos en producción. En AD DS, prueba en una OU de laboratorio; en local, usa una VM desechable. Verifica que todo funciona y luego despliega el procedimiento en producción.

Para auditoría rápida, combina ‘Get-ADUser -Filter *’ con ‘Select-Object’ y conteos, o genera informes periódicos sobre altas, bajas y cambios de membresía. Tener esa foto al día te ahorra quebraderos de cabeza.

Con PowerShell puedes cubrir el ciclo completo de gestión de usuarios y grupos: desde cuentas locales con ‘Microsoft.PowerShell.LocalAccounts’, pasando por el dominio con ‘ActiveDirectory’, hasta Microsoft 365 con Graph/PowerShell. Si a todo eso le sumas ayudas como ‘Update-Help’, búsquedas con ‘Get-Command’ y filtros limpios en pipeline, tendrás un flujo sólido para crear, consultar, modificar, bloquear/desbloquear, resetear contraseñas, gestionar membresías y orquestar cargas masivas con CSV de forma segura y eficiente.

Artículo relacionado:
Cómo configurar usuarios en windows 7