我正在尝试创建一个简单的控制台计时器显示。
...
$rpt = $null
write-status "Opening report", $rpt
# long-running
$rpt = rpt-open -path "C:\Documents and Settings\foobar\Desktop\Calendar.rpt"
...
function write-status ($msg, $obj) {
write-host "$msg" -nonewline
do {
sleep -seconds 1
write-host "." -nonewline
[System.Windows.Forms.Application]::DoEvents()
} while ($obj -eq $null)
write-host
}
该示例生成“打开报告....”,但循环永远不会退出。
我应该使用回叫或委托,但我不确定这种情况下的模式。
我错过了什么?
答案 0 :(得分:2)
您应该使用Write-Progress
通知用户您的流程的运行状态,并在事件发生时进行更新。
答案 1 :(得分:1)
如果您想使用powershell进行一些“并行”计算,请使用作业。
$job = Start-Job -ScriptBlock {Open-File $file} -ArgumentList $file
while($job.status -eq 'Running'){
Write-Host '.' -NoNewLine
}
以下是我对Write-Host的看法。
答案 2 :(得分:0)
脚本按顺序运行。输入$null
对象时,while条件将始终为true。该函数将永远持续,直到某些东西中断(它永远不会发生在你的脚本中。
首先,它将完成该功能并继续您的下一行:
# long-running
$rpt = rpt-open -path "C:\Documents and Settings\foobar\Desktop\Calendar.rpt"
摘要:您的while循环的工作方式类似于while($true)
atm = bad design