PowerShell控制台计时器

时间:2013-03-19 15:49:08

标签: powershell powershell-v2.0

我正在尝试创建一个简单的控制台计时器显示。

...

$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

}

该示例生成“打开报告....”,但循环永远不会退出。

我应该使用回叫或委托,但我不确定这种情况下的模式。

我错过了什么?

3 个答案:

答案 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