Dav*_*mas 5 powershell time multithreading limit powershell-2.0
我想在PowerShell(v2)脚本上设置一个时间限制,以便在该时间限制到期后强行退出.
我在PHP中看到他们有像set_time_limit和max_execution_time这样的命令,你可以限制脚本甚至函数执行的时间.
使用我的脚本,查看时间的do/while循环是不合适的,因为我正在调用一个可以挂起很长时间的外部代码库.
我想限制一段代码并且只允许它运行x秒,之后我将终止该代码块并向用户返回脚本超时的响应.
我查看了后台作业,但它们在不同的线程中运行,因此不会对父线程具有终止权限.
有没有人处理过此问题或有解决方案?
谢谢!
我知道这是一篇旧文章,但我在我的脚本中使用了它。
我不确定它的使用是否正确,但是 George 提出的 System.Timers.Timer 给了我一个想法,它似乎对我有用。
我将它用于有时挂起 WMI 查询的服务器,超时会阻止它卡住。然后,我将消息输出到日志文件,而不是写入主机,这样我就可以看到哪些服务器已损坏,并在需要时修复它们。
我也不使用 GUID,而是使用服务器主机名。
我希望这是有道理的并对你有帮助。
$MyScript = {
Get-WmiObject -ComputerName MyComputer -Class win32_operatingsystem
}
$JobGUID = [system.Guid]::NewGuid()
$elapsedEventHandler = {
param ([System.Object]$sender, [System.Timers.ElapsedEventArgs]$e)
($sender -as [System.Timers.Timer]).Stop()
Unregister-Event -SourceIdentifier $JobGUID
Write-Host "Job $JobGUID removed by force as it exceeded timeout!"
Get-Job -Name $JobGUID | Remove-Job -Force
}
$timer = New-Object System.Timers.Timer -ArgumentList 3000 #just change the timeout here
Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action $elapsedEventHandler -SourceIdentifier $JobGUID
$timer.Start()
Start-Job -ScriptBlock $MyScript -Name $JobGUID
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15618 次 |
| 最近记录: |