Si has llegado hasta aquí preguntándote si merece la pena aprender a realizar una automatización de PowerShell sin ser administrador de sistemas, ya te adelanto algo: la respuesta suele ser un sí rotundo. Aunque muchas guías se centran en tareas de administración de servidores, dominios o nubes corporativas, PowerShell es una herramienta brutal tanto para automatizar el día a día en tu equipo como para abrirte puertas en el mundo profesional, incluso si ahora mismo no gestionas un Active Directory ni una infraestructura compleja.
Al mismo tiempo, es cierto que el potencial real de PowerShell brilla cuando se usa para automatización masiva: gestión de usuarios, movimientos en Active Directory, control de recursos en Microsoft 365, Azure, Power Apps… Por eso, en este artículo vamos a ver qué se puede hacer, cómo se hace y en qué escenarios te puede venir de cine, tanto si eres admin como si solo quieres llevar tu productividad un paso más allá.
¿Tiene sentido PowerShell si no eres administrador?
Mucha gente se plantea que, si no va a tocar servidores, dominios ni redes, PowerShell quizá no tenga utilidad en su día a día. Y es normal pensarlo cuando la mayoría de ejemplos que se ven hablan de bosques de Active Directory, controladores de dominio, licencias de Microsoft 365 o despliegues en Azure.
Sin embargo, incluso como usuario “de a pie” puedes automatizar tareas repetitivas: limpiar ficheros temporales, comprobar el uso de memoria o disco, lanzar aplicaciones con distintos parámetros, hacer copias de seguridad simples, procesar ficheros CSV, etc. y programarlas con el Programador de tareas para automatizar mantenimiento.
Dicho esto, donde realmente despega es cuando lo usas para administrar infraestructuras Microsoft: Active Directory, Azure, Microsoft 365, Power Apps, Dynamics 365, etc. Ahí es donde entran en juego los módulos y cmdlets de administración que veremos a continuación y donde puedes ahorrarte cientos de horas de trabajo manual.
Cmdlets de PowerShell para automatizar plataformas Microsoft
PowerShell dispone de distintas bibliotecas de cmdlets especializadas para cada servicio de Microsoft. Estas bibliotecas son módulos que se instalan y cargan en tu sesión de PowerShell para poder ejecutar comandos específicos de cada plataforma.
Power Apps: automatizar entornos, apps y conexiones
Los cmdlets de Power Apps están pensados para que tanto creadores como administradores puedan gestionar entornos, aplicaciones y flujos sin depender siempre del portal web. Con ellos puedes listar entornos, ver aplicaciones, revisar conectores y conexiones, o crear flujos de trabajo de gobierno sobre quién puede crear qué y dónde.
Por ejemplo, con comandos como Get-AdminPowerAppEnvironment puedes obtener un listado completo de entornos, ver su nombre para mostrar, su GUID y otros detalles esenciales para automatizaciones posteriores. Esto resulta clave cuando necesitas trabajar después con scripts que actúan sobre un entorno concreto.
Microsoft 365: automatización orientada al usuario
En el entorno de Microsoft 365, PowerShell se utiliza para automatizar tareas relacionadas con usuarios y licencias. Desde asignar o revocar licencias de forma masiva, hasta revisar qué usuarios tienen determinado plan, deshabilitar cuentas, configurar propiedades, etc. y, si necesitas profundizar, puedes consultar guías para administrar usuarios desde PowerShell.
Utilizar cmdlets de Microsoft 365 te permite, por ejemplo, gestionar altas y bajas cuando entra o sale personal de la organización, sin tener que dar mil vueltas por el portal de administración. Es especialmente útil cuando hablamos de cientos de usuarios y políticas que deben aplicarse con precisión.
Dynamics 365 y Dataverse
En entornos con bases de datos sobre Dataverse, los módulos de PowerShell para Dynamics 365 aportan compatibilidad con la API de administración en línea y con la implementación de soluciones automatizadas en distintos entornos.
Esto se traduce en que puedes desplegar soluciones, mover componentes entre entornos, administrar configuraciones o lanzar tareas repetitivas sin tener que hacerlo a mano cada vez. Es un enfoque perfecto para escenarios con varias organizaciones, entornos de prueba y producción.
Azure PowerShell
La biblioteca de Azure PowerShell permite que cualquier componente de Azure forme parte de tu solución automatizada: máquinas virtuales, redes, almacenamiento, gateways, etc. También te sirve para integrar recursos locales, como una puerta de enlace de aplicación, en la configuración global de tu infraestructura.
Este tipo de automatización resulta clave cuando quieres mantener consistencia entre entornos, desplegar infraestructura como código o ejecutar tareas recurrentes (apagado de máquinas fuera de horario, revisión de costos, etc.).
Ejemplos de tareas administrativas con Power Apps y PowerShell
Para ilustrar el potencial de PowerShell en el gobierno de Power Apps, podemos ver algunas tareas típicas orientadas a entornos y aplicaciones. El cmdlet de cabecera es Get-AdminPowerAppEnvironment, que devuelve la lista de entornos disponibles.
Al ejecutarlo sin parámetros, conseguirás información clave de cada entorno, como el nombre visible, su identificador (GUID) y otros datos. Este GUID es imprescindible para operaciones posteriores más detalladas.
Si quieres localizar el entorno predeterminado del inquilino, puedes aplicar parámetros adicionales, como -Default, que filtran el resultado para encontrar ese entorno genérico rápidamente.
Una vez conoces el GUID o el nombre interno del entorno, puedes usarlo para profundizar en sus detalles, por ejemplo, listando conexiones, aplicaciones asociadas o flujos. Combinando cmdlets con el operador de canalización (pipe) es posible encadenar consultas: obtener el entorno y, sobre ese resultado, lanzar otros cmdlets como Get-AdminPowerAppConnection.
Gracias a la tubería y a la manipulación de propiedades con comandos como Select o Group, es posible transformar la salida, agrupar aplicaciones por entorno y generar objetos personalizados que muestren de forma clara, por ejemplo, el número de apps por cada entorno, junto con su nombre descriptivo.
Ejemplo rápido: comprobación de memoria con PowerShell

