Cómo ejecutar un script de PowerShell
Jan 10, 2025
Los scripts de PowerShell automatizan tareas administrativas en Windows, Linux y macOS, pero la ejecución está restringida por defecto por seguridad. Los usuarios deben ajustar las políticas de ejecución, iniciar PowerShell o CMD y especificar rutas de scripts completas o relativas. Los scripts pueden incluir parámetros, ejecutarse con privilegios elevados o ejecutarse de manera remota con Invoke-Command. Las mejores prácticas incluyen firmar scripts, usar el principio de mínimo privilegio, validar entradas y manejar errores con Try-Catch para una automatización segura.
PowerShell es un lenguaje de scripts y una interfaz de línea de comandos diseñada para la automatización de tareas y la gestión de configuraciones, utilizada principalmente por administradores de sistemas y usuarios avanzados. Construido sobre el marco de .NET (.Net Core para PowerShell 7), es compatible con Windows, Linux y macOS. Permite la automatización de tareas administrativas como la gestión de cuentas de usuario, la configuración de redes y la realización de copias de seguridad, reduciendo así el error humano.
Aunque PowerShell simplifica la administración, puede presentar desafíos, especialmente para los principiantes. Los problemas comunes incluyen errores de sintaxis, rutas mal configuradas, problemas de dependencia y mensajes de error confusos. Además, para mejorar la seguridad, la ejecución de scripts está restringida por defecto, lo que requiere que los usuarios ajusten las políticas de ejecución para poder ejecutar scripts. Para maximizar el potencial de PowerShell manteniendo la seguridad, los usuarios deben combinar un manejo cuidadoso de los scripts con habilidades para la resolución de problemas.
Contenido relacionado seleccionado:
¿Por qué usar scripts de PowerShell?
Los scripts de PowerShell son una herramienta vital para los administradores de sistemas y desarrolladores tanto en entornos Windows como multiplataforma. Automatizar procesos como la gestión de cuentas, la monitorización de redes y la implementación de software ahorra tiempo considerable, liberando a los profesionales de TI para concentrarse en iniciativas estratégicas, optimización de flujos de trabajo y resolución de problemas, impulsando una mayor eficiencia e innovación. Incluso pueden programar scripts para su ejecución automática. PowerShell Remoting amplifica el valor de PowerShell al habilitar la gestión remota segura de múltiples sistemas desde una interfaz central, reduciendo la necesidad de acceso físico y mejorando los tiempos de respuesta a incidentes.
El uso de scripts de PowerShell también garantiza la ejecución consistente y precisa de operaciones complejas. Eliminar el error humano es esencial para mantener configuraciones uniformes como se requiere para el cumplimiento y la seguridad. Esta fiabilidad es invaluable en entornos de gran escala donde incluso las inconsistencias menores pueden llevar a vulnerabilidades o fallos operativos.
Entendiendo las Políticas de Ejecución de PowerShell
PowerShell utiliza execution policies para controlar si los scripts de PowerShell pueden ejecutarse en un sistema y, de ser así, bajo qué condiciones.
Configuración de la Política de Ejecución
Las políticas de ejecución pueden tener las siguientes configuraciones:
- Restringido: No se pueden ejecutar scripts; solo se pueden ejecutar comandos individuales en el símbolo del sistema de PowerShell. Intentar ejecutar un script conduce al mensaje de error: “La ejecución de scripts está deshabilitada en este sistema.” Esta es la configuración predeterminada para la mayoría de los sistemas.
- AllSigned: Solo se pueden ejecutar scripts que estén firmados por un editor de confianza. Esta configuración proporciona un alto grado de seguridad ya que garantiza que solo se ejecuten scripts verificados.
- RemoteSigned: Los scripts creados localmente pueden ejecutarse sin firma, pero los scripts descargados de internet deben estar firmados por un editor de confianza. Esta política es comúnmente recomendada para uso rutinario.
- Sin restricciones: Todos los scripts se pueden ejecutar, independientemente de su origen o si están firmados. Sin embargo, los usuarios recibirán una advertencia cuando ejecuten scripts descargados para alertarlos sobre los riesgos.
Cómo cambiar una política de ejecución usando Set-ExecutionPolicy
Para modificar una política de ejecución, utilice el cmdlet Set-ExecutionPolicy. El parámetro -Scope define el ámbito: CurrentUser se aplica solo al usuario actualmente conectado, mientras que LocalMachine se aplica a todos los usuarios del sistema (usar este valor requiere derechos de administrador).
Aquí hay un ejemplo:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Confirme el cambio escribiendo Y (Sí) cuando se le solicite.
Verificando la política de ejecución utilizando Get-ExecutionPolicy
Puede verificar la política de ejecución actual con el siguiente comando:
Get-ExecutionPolicy -List
Aquí hay un ejemplo de salida:
Guía paso a paso para ejecutar scripts de PowerShell
Para ejecutar un script de PowerShell desde PowerShell, sigue estos pasos:
Paso 1: Iniciar PowerShell
Antes de ejecutar un script, necesitas abrir PowerShell. Aquí tienes dos opciones:
- Haga clic en el menú Inicio, escriba PowerShell y seleccione Windows PowerShell.
- Inicie el símbolo del sistema escribiendo cmd en el menú de inicio. Escriba powershell para abrir una sesión de PowerShell.
Paso 2: Navegue hasta la ubicación del script
A continuación, navegue al directorio donde se almacena el archivo .ps1 ejecutando el comando cd:
cd C:\Users\AbbeyCrawford\Scripts
Paso 3: Ejecute el Script
El comando para ejecutar un script de PowerShell depende de si te encuentras en el directorio donde está ubicado tu script:
- Si te encuentras en el directorio donde está ubicado tu script, aquí te mostramos cómo ejecutar un script en PowerShell:
.\HelloWorld.ps1
- Si no se encuentra en el directorio del script, para ejecutar un script de PowerShell, debe proporcionar su ruta completa:
C:\Users\JohnDoe\Scripts\HelloWorld.ps1
- Si el script está en una subcarpeta del directorio actual, use el prefijo .\ para proporcionar la ruta relativa:
.\SubFolder\HelloWorld.ps1
- Un punto (.) antes de la ruta indica que desea ejecutar el script en la sesión actual para permitir que sus variables o funciones permanezcan disponibles después de la ejecución. (La explicación del dot sourcing se detalla más adelante en este documento.) Note el espacio entre los dos puntos.
. .\HellowWorld.ps1
. C:\Scripts\MyScripts\HelloWorld.ps1
Ejecución de scripts con parámetros
Muchos scripts de PowerShell aceptan parámetros para hacerlos más flexibles. Puedes pasar argumentos al ejecutar el script.
Por ejemplo, supongamos que tienes el siguiente script que acepta dos parámetros, Name y Age:
param(
[string]$Name,
[int]$Age
)
Write-Host "Hello, $Name! You are $Age years old."
When running the script, you can pass arguments to it as follows:
.\Get-UserInfo.ps1 -Name "John" -Age 30
Cómo ejecutar un script de PowerShell desde CMD
Para ejecutar un script de PowerShell desde el símbolo del sistema, siga los siguientes pasos:
- Abra el símbolo del sistema escribiendo cmd en la barra de búsqueda y presionando Enter.
- Utilice el siguiente comando para ejecutar su script de PowerShell. La opción -File es obligatoria; especifica el archivo de script a ejecutar.
powershell -File C:\Scripts\Get-UserInfo.ps1
Usando la opción -NoExit Option
En algunos casos, es posible que desees que la ventana de PowerShell permanezca abierta después de que tu script termine de ejecutarse. Esto puede ser particularmente útil para depurar o cuando el script está diseñado para mostrar resultados que quieres ver antes de que la ventana se cierre.
Para mantener la ventana de PowerShell abierta al ejecutar scripts desde el símbolo del sistema, utilice la opción -NoExit como se muestra a continuación:
powershell -NoExit -File C:\Scripts\Backup.ps1
Cómo ejecutar PowerShell como administrador
Muchas tareas administrativas requieren permisos elevados para ejecutarse con éxito. Ejemplos incluyen instalar software, modificar configuraciones de red y acceder a directorios del sistema. Intentar realizar estas tareas sin derechos administrativos puede resultar en errores, lo que podría bloquear tareas importantes de mantenimiento o configuración.
Para ejecutar PowerShell con privilegios administrativos, haga clic derecho en Windows PowerShell y elija Ejecutar como administrador.
Usando Start-Process para Ejecución Administrativa
En algunas situaciones, necesitas ejecutar otra instancia de PowerShell o un script desde dentro de una sesión de PowerShell. El cmdlet Start-Process es una herramienta perfecta. Agregar el parámetro -Verb RunAs instruye a PowerShell para lanzar una nueva instancia con derechos administrativos:
Start-Process PowerShell -Verb RunAs
Para ejecutar un script específico con privilegios elevados, añada el parámetro -ArgumentList y utilice -File para especificar la ruta del script. A continuación se presentan dos ejemplos:
Start-Process PowerShell -ArgumentList '-File "C:\Scripts\Update-Software.ps1"' -Verb RunAs
Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File “ C:\Scripts\Update-Software.ps1” -Verb RunAs
Errores comunes y cómo solucionarlos
Solucionar errores puede parecer desalentador al principio, pero resolverlos es un paso significativo, similar a ganar insignias de oro, plata y bronce por habilidades de depuración. A continuación se presentan algunos de los problemas más comunes y cómo resolverlos de manera efectiva.
Error “Running scripts is disabled”
Este error ocurre porque la política de ejecución predeterminada de PowerShell está configurada en Restricted, lo que impide la ejecución de cualquier script. Por ejemplo, la captura de pantalla a continuación muestra el error, “El archivo C:\Scripts\Get-UserInfo.ps1 no se puede cargar porque la ejecución de scripts está deshabilitada en este sistema”:
Para resolver este problema, modifique la política de ejecución para permitir la ejecución de scripts. Utilice Set-ExecutionPolicy para cambiar a una configuración menos restrictiva, como RemoteSigned.
Errores de sintaxis
Los errores de sintaxis suelen surgir de una estructura de comando incorrecta, parámetros faltantes o errores tipográficos. Aquí hay un ejemplo:
Para corregir errores de sintaxis, lea cuidadosamente los mensajes de error mostrados y verifique el número de línea indicado para identificar dónde ocurrió el error. Para prevenir errores, siempre revise su script en busca de errores comunes y considere usar un editor de código que ofrezca resaltado de sintaxis o características de IntelliSense.
Errores de permisos
Los errores de permisos ocurren cuando el script intenta acceder a recursos que requieren privilegios elevados o cuando los permisos de archivos/carpetas son insuficientes. Por ejemplo, el error a continuación indica que se denegó el acceso a la ruta C:\Backup\Backup.txt:
Aquí hay dos maneras de solucionar el problema:
- Haga clic derecho en PowerShell, seleccione Ejecutar como administrador y ejecute su script de nuevo.
- Verifique los permisos del archivo o carpeta al que el script está accediendo y otorgue los permisos necesarios utilizando los cmdlets Get-Acl y Set-Acl.
Tutorial de Windows PowerShell Scripting (PDF) para Principiantes
Aprende másEjecución de scripts de PowerShell en diferentes entornos
El proceso para ejecutar scripts de PowerShell varía dependiendo de si los estás ejecutando:
- En el PowerShell Integrated Scripting Environment (ISE)
- A través del Explorador de archivos
- Usando comandos de forma remota como Invoke-Command
Ejecución de scripts en el PowerShell ISE
El PowerShell ISE es un entorno de desarrollo amigable diseñado para escribir, probar y depurar scripts de PowerShell. Proporciona una interfaz de múltiples paneles con características como resaltado de sintaxis y herramientas de depuración integradas. Para ejecutar scripts en el PowerShell ISE, sigue estos pasos:
- Abra el PowerShell ISE. Para localizarlo, puede buscar PowerShell ISE en el menú de inicio, o escribir powershell_ise en el cuadro de diálogo Run (Windows + R). Aquí está la interfaz resultante:
- Utilice el panel de scripts (ventana superior) para escribir o cargar scripts. Para crear un nuevo archivo .ps1, presione FileèNew. Para guardar su script, haga clic en File > Save As.
- Para ejecutar su script completo, haga clic en el botón Run Script (triángulo verde) o presione F5. Para ejecutar líneas seleccionadas, resáltelas y presione F8.
Ejecutando scripts desde el Explorador de archivos
Otro método conveniente para ejecutar scripts de PowerShell es directamente desde el Explorador de archivos. Este enfoque es beneficioso cuando quieres ejecutar un script sin necesidad de abrir una ventana de terminal o para un acceso rápido.
- Navegue hasta la carpeta que contiene su script de PowerShell.
- Haga clic derecho en el archivo de script .ps1. En el menú contextual, seleccione Ejecutar con PowerShell. Esto iniciará el script en una nueva ventana de PowerShell y lo ejecutará inmediatamente.
Ejecución de scripts de forma remota
PowerShell también ofrece la capacidad de ejecutar scripts en máquinas remotas sin la necesidad de acceso físico. Esto es especialmente útil en entornos empresariales donde las tareas necesitan ejecutarse en múltiples servidores.
Prerrequisito: Habilitar la Ejecución Remota
Antes de poder ejecutar un script de forma remota, debe habilitar PowerShell Remoting en el sistema objetivo. Ejecute el siguiente comando:
Enable-PSRemoting -Force
Sintaxis básica para Invoke-Command
Invoke-Command permite ejecutar cmdlets o scripts en computadoras remotas. Por ejemplo, para ejecutar UpdateSystem.ps1 en una computadora remota llamada Server01, utilice el siguiente cmdlet:
Invoke-Command -ComputerName Server01 -FilePath C:\Scripts\UpdateSystem.ps1
Proporcionando un bloque de Script Block para ejecutar
Para ejecutar un bloque de script directamente, utiliza esta sintaxis:
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Process }
Ejecutando comandos en múltiples computadoras
Para ejecutar scripts en múltiples computadoras, puede especificar los nombres de las computadoras usando una variable, como se muestra a continuación:
$computers = "PC1", "PC2", "PC3"
Invoke-Command -ComputerName $computers -ScriptBlock { Your PowerShell Commands }
Alternativamente, puede pasar los nombres de los ordenadores en una lista separada por comas:
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock { Restart-Service -Name Spooler }
Automatización de scripts de PowerShell con Task Scheduler
Windows Task Scheduler, una herramienta integrada en el sistema operativo Windows, permite a los usuarios programar tareas para ejecutarse en una fecha y hora específicas, según un horario definido o cuando se desencadenen ciertos eventos.
Para conocer los beneficios de programar scripts de PowerShell y obtener instrucciones detalladas, ejemplos, mejores prácticas y consejos de solución de problemas, por favor consulte este artículo: How to Automate PowerShell Scripts with Task Scheduler.
Técnicas avanzadas
PowerShell ofrece técnicas avanzadas para mejorar la reusabilidad de los scripts, la modularidad y el compartir variables y funciones a través de los scripts. Dos conceptos clave son el dot sourcing y los módulos de script.
Dot Sourcing
Normalmente, cada script se ejecuta en una nueva sesión, y cualquier variable o función declarada dentro de él se pierde cuando el script termina. Con la dot sourcing, un script se ejecuta en el ámbito actual de manera que cualquier variable, función o alias definido en ese script esté disponible en la sesión que lo llamó. Esto es particularmente útil cuando quieres compartir funciones o variables comunes entre scripts o dentro de la misma sesión.
La sintaxis es la siguiente:
. .\ScriptName.ps1
El primer punto seguido de un espacio (. ) indica a PowerShell que estás utilizando el script con dot sourcing.
La segunda parte (.\ScriptName.ps1) es la ruta relativa a tu script.
Usando módulos de script
Un módulo en PowerShell es un paquete que contiene funciones de PowerShell, cmdlets, variables y más. Los módulos están diseñados para ser importados y utilizados en múltiples scripts. En comparación con el dot sourcing, los módulos ofrecen una mejor encapsulación y versionado, lo que facilita organizar, mantener y compartir scripts reutilizables.
Para crear un módulo de script, simplemente guarde su script con una extensión de archivo .psm1 en lugar de .ps1.
Una vez que hayas creado un módulo, puedes hacer que sus funciones estén disponibles en tu sesión de PowerShell utilizando el Import-Module de la siguiente manera:
Import-Module C:\Scripts\Modules\Geometry.psm1
Mejores prácticas para ejecutar scripts de PowerShell
Las siguientes mejores prácticas son esenciales para mantener la seguridad al ejecutar scripts de PowerShell, así como para mejorar la usabilidad y precisión de los scripts.
Mejores prácticas de seguridad
Utilice configuraciones de política de ejecución fuertes
Utilice las políticas de ejecución de PowerShell para permitir solo scripts de fuentes confiables y verificadas. Establezca la política de ejecución en un nivel apropiado para su entorno. Para la mayoría de las organizaciones, RemoteSigned ofrece un buen equilibrio, permitiendo la ejecución de scripts creados localmente mientras que requiere que los scripts descargados estén firmados por un editor de confianza.
Firme digitalmente sus scripts
PowerShell verifica la firma digital de un script antes de ejecutarlo. Firmar digitalmente tus scripts con un certificado de confianza ayuda a proteger contra manipulaciones.
Ejecutar scripts con los menores privilegios requeridos
Siempre que sea posible, ejecute scripts con el menor privilegio para limitar el daño potencial en caso de vulnerabilidades de seguridad o errores.
Mejores prácticas de documentación
Los scripts bien documentados son más fáciles de mantener, depurar y entender tanto para los usuarios actuales como para los futuros.
Utilice Comentarios
Los comentarios son importantes para explicar el propósito del script, los parámetros y la lógica. En PowerShell, los comentarios se prefijan con el símbolo #.
Para explicaciones rápidas, utilice comentarios en línea:
$backupDirectory = "D:\Backup" # Set the backup directory
Para proporcionar explicaciones más detalladas o para deshabilitar temporalmente partes de su código, utilice comentarios de bloque (<# … #>):
<#
Este script realiza una copia de seguridad de los datos críticos.
Comprueba el espacio disponible y verifica la integridad de la copia de seguridad.
#>
Consulte la Ayuda
Para asegurarte de que estás utilizando las funciones de PowerShell correctamente, utiliza Get-Help para revisar la sintaxis y el uso de cmdlets. Por ejemplo, para obtener ayuda sobre Get-Process, ejecuta el siguiente comando:
Get-Help Get-Process
Mejores prácticas para el manejo de errores
El manejo adecuado de errores es esencial para evitar que los scripts de PowerShell fallen inesperadamente y dejen tareas incompletas o sistemas en un estado inestable.
Validar entrada
Para evitar errores inesperados, asegúrese de que sus scripts validen la entrada. Esto es especialmente importante para datos relacionados con el usuario como nombres o avatares de usuario.
Implemente Try-Catch Blocks
El bloque try-catch es el método principal para manejar errores en PowerShell. Esto te permite capturar y manejar excepciones de manera elegante. Aquí hay un ejemplo:
try {
# Attempt to run a command
Copy-Item -Path $source -Destination $destination -Recurse
} catch {
# Handle the error
Write-Host "An error occurred: $_"
# Additional error recovery actions can be performed here
}
Utilice Finally Blocks
Agregue un bloque final cuando sea necesario. Este bloque se ejecutará independientemente de si ocurrió un error en el bloque try, permitiéndole limpiar recursos o ejecutar el código de finalización. A continuación, se muestra un ejemplo:
try {
# Code that may throw an exception
Remove-Item -Path $filePath -ErrorAction Stop
} catch {
Write-Host "Failed to remove the file: $_"
} finally {
Write-Host "Cleanup actions have been performed."
}
Conclusión
PowerShell es una herramienta increíblemente poderosa para automatizar tareas de administración de sistemas para asegurar la precisión y mejorar la eficiencia. Al comprender conceptos fundamentales como políticas de ejecución, dot sourcing y módulos de scripts, así como seguir las mejores prácticas para la seguridad y el manejo de errores, puedes aprovechar al máximo PowerShell para escribir scripts robustos, reutilizables y seguros que mejoren tus operaciones diarias.
Le animamos a comenzar a experimentar con PowerShell escribiendo y ejecutando sus propios scripts. Comience con tareas de automatización simples y profundice gradualmente en técnicas de scripting avanzadas. Cuanto más practique, más competente se volverá en la automatización de flujos de trabajo complejos, la gestión de sistemas remotos y el manejo de operaciones de TI a mayor escala.
Netwrix Directory Manager
Preguntas frecuentes
Compartir en
Aprende más
Acerca del autor
Tyler Reese
VP de Gestión de Producto, CISSP
Con más de dos décadas en la industria de la seguridad de software, Tyler Reese conoce íntimamente los desafíos de identidad y seguridad que evolucionan rápidamente a los que se enfrentan las empresas hoy en día. Actualmente, se desempeña como director de producto para el portafolio de Netwrix Identity and Access Management, donde sus responsabilidades incluyen evaluar tendencias del mercado, establecer la dirección de la línea de productos IAM y, finalmente, satisfacer las necesidades de los usuarios finales. Su experiencia profesional abarca desde la consultoría de IAM para empresas Fortune 500 hasta trabajar como arquitecto empresarial de una gran compañía de venta directa al consumidor. Actualmente posee la certificación CISSP.
Aprende más sobre este tema
Powershell Delete File If Exists
PowerShell Write to File: "Out-File" y técnicas de salida de archivo
Cómo crear nuevos usuarios de Active Directory con PowerShell
¿Qué es PowerShell? Una guía completa de sus características y usos
Dominar PowerShell Sleep para la gestión de scripts