Estoy tratando de 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"}
Hice 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:
./
y tener un indicador ejecutable en Unix.Explico por qué querría llamar a un script de PowerShell desde un archivo por lotes y cómo hacerlo en mi blog aquí .
Esto es básicamente lo que estás buscando:
Y si necesita ejecutar su script de PowerShell como administrador, use esto:
Sin embargo, en lugar de codificar la ruta completa al script de PowerShell, recomiendo colocar el archivo por lotes y el archivo de script de PowerShell en el mismo directorio, como lo describe mi publicación de blog.
fuente
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass Invoke-WebRequest https://www.example.com/example.ics -OutFile C:\_my\script.ics' -Verb RunAs}";
opowershell -Command "Invoke-WebRequest https://www.example.com/example.ics -OutFile c:\_my\file.ics"
, o estoy usando la opción -File a lo mismo en un archivo .ps1, o(New-Object Net.WebClient).DownloadFile
. ¿Algunas ideas?Si desea ejecutar desde el directorio actual sin una ruta totalmente calificada, puede usar:
fuente
Si ejecuta un archivo por lotes que llama a PowerShell como administrador, será mejor que lo ejecute así, ahorrándole todos los problemas:
Es mejor usar
Bypass
...fuente
Si desea ejecutar algunos scripts, puede usar
Set-executionpolicy -ExecutionPolicy Unrestricted
y luego restablecer conSet-executionpolicy -ExecutionPolicy Default
.Tenga en cuenta que la política de ejecución solo se verifica cuando comienza su ejecución (o eso parece) y, por lo tanto, puede ejecutar trabajos en segundo plano y restablecer la política de ejecución de inmediato.
fuente
Otra forma fácil de ejecutar un script ps desde un lote es simplemente incorporarlo entre los caracteres ECHO y Redirection, (> y >>), por ejemplo:
La última línea elimina el archivo temporal creado.
fuente
Si su secuencia de comandos de inicio de sesión de PowerShell se está ejecutando después de 5 minutos (como la mía) en un servidor de 2012, hay una configuración de GPO en un servidor: 'Configurar retraso de secuencia de comandos 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.
fuente
Pequeña muestra test.cmd
fuente