Para que se vea que PowerShell también es útil sin ser administrador de dominios, puedes usar un cmdlet tan simple como Get-CimInstance sobre la clase Win32_OperatingSystem para consultar la memoria libre del sistema.
Combinando esa información con una pequeña expresión de cálculo, puedes convertir la memoria libre a GB, redondearla y compararla con un umbral pasado como parámetro a un script (por ejemplo, 80 GB). Según el resultado, mostrarás un aviso de memoria baja o un mensaje indicando que todo está correcto.
Este tipo de script, aunque sencillo, ejemplifica bien cómo PowerShell mezcla objetos, operaciones matemáticas y control de flujo (condicionales) para crear utilidades rápidas que puedes adaptar a tu entorno sin necesidad de grandes conocimientos previos y ejecutarlas desde Windows Terminal.
Ejecutar programas como usuario normal desde un script elevado
Un problema bastante común es tener un script que necesita ejecutarse con privilegios de administrador para ciertas tareas (por ejemplo, cambios de sistema), pero que al mismo tiempo debe lanzar una aplicación que queremos corra con permisos de usuario estándar.
Imagina un script con menú y bucles que reinicia aplicaciones con distintos argumentos. Algunas de esas acciones requieren elevación, pero el programa final debería lanzarse sin privilegios elevados. Usar Start-Process con parámetros como -RunAs o -Credential puede obligarte a introducir la contraseña cada vez, lo cual es poco práctico.
La solución pasa por jugar con contextos de seguridad, aprovechar el usuario interactivo actual o delegar el lanzamiento en otro proceso que no esté elevado. No es algo trivial, pero deja claro cómo PowerShell puede gestionar procesos y permisos de forma bastante sofisticada, más allá de la simple ejecución de comandos.
Preparar PowerShell para trabajar con Active Directory
Si vas a gestionar usuarios, grupos o equipos en un AD DS Server, el primer paso es verificar la versión de PowerShell instalada. Algunas funcionalidades requieren versiones concretas o, como mínimo, saber qué tienes para evitar comportamientos inesperados.
Comandos como Get-Host, $PSVersionTable o directamente $PSVersionTable.PSVersion te permiten comprobar versión y características. Get-Host devuelve información sobre la consola, mientras que PSVersionTable ofrece un resumen detallado de la versión de PowerShell y otros datos del entorno.
Una vez comprobado que todo está en orden, debes importar el módulo de Active Directory, que es el que añade todos los cmdlets necesarios para trabajar con usuarios, grupos, bosques, dominios, controladores, etc. El módulo se llama precisamente ActiveDirectory.
Para ello, es recomendable abrir la consola de PowerShell con permisos de administrador y ejecutar Import-Module ActiveDirectory. Si no aparece ningún error, el módulo queda cargado y listo para usar. A partir de ese momento, cmdlets como Get-ADUser, New-ADUser, Get-ADDomain o Get-ADGroup estarán disponibles.
Consultar información del bosque y del dominio
Una vez tienes acceso al módulo de Active Directory, una práctica muy habitual es obtener una vista general de la infraestructura. Para ello, se usan cmdlets que informan sobre el bosque (forest), el dominio y los controladores de dominio.
Información del bosque de AD DS
El cmdlet Get-ADForest devuelve datos del bosque, como el nombre, la lista de dominios, los sitios, la raíz del dominio, las particiones, el maestro de nombres de dominio y el nivel funcional.
Esta salida se puede filtrar con Select y el operador de tubería para mostrar solo los campos que te interesan. Por ejemplo, solo el maestro de nombres de dominio o el nivel funcional, algo muy útil durante auditorías o tareas de revisión.
Información del dominio
De forma similar, el cmdlet Get-ADDomain ofrece información sobre el dominio actual: nombre del dominio, dominios hijos, dominio padre, raíz DNS, nivel funcional, bosque al que pertenece, nombre NetBIOS, emulador PDC, maestro RID o maestro de infraestructura.
También aquí puedes usar pipes y Select para mostrar solo algunos campos, como Name o DomainMode, o combinarlos en la misma salida. Esto ayuda a verificar rápidamente el estado y la configuración del dominio sin tener que navegar por consolas gráficas.
Formatos de salida: tabla, lista y ventana
PowerShell permite moldear la presentación de la información para hacerla más cómoda de leer. Los comandos Format-Table (FT), Format-List (FL) y Out-GridView son tres opciones muy utilizadas.
Por ejemplo, puedes canalizar la salida de Get-ADDomain a FT para visualizarla en tabla, a FL para verla en formato de lista con más detalle, o a Out-GridView para abrir una ventana interactiva donde filtrar y ordenar.
Controladores de dominio
El cmdlet Get-ADDomainController te da información sobre los DCs de tu infraestructura. Es posible usar el parámetro -Filter para seleccionar solo ciertos controladores o, de nuevo, combinarlo con Select para mostrar campos específicos (nombre, sitio, rol, etc.).
Gestión de usuarios en Active Directory con PowerShell
Uno de los usos más habituales de PowerShell con AD DS es la gestión de cuentas de usuario: consultas, altas y bajas, cambios de contraseña, desbloqueos y modificaciones de atributos.
Consultar usuarios y sus propiedades
El cmdlet básico para obtener información de usuarios es Get-ADUser. Puedes usarlo indicando directamente el nombre de la cuenta para ver sus datos principales.
Si necesitas información más detallada, el parámetro -Properties te deja indicar qué campos quieres ver. Por ejemplo, puedes mostrar todas las propiedades con * o solo algunas como CN, UserPrincipalName, whenCreated o whenChanged, según convenga.
También resulta muy útil lanzar una consulta general como Get-ADUser -Filter * y combinarla con .Count para saber cuántos usuarios hay dados de alta en el dominio. Esto sirve como pequeña auditoría rápida para detectar altas inesperadas o verificar volúmenes.
Alta y baja de usuarios individuales
Para crear usuarios nuevos en Active Directory, el cmdlet clave es New-ADUser. Antes de usarlo, es frecuente preparar la contraseña con ConvertTo-SecureString, ya que por defecto no se admite pasar una contraseña en texto plano sin esta conversión.
Una vez tengas la contraseña segura en una variable, puedes crear el usuario con lo mínimo (nombre y contraseña) o añadir parámetros como Description, habilitar la cuenta desde el primer momento o definir otros atributos.
En cuanto a la eliminación, en entornos locales es habitual ver comandos como Remove-LocalUser para borrar cuentas del sistema local. Para usuarios de dominio, se usarían cmdlets equivalentes, removiendo la cuenta directamente del AD. Además, puedes filtrar usuarios por patrones de nombre utilizando -Filter con expresiones del tipo Name -like «cadena*» y combinándolo con Select para listar solo el campo Name.
Altas y bajas masivas de usuarios mediante CSV
Uno de los puntos fuertes de PowerShell es la automatización masiva de operaciones. Para crear o eliminar muchos usuarios a la vez, lo habitual es usar ficheros CSV y scripts que los recorren línea a línea.
En el caso de la creación masiva a nivel local, puedes tener un archivo CSV con columnas user y password y varias filas con los pares usuario/contraseña. Importas el fichero con Import-Csv a una variable (por ejemplo, $listadeusuarios) y luego recorres esa lista con un bucle foreach.
Dentro del bucle, conviertes la contraseña a SecureString y llamas a cmdlets como New-LocalUser o New-ADUser según trabajes en el equipo local o en el dominio. Así, por cada fila del CSV, se crea un usuario usando los datos de esa línea. Si además trabajas con archivos locales, puedes automatiza tareas con archivos para preparar o validar esos CSV antes de importarlos.
Para la eliminación masiva, el proceso es casi idéntico, pero el CSV suele contener solo el nombre de usuario. Tras importarlo, un foreach recorre la lista y llama a Remove-LocalUser o comandos equivalentes de AD para cada cuenta registrada.
Cambiar contraseñas y desbloquear cuentas
El cmdlet Set-ADAccountPassword permite modificar o resetear contraseñas. Si conoces la contraseña actual, basta con ejecutar el comando y seguir el flujo que solicita la actual y la nueva.
Si no conoces la contraseña anterior, puedes usar el modificador -Reset para establecer una nueva directamente sin necesitar la vieja. Este enfoque es muy típico en soporte técnico cuando un usuario ha olvidado su contraseña y no puede acceder.
Para desbloquear cuentas bloqueadas, el cmdlet adecuado es Unlock-ADAccount. Añadiendo el parámetro -Verbose obtendrás mensajes detallados de lo que está sucediendo. Además, si quieres hacer una prueba sin ejecutar realmente la acción, el parámetro -WhatIf simula la operación indicándote qué pasaría.
Modificar otros atributos de usuario
Cuando necesitas cambiar datos como descripción, departamento, ciudad u otros campos del usuario, el cmdlet que entra en juego es Set-ADUser. Con él puedes indicar el usuario objetivo y la propiedad a modificar.
Por ejemplo, si quieres añadir una descripción, conviene recordar que los textos con espacios deben ir entre comillas, para evitar problemas de interpretación. A partir de ahí, puedes ir encadenando comandos o scripts que ajusten varios atributos de una sola vez.
Gestión de grupos en Active Directory con PowerShell
Además de usuarios, PowerShell también permite manejar grupos y membresías de forma muy cómoda, algo fundamental en cualquier entorno de directorio.
Consultar grupos y sus miembros
Para ver los datos de un grupo concreto, el cmdlet a utilizar es Get-ADGroup, pasándole el nombre del grupo. Obtener información sobre el grupo te ayuda a revisar su configuración, ámbito, tipo y otros detalles.
Si quieres ver qué usuarios pertenecen a un grupo, el comando adecuado es Get-ADGroupMember. Su salida incluye información básica de cada objeto miembro, como el nombre, el tipo de objeto o su SID, lo que simplifica la revisión de permisos y accesos.
Añadir usuarios a grupos
Para incluir nuevos usuarios en un grupo existente, se usa el cmdlet Add-ADGroupMember. Normalmente, se le pasa el nombre del grupo y luego el identificador del usuario, que en este contexto suele ser el SamAccountName.
Este enfoque es perfecto para automatizar altas de personal: además de crear la cuenta, un script puede añadirla automáticamente a los grupos adecuados (departamento, permisos de aplicaciones, acceso a recursos, etc.), evitando errores manuales.
Automatizar migraciones de usuarios entre unidades organizativas
Otra tarea muy común es la migración masiva de usuarios entre OUs dentro de Active Directory, por ejemplo cuando se reestructura la organización, se cambian departamentos o se reorganiza el árbol de AD.
Una forma eficaz de hacerlo es partir de un archivo de Excel convertido a CSV, con columnas que indiquen el usuario, la ubicación actual y la nueva OU de destino. Ese CSV se importa en PowerShell y se recorre con un bucle, construyendo la ruta LDAP del objeto de usuario y la ruta de destino.
El cmdlet clave aquí es Move-ADObject, al que se le pasa el identificador del objeto (la ruta LDAP construida, por ejemplo con CN=Usuario,OU=Origen,DC=…) y el TargetPath que indica la OU de destino. Cada iteración del bucle mueve un usuario de su ubicación antigua a la nueva.
Este mismo planteamiento se puede adaptar para ajustar atributos masivamente, cambiar descripciones, modificar ciudades, actualizar correos electrónicos, etc. El truco está en que PowerShell lee cada fila del CSV como un objeto con propiedades, que luego puedes usar en tus scripts.
Crear ficheros CSV para altas masivas con New-ADUser
Para dar de alta muchos usuarios en un dominio, lo más limpio es preparar un archivo CSV bien estructurado que contenga en la primera fila los nombres de las propiedades, y a partir de ahí, una fila por usuario con sus valores.
La hoja de cálculo (LibreOffice Calc, Excel, etc.) te permite definir columnas como GivenName, Surname, SamAccountName, UserPrincipalName, etc., que deben coincidir exactamente con los argumentos del cmdlet New-ADUser pero sin el guión.
Una vez hayas rellenado todos los usuarios, exportas la hoja a formato CSV, eligiendo el delimitador de campos (normalmente coma) y dejando las opciones por defecto salvo que necesites ajustes específicos. Después, es recomendable abrir el fichero con el Bloc de notas para verificar que el contenido está correcto: encabezados en la primera línea y valores separados por comas en las siguientes.
Importar usuarios desde CSV en Windows Server con PowerShell
Cuando el CSV ya está listo, lo llevas al servidor (copiándolo a Documentos, por ejemplo) y, desde una sesión de PowerShell con el módulo de Active Directory cargado, comienzas la importación.
El primer paso es ejecutar Import-Csv sobre el archivo para comprobar que PowerShell reconoce bien las columnas. Verás que cada línea se convierte en un objeto donde cada propiedad se corresponde con una columna del CSV.
Si la salida es la esperada, ya puedes encadenar el comando con New-ADUser usando la tubería, de forma que cada objeto importado se use como entrada para el cmdlet de creación de cuentas. Así, en una sola línea, puedes dar de alta todos los usuarios del fichero.
Aprovechando que muchas propiedades serán comunes, es buena idea añadir parámetros a New-ADUser en esa misma línea, como -Enabled $True para crear las cuentas activas desde el principio, o -AccountPassword combinado con ConvertTo-SecureString para asignar una contraseña por defecto.
También puedes especificar el contenedor o unidad organizativa de destino mediante el parámetro -Path, indicando una ruta LDAP como CN=Users,DC=dominio,DC=local u otra OU. Tras ejecutar el comando, puedes validar el resultado usando Get-ADUser -Filter * o filtrando por los usuarios recién creados.
Al combinar todo lo anterior, se ve claramente que PowerShell no es solo una consola “para admins”, sino una plataforma de automatización capaz de gestionar desde pequeños scripts domésticos hasta la operación completa de un bosque de Active Directory, licencias de Microsoft 365, entornos de Power Apps y recursos de Azure; tanto si hoy no administras nada como si mañana te toca llevar un dominio entero, dominar estos cmdlets y la lógica con CSV, tuberías y objetos te da un margen de maniobra enorme para ahorrar tiempo, reducir errores y tener un control fino sobre todo tu entorno Microsoft. Comparte el tutorial y más usuarios conocerán los pasos para gestionar esta automatización de PowerShell.
