/ / еквивалент на времето за изчакване за windows - windows, powershell, batch-файл

еквивалент на времето за изчакване за Windows - windows, powerhell, batch-file

В Linux има timeout команда, която има много хубав и прост синтаксис:

timeout 120 command [args]

Просто е.Той изпълнява командата и я убива, ако командата работи по време. Въпреки най-добрите ми усилия, "решенията" в прозорците са множество редове, не показвайте изхода на командата на терминала и cygwin "timeout" не успя да убие процеса, ако увеличих времето за изчакване на повече от една минута (I нямат обяснение за това). Някой има ли по-добра идея?

Отговори:

2 за отговор № 1

Искам да кажа, че има timeout.exe но не мисля, че ви дава съвсем същата функционалност, която търсите.

Не съм наясно с a timeout еквивалент за Windows. Следвайки предложението в свързан отговор Работните места в PowerShell биха били предложение как да се репликира timeouts поведение. Въртях проста примерна функция

function timeout{
param(
[int]$Seconds,
[scriptblock]$Scriptblock,
[string[]]$Arguments
)

# Get a time stamp of before we run the job
$now = Get-Date

# Execute the scriptblock as a job
$theJob = Start-Job -Name Timeout -ScriptBlock $Scriptblock -ArgumentList $Arguments

while($theJob.State -eq "Running"){
# Display any output gathered so far.
$theJob | Receive-Job

# Check if we have exceeded the timeout.
if(((Get-Date) - $now).TotalSeconds -gt $Seconds){
Write-Warning "Task has exceeded it allotted running time of $Seconds second(s)."
Remove-Job -Job $theJob -Force
}
}

# Job has completed natually
$theJob | Remove-Job -ErrorAction SilentlyContinue
}

Това стартира работа и продължава да проверява за нейния изход. Така че трябва да се доближите до актуализациите на текущия процес. Не е нужно да използвате -ScriptBlock и биха могли да изберат -Command базирани работни места. Ще покажа пример, използвайки горната функция и скриптов блок.

timeout 5 {param($e,$o)1..10|ForEach-Object{if($_%2){"$_`: $e"}else{"$_`: $o"};sleep -Seconds 1}} "OdD","eVeN"

Това ще отпечата числата от 1 до 10, както иравномерността на числата. Между показването на число ще има пауза от 1 секунда. Ако времето за изчакване е достигнато, се показва предупреждение. В горния пример всички 10 числа няма да бъдат показани, тъй като процесът е разрешен само 5 секунди.

Функцията може да използва някои докосвания и вероятно има някой, който може вече да е направил това. Моето мнение е поне.