windows - desde - ejecutar script powershell tarea programada
Cómo ejecutar un script de PowerShell desde un archivo por lotes (6)
Explica por qué querría llamar a un script de PowerShell desde un archivo de proceso 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 por completo toda la ruta del script de PowerShell, recomiendo colocar el archivo por lotes y el archivo de comandos de PowerShell en el mismo directorio, como lo describe mi publicación en el blog.
Estoy intentando ejecutar este script en PowerShell. He guardado el script siguiente 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 hecho 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 estoy obteniendo este error:
Necesita el parámetro -ExecutionPolicy
:
Powershell.exe -executionpolicy remotesigned -File C:/Users/SE/Desktop/ps.ps1
De lo contrario, PowerShell considera que los argumentos son una línea para ejecutar y mientras Set-ExecutionPolicy
es un cmdlet, no tiene el parámetro -File
.
Si desea ejecutar algunas secuencias de comandos, puede usar Set-executionpolicy -ExecutionPolicy Unrestricted
y luego restablecer con Set-executionpolicy -ExecutionPolicy Default
.
Tenga en cuenta que la política de ejecución solo se verifica cuando inicia su ejecución (o eso parece) y así puede ejecutar trabajos en segundo plano y restablecer la política de ejecución de inmediato.
# Check current setting
Get-ExecutionPolicy
# Disable policy
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
# Choose [Y]es
Start-Job { cd c:/working/directory/with/script/ ; ./ping_batch.ps1 example.com | tee ping__example.com.txt }
Start-Job { cd c:/working/directory/with/script/ ; ./ping_batch.ps1 google.com | tee ping__google.com.txt }
# Can be run immediately
Set-ExecutionPolicy -ExecutionPolicy Default
# [Y]es
Si desea ejecutar desde el directorio actual sin una ruta de acceso totalmente calificada, puede usar:
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& ''./ps.ps1''"
Si ejecuta un archivo por lotes llamando a PowerShell como administrador, es mejor que lo ejecute así, ahorrándole todos los problemas:
powershell.exe -ExecutionPolicy Bypass -Command "Path/xxx.ps1"
Es mejor usar Bypass
...
Si su secuencia de comandos de inicio de sesión PowerShell se ejecuta después de 5 minutos (como el mío) en un servidor 2012, hay una configuración de GPO en un servidor: ''Configurar inicio de sesión de script de inicio de sesión'' la configuración predeterminada ''no configurado'' esto dejará un retraso de 5 minutos antes de ejecutar el script de inicio de sesión.