Cómo ejecutar un script de PowerShell desde un archivo por lotes

Resuelto Eka asked hace 10 años • 9 respuestas

Estoy intentando ejecutar este script en PowerShell. He guardado el siguiente script como ps.ps1en mi escritorio.

$query = "SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2"
Register-WMIEvent -Query $query -Action { invoke-item "C:\Program Files\abc.exe"}

He creado un script por lotes para ejecutar este script de PowerShell.

@echo off
Powershell.exe set-executionpolicy remotesigned -File  C:\Users\SE\Desktop\ps.ps1
pause

Pero recibo este error:

Ingrese la descripción de la imagen aquí

Eka avatar Oct 12 '13 20:10 Eka
Aceptado

Necesitas el -ExecutionPolicyparámetro:

Powershell.exe -executionpolicy remotesigned -File  C:\Users\SE\Desktop\ps.ps1

De lo contrario, PowerShell considera los argumentos como una línea para ejecutar y, si bien Set-ExecutionPolicy es un cmdlet, no tiene ningún -Fileparámetro.

Joey avatar Oct 12 '2013 15:10 Joey

Explico por qué querrías llamar a un script de PowerShell desde un archivo por lotes y cómo hacerlo en la publicación de mi blog aquí .

Esto es básicamente lo que estás buscando:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'C:\Users\SE\Desktop\ps.ps1'"

Y si necesita ejecutar su script de PowerShell como administrador, use esto:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""C:\Users\SE\Desktop\ps.ps1""' -Verb RunAs}"

Sin embargo, en lugar de codificar toda la ruta al script de PowerShell, recomiendo colocar el archivo por lotes y el archivo del script de PowerShell en el mismo directorio, como lo describe mi publicación de blog.

deadlydog avatar Nov 18 '2013 22:11 deadlydog

Si desea ejecutar desde el directorio actual sin una ruta completa, puede usar:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& './ps.ps1'"
e.gad avatar May 02 '2016 19:05 e.gad

Si ejecuta un archivo por lotes llamando a PowerShell como administrador, será mejor que lo ejecute así, ahorrándole todos los problemas:

powershell.exe -ExecutionPolicy Bypass -Command "Path\xxx.ps1"

Es mejor usar Bypass...

Root Loop avatar Mar 29 '2014 19:03 Root Loop