Cómo ejecutar un script de PowerShell desde un archivo por lotes
Estoy intentando ejecutar este script en PowerShell. He guardado el siguiente script como ps.ps1
en 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:
Necesitas el -ExecutionPolicy
pará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 -File
parámetro.
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.
Si desea ejecutar desde el directorio actual sin una ruta completa, puede usar:
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& './ps.ps1'"
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
...