No se puede iniciar el programa a través de PowerShell a través del Programador de tareas

No se puede iniciar el programa a través de PowerShell a través del Programador de tareas

Tengo un script de PowerShell simple que detecta si un programa se está ejecutando y, si no lo está, lo inicia. Funciona bien cuando hago clic derecho y "Ejecutar con PowerShell" en el script, pero cambiar el programa predeterminado para .ps1 a powershell y hacer doble clic no funciona. Además, no funciona en el programador de tareas. Como referencia, aquí está mi guión:

$filebound = get-process FileBound.Enterprise.ChainEditor -ErrorAction SilentlyContinue
if($filebound -eq $null)
{
    start-process -filepath "C:\Program Files (x86)\FileBound\Importer Professional\FileBound.Enterprise.ChainEditor.exe"
}

No puedo encontrar la forma adecuada de argumentar la acción en el programador de tareas para que funcione. Cuando ejecuta la tarea, la pantalla de Power Shell aparece y desaparece, pero la aplicación no se ejecuta (el mismo comportamiento que al hacer doble clic).

Aquí está la información de mi tarea:

Run only when user is logged in and run with highest priveleges checked.  Configured for Windows 10 (it's a windows 10 vm).
Triggers at startup and repeats every 30 minutes indefinitely.  Enabled is checked
Actions starts a program (powershell)
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
with argument (stolen from someone else) -command "& C:\Filebound\Test.ps1" -NonInteractive
Only Condition checked is Wake computer to run task.
Settings are Allow Task to run on demand and Run task as soon as possible are checked.

Se agradece cualquier ayuda.

Respuesta1

Lo averigué. Estaba relacionado con el argumento en el Programador de tareas. Una vez que lo configuré en: -ExecutionPolicy Bypass C:\Filebound\Test.ps1todo funcionó.

Nota al margen: tuve que ajustar la tarea para que fuera "Cuando la computadora está inactiva" como activador en lugar de "Al inicio" para que sea más confiable.

Respuesta2

Puede usar PowerShell para establecer la política de ejecución sin restricciones, luego no necesita especificar -ExecutionPolicy Bypassun parámetro cada vez que necesita ejecutar un script ps1.

Puede abrir PowerShell, pero este método requiere privilegios administrativos; use esto para abrir PowerShell elevado:

Win+ R→tipo PowerShellCtrl+ Shift+Enter

Luego péguelos en la ventana de PowerShell:

New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell" -ErrorAction SilentlyContinue | Out-Null
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell" -Name EnableScripts -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell" -Name ExecutionPolicy -Type String -Value Unrestricted

Y luego no es necesario omitir la política de ejecución para ejecutar scripts.

Esto equivale a cambiar esta Política de grupo:

Win+ R→tipo gpedit.mscEnter

Navegar a:

"Local Computer Policy"→"Computer Configuration"→"Administrative Templates"→"Windows Components"→"Windows PowerShell"

en el panel izquierdo, haga clic en "Windows PowerShell".

En el lado derecho, haga doble clic en "Activar ejecución de secuencias de comandos", haga clic en "Activado" y seleccione "Permitir todas las secuencias de comandos" en la lista desplegable "Política de ejecución", haga clic en Applyy luego haga clic en OK.

información relacionada