【发布时间】:2019-02-23 11:56:27
【问题描述】:
使用基本构造:
try
{
Do-Something
}
catch
{
Write-Output "Something threw an exception"
}
是否可以继续尝试 Do-Something 直到成功?也许使用这样的while循环:
$Timeout = 60
$timer = [Diagnostics.Stopwatch]::StartNew()
$t = 0
while (($timer.Elapsed.TotalSeconds -lt $Timeout) -and ($t -ne 1))) {
Start-Sleep -Seconds 1
try
{
Do-Something
$t = 1
}
catch
{
Write-Output "Something threw an exception"
}
}
$timer.Stop()
这里我使用了一个计时器来确保 PowerShell 不会无限期地运行。
它应该继续尝试直到try 成功并且$t = 1 被执行。但是,它在大约 2 秒内失败。请帮忙。
更具体地说,做某事是:
(Get-Process -Name FineReader).MainWindowHandle
我希望代码继续尝试,直到FineReader 存在并且它可以获得MainWindowHandle。
【问题讨论】:
-
$t的目的是什么?它立即退出,因为您的条件失败,您需要计时器小于 60 并且$t不等于1,但在第一次迭代中您将$t设置为1,所以循环退出。 -
@arco444 我认为当
Do-Something失败时循环会失败,并且在Do-Something成功之前它不会执行$t = 1。
标签: windows powershell scripting powershell-3.0 powershell-4.0