问题
我一直在为一个超时功能Start-Services
我的应用程序的功能,并在一些挫折,其中超时工作不正常或无法正确显示都有所涉猎。
我的两个常量被设置为这样的:
$timeout = New-TimeSpan -Seconds $SecondsToWait
$elapsedTime = [System.Diagnostics.Stopwatch]::StartNew()
我的代码的其余部分已经改变多时间,试图实现我的目标。 我已经尝试了所有与很少或根本没有成功以下。 每次尝试都会有一个简短的介绍:
在这种情况下,我试图创建一个新的工作,把动作做内部While循环,并退出表示,如果经过时间=超时时间或工作状态是“正在运行”循环。 不幸的是,while循环在此休息。
$j = Start-Job -ScriptBlock { Start-Service $ServiceName -ErrorAction SilentlyContinue -WarningAction SilentlyContinue }
Do {
If ($j.State -eq "Running") { break }
$j | Receive-Job
} While ($elapsedTime -le $timeout)
我试图在do while循环不同的格式,但仍然得到它的工作,因为它击中一个无限循环的问题, Start-Service
线,当它运行到它不能自动启动服务。
Do {
$counter++
Start-Sleep 1
Start-Service $ServiceName -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
# this line is just a custom function that gets the status of the service and checks a number of times based on the 'SecondsToWait' Parameter.
Wait-ServiceState -ServiceName $ServiceName -ServiceState "Running" -SecondsToWait 1
} While ($elapsedTime -le $timeout)
这也打破了在启动服务cmdlet以进行类似的原因为上述实例
Do {
$counter++
Start-Service $ServiceName -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
} While ($elapsedTime -eq $timeout)
我也试过用Write-Progress
,而不是作为一种更dymanic变种...但没有在初始化方面做很多工作Start-Services
的说法。
我曾尝试过几个职位寻找替代的方式来做到这一点的希望读书为好,但即使这些变化失败...并不亚于我喜欢的方式Write-Progress
工作......我不明白如何清除它从屏幕(没有清除整个命令屏幕)或如何控制它出现cmd窗口上。 不管怎么说,你可以找到低于替代资源的开发:
PowerShell的超时服务
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/start-job?view=powershell-5.1
PowerShell的启动过程中,有超时等待,杀死并获取退出代码
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-progress?view=powershell-5.1
题
有谁知道如何解决我的代码,这将有助于我不仅超时的问题Start-Process
,但要正确显示所经过的时间?
提前致谢