Si es nuevo en el lenguaje de scripts de PowerShell y desea aprender a ejecutar un script de PowerShell, ha llegado a la publicación de blog correcta. Este blog será un tutorial que cubre formas comunes de ejecutar scripts y algunos problemas que pueden aparecer.
Tabla de Contenidos
Requisitos previos
Este artículo será un tutorial sobre cómo ejecutar PowerShell en su equipo local. Si quieres seguir, asegúrate de tener los siguientes requisitos previos antes de comenzar este artículo.
- Un equipo con Windows 10 con privilegios de administrador.
- Windows PowerShell versión 5 o superior. También puede usar PowerShell v7. Este tutorial se centrará en Windows PowerShell, ya que el sistema operativo Windows ya lo tiene.
- Cualquier editor de archivos de texto
Tratar con la Directiva de ejecución
Si es la primera vez que intenta ejecutar un script de Windows PowerShell, es posible que se encuentre con un problema común. Es probable que PowerShell devuelva un mensaje de error que indica que un script»no se puede cargar porque los scripts en ejecución están deshabilitados en este sistema».
PS> .\GetServices.ps1 File C:\Temp\GetServices.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170. At line:1 char:1 .\GetServices.ps1 ~~~~~ CategoryInfo : SecurityError: (:) , PSSecurityException FullyQualifiedErrorId : UnauthorizedAccess
PowerShell devuelve el mensaje de error anterior cuando intenta ejecutar un PowerShell con una directiva de ejecución establecida en Restringido, Firmado a distancia o Todo firmado.
Restringido
Restringido es la directiva predeterminada establecida para los equipos cliente Windows. Si usa PowerShell por primera vez, es probable que la directiva predeterminada esté configurada para restringir todos los scripts.
Aún puede ejecutar comandos individuales en una terminal, pero no en un archivo de script. La restricción incluye cualquier archivo que termine en .ps1xml
, .psm1
o .ps1
.
Sin restricciones
Sin restricciones le permite ejecutar cualquier script, sin embargo, le avisa antes de la ejecución si el script se descarga de Internet. Esta directiva suele ser la predeterminada para cualquier dispositivo que no sea Windows.
Firmado Remoto
Firmado Remoto de política le permite ejecutar cualquier script que es (un) firmado digitalmente o (b) cualquier script escrito en su equipo local con o sin firma.
Si un script se descarga de Internet y no está firmado, deberá desbloquear el archivo. Puede hacerlo haciendo clic con el botón derecho en el archivo y seleccionando Propiedades. O bien, puede usar el cmdlet Unblock-File
de PowerShell para ese archivo de script en particular.
Usar una directiva firmada a distancia sería una opción ideal cuando se ejecuta un script descargado de Internet.
Todo firmado
Todo firmado requiere que todos los scripts estén firmados digitalmente por un editor de confianza. Esto incluye los scripts descargados de Internet y escritos localmente en su computadora.
Cambio de la Directiva de ejecución de PowerShell
Para cambiar la directiva de ejecución:
- Abra Windows PowerShell con Ejecutar como administrador para asegurarse de que tiene el permiso más alto para realizar los cambios de directiva.
2. Cuando esté abierto, ejecute el siguiente comando de PowerShell para establecer la directiva de ejecución del equipo. La política de ejecución, como se describe anteriormente, puede ser de tres tipos diferentes. Este tutorial utiliza una política de ejecución útil pero segura de RemoteSigned.
Dado que este tutorial asume que ha descargado de Internet el archivo de script GetServices.ps1, establezca la directiva de ejecución en RemoteSigned.
PS> Set-ExecutionPolicy RemoteSigned
La directiva de ejecución RemoteSigned obliga a firmar criptográficamente cada script de PowerShell descargado de Internet antes de que PowerShell lo ejecute en el sistema.
3. Debería ver una salida que solicita confirmar la acción. Ingrese Y y presione enter para confirmar el cambio de política.
Execution Policy Change The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy? Yes Yes to All No No to All Suspend Help (default is "N"):
En este punto, siga los siguientes pasos para explorar diferentes métodos para ejecutar el script de PowerShell en su equipo.
Cómo ejecutar un script de PowerShell
Para demostrar la ejecución de un script de PowerShell, en realidad necesita un archivo de script para ejecutarlo. Si no tiene uno a mano, descargue este archivo ZIP y extraiga el archivo PS1 que contiene. Encontrarás un archivo de script simple dentro llamado GetServices. ps1.
Write-Output "Listing Computer Services"Get-Service
Cada script de PowerShell debe terminar con una extensión
.ps1
.
Usando la consola
Una vez que tenga un script listo, hay varias formas diferentes de ejecutar un archivo de script de PowerShell. Una de las formas más comunes es a través de la consola de PowerShell.
Para hacerlo:
- Abra la consola de PowerShell como se muestra arriba.
2. Vaya a la ubicación del sistema de archivos en la que se encuentra el script con el cmdlet Set-Location
de PowerShell o el alias cd
. El script de este tutorial se encuentra en el C:\Temp directorio.
PS> cd C:\Temp\
3. Ejecute el script utilizando una notación de punto (.
). PowerShell es un shell que también busca nombres de comandos. Para diferenciar entre un comando de PowerShell y un script, debe comenzar el script con un punto. Este punto representa el directorio actual.
PS> .\GetServices.ps1
Cómo ejecutar un script de PowerShell desde la Línea de comandos a través de la ubicación de PowerShell
Si no puede o prefiere no ejecutar scripts a través de la consola de PowerShell, también puede hacerlo con la línea de comandos (símbolo del sistema).
Para ejecutar scripts a través del símbolo del sistema, primero debe iniciar el ejecutable de PowerShell (powershell).exe), con la ubicación de PowerShell C:\Program Files\WindowsPowerShell\powershell.exe
y, a continuación, le pasa la ruta de acceso del script como parámetro.
Puede ejecutar scripts con parámetros en cualquier contexto simplemente especificándolos mientras ejecuta el ejecutable de PowerShell como
powershell.exe -Parameter 'Foo' -Parameter2 'Bar'
.
Una vez que abra cmd.exe, puede ejecutar un script de PowerShell como el que se muestra a continuación. En este ejemplo se ejecuta el motor y se le pasa la ruta del script de C:\Temp\GetServices.ps1.
Observe a continuación que el ejemplo siguiente utiliza la ruta de ubicación de PowerShell para ejecutar el script. Tendrás que hacer esto si la carpeta no está en tu CAMINO en algún lugar.
CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"
La ubicación de PowerShell para PowerShell 7 utiliza un ejecutable diferente llamado pwsh.exe se encuentra típicamente en C:\Program Archivos \ PowerShell \ 7 \ pwsh.exe.
A continuación se muestra un práctico video de YouTube que cubre la ejecución de un script a través de un archivo por lotes que el cmd.exe se ejecuta.
Uso del ISE de PowerShell
Si crea sus propios scripts o edita los de otros, es probable que utilice un editor de scripts como el ISE de PowerShell o, tal vez, el código de Visual Studio (VS). Dado que el ISE viene con Windows, centrémonos en ese método para este tutorial.
Para invocar un script a través de ISE:
- Vaya al Menú Inicio, busque ISE de PowerShell y ábralo.
2. Haga clic en Archivo → Abrir y encuentre su script.
3. Con el script abierto, haga clic en el botón verde ejecutar para ejecutar el script. Este botón invocará el script en el terminal PowerShell integrado en la parte inferior.
La salida del script de ejemplo
Un script de PowerShell a veces puede devolver la salida. Esto sucede cuando el script que está ejecutando se crea para devolver objetos, que es un componente fundamental de PowerShell.
Si ejecuta el script de ejemplo GetServices.ps1, verá lo siguiente. Este script ejecuta el cmdlet Get-Service
que devuelve todos los servicios instalados en el equipo Windows local.
PS> .\GetScripts.ps1Listing Computer ServicesStatus Name DisplayName------ ---- -----------Running aakore Acronis Agent Core ServiceStopped AarSvc_1b668d Agent Activation Runtime_1b668dRunning AcronisActivePr... Acronis Active Protection ServiceRunning AcronisCyberPro... Acronis Cyber Protection ServiceRunning AcrSch2Svc Acronis Scheduler2 ServiceRunning AdobeARMservice Adobe Acrobat Update ServiceRunning AdobeUpdateService AdobeUpdateServiceRunning AGMService Adobe Genuine Monitor ServiceRunning AGSService Adobe Genuine Software Integrity Se...----Truncated----
Ejecutar un Script de PowerShell desde un Script
Supongamos que tiene dos scripts y desea que uno llame al otro. Quizás tengas un script llamado getUser. ps1 y otro llamado ResetPassword. ps1. Dentro del script getUser.ps1, te gustaría ejecutar el ResetPassword.ps1 para restablecer una contraseña de usuario.
Dentro del script de llamada (getUser.ps1), agregaría una línea para ejecutar el otro script al igual que llamaría al script desde la línea de comandos.
Puede ver a continuación que tiene un par de opciones. Por lo general, debe elegir ejecutar el otro script dentro de la misma sesión o ámbito para simplificar las cosas, a menos que tenga una razón específica para ejecutar el script en otra sesión de PowerShell.
## To run the other script in a new sessionpowershell.exe .\ResetPassword.ps1## To run the other script in the same session.\ResetPassword.ps1