Как тайм-аут вызова функции PowerShell
Я написал небольшую функцию powershell, которая выполняет Get-EventLog на удаленных серверах. На некоторых серверах это, кажется, просто зависает и никогда не уходит. Могу ли я тайм-аут вызова функции powershell? Я вижу, как это сделать против другого процесса, но я хочу сделать это для функции оболочки питания.
спасибо
#######################
function Get-Alert4
{
param($computer)
$ret = Get-EventLog application -after (get-date).addHours(-2) -computer $computer | select-string -inputobject{$_.message} -pattern "Some Error String" | select-object List
return $ret
} #
Ответы
Ответ 1
Вы можете использовать тайм-ауты, используя фоновое задание:
function Get-Alert4($computer, $timeout = 30)
{
$time = (Get-Date).AddHours(-2)
$job = Start-Job { param($c) Get-EventLog Application -CN $c -After $time |
Select-String "Some err string" -inputobject{$_.message} |
Select-Object List } -ArgumentList $computer
Wait-Job $job -Timeout $timeout
Stop-Job $job
Receive-Job $job
Remove-Job $job
}
Ответ 2
FYI - ваш список аргументов хорош только для одного параметра.
Если вы хотите передать более одного аргумента в задание, вы должны передать их как массив:
$job = Start-Job { param($c, $t) Get-EventLog Application -CN $c -After $t |
Select-String "Some err string" -inputobject{$_.message} |
Select-Object List } -ArgumentList @($computer, $time)
Ответ 3
Это один лайнер (из-за полуколоней), который будет отображать обратный отсчет при приостановке аналогичного (но не того же), что и команда cmd timeout
$NumOfSecs = 15; $n = $NumOfSecs; write-host "Starting in " -NoNewLine; do {if($n -lt $NumOfSecs) {write-host ", " -NoNewLine}; write-host $n -NoNewLine; $n = $n - 1; Start-Sleep 1} while ($n -gt 0)