Como parar um comando do PowerShell após n segundos?

Como parar um comando do PowerShell após n segundos?

Pergunta

Como posso executar um comando do PowerShell em um script.ps1(que, por exemplo, inicia um loop infinito em um WSL), esperar 5 segundos e, em seguida, parar/interromper esse comando para que o PowerShell passe para a próxima linha do script.ps1?

Comportamento de exemplo

Se eu pressionar manualmente ctrl+cquando o comando estiver ativado no PowerShell, ele interromperá o comando wsl e imprimirá a saída do comando/continuará com line Write-Host "output="$output.

Tentativas

  1. Emulando o envio ctrl+cpara o 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

Mas isso fica pendurado no primeiro comando e não continua mostrando a saída.

  1. Colocar o comando em um trabalho e encerrá-lo após nsegundos.
# 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

O comando é executado, mas não finalizado.

  1. Com base nos comentários, usei start-process para executar o código em uma janela separada, o que funciona. Atualmente estou determinando como iniciar o objeto, para que eu possa aplicá-lo/chamá Stop-Process-lo.
$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"

O que de fato continua e diz que parou o processo, mas a janela do wslainda abre depois e não fecha.

informação relacionada