¿Cómo detener un comando de PowerShell después de n segundos?

¿Cómo detener un comando de PowerShell después de n segundos?

Pregunta

¿Cómo puedo ejecutar un comando de PowerShell en un script.ps1(que, por ejemplo, inicia un bucle infinito en un WSL), esperar 5 segundos y luego detener/interrumpir ese comando para que PowerShell pase a la siguiente línea del script.ps1?

Comportamiento de ejemplo

Si presiono manualmente ctrl+ccuando el comando está activado en powershell, detiene el comando wsl e imprime el resultado del comando/continúa con la línea Write-Host "output="$output.

Intentos

  1. Emulando envío ctrl+cal terminal powershell.
# line 1, activate "inifinite" loop in wsl
[String] $output = wsl /home/testlinuxname/maintenance/gCal/./askSync.sh

# try to stop/break the previous command/infinite loop
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
[System.Windows.Forms.SendKeys]::SendWait("^{c}") 

# get the output of the first command and print it to screen.
Write-Host "output="$output

Pero eso sigue colgando en el primer comando y no continúa mostrando el resultado.

  1. Poner el comando en un trabajo y finalizar ese trabajo después de nunos segundos.
# Start Job
$job = Start-Job -ScriptBlock {
    Start-Sleep -Seconds 2
}

# Wait for job to complete with timeout (in seconds)
$job | Wait-Job -Timeout 10

# Check to see if any jobs are still running and stop them
#$job | Where-Object {(wsl pwd > c:/temp/output.txt) } | Stop-Job #Executes command and puts it in log
$job | Where-Object {(wsl /home/testlinuxname/maintenance/gCal/./askSync.sh > c:/temp/output.txt) } | Stop-Job # Execute command but does not terminate

El comando se ejecuta, pero no finaliza.

  1. Según los comentarios, utilicé start-process para ejecutar el código en una ventana separada, lo cual funciona. Actualmente estoy determinando cómo obtener el objeto que se inicia, para poder aplicarlo/invocarlo Stop-Process.
$proc = Start-Process wsl /home/testlinuxname/maintenance/gCal/./askSync.sh > c:/temp/output.txt -RedirectStandardOutput c:/temp/input1.txt -Passthru
Write-Host "Continuing powershell and starting sleep:"
Start-Sleep -s 10
Write-Host "Done sleeping, now stopping process:"
$proc | Stop-Process
Write-Host "Stopped process"

Lo cual de hecho continúa y dice que detuvo el proceso, pero la ventana del wsltodavía se abre después y no se cierra.

información relacionada