Как остановить команду PowerShell через n секунд?

Как остановить команду PowerShell через n секунд?

Вопрос

Как выполнить команду PowerShell в script.ps1(например, которая запускает бесконечный цикл в WSL), подождать 5 секунд, а затем остановить/прервать эту команду, чтобы PowerShell перешел к следующей строке script.ps1?

Пример поведения

Если я вручную нажму клавишу , ctrl+cкогда команда выполняется в PowerShell, она остановит команду wsl и выведет вывод команды/продолжит работу со строки Write-Host "output="$output.

Попытки

  1. Эмуляция отправки ctrl+cв терминал 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

Но он продолжает зависать на первой команде и не продолжает отображать вывод.

  1. Помещение команды в задание и завершение этого задания через nнесколько секунд.
# 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

Команда выполняется, но не завершается.

  1. На основе комментариев я использовал start-process для запуска кода в отдельном окне, что работает. В настоящее время я определяю, как получить объект, который запущен, чтобы я мог применить/вызвать 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"

Который действительно продолжается и говорит, что остановил процесс, но окно wslпосле этого все еще открыто и не закрывается.

Связанный контент