PowerShell控制台计时器

PowerShell控制台计时器,powershell,powershell-2.0,Powershell,Powershell 2.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

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

...

$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

}
该示例生成“开始报告…”,但循环从未退出

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


我缺少什么?

脚本按顺序运行。输入
$null
对象时,while条件始终为true。该函数将永远持续,直到有东西打破它(这在脚本中从未发生)

首先,将使用函数完成此操作,然后继续执行下一行:

# long-running
$rpt = rpt-open -path "C:\Documents and Settings\foobar\Desktop\Calendar.rpt"

小结:while循环的工作原理类似于
while($true)
atm=bad design

脚本按顺序运行。当您输入
$null
对象时,while条件将始终为true。该函数将永远持续,直到有什么东西打破它(脚本中从未发生)

首先,将使用函数完成此操作,然后继续执行下一行:

# long-running
$rpt = rpt-open -path "C:\Documents and Settings\foobar\Desktop\Calendar.rpt"
小结:如果您想使用powershell使用作业进行一些“并行”计算,则while循环的工作方式类似于
while($true)
atm=bad design

$job = Start-Job -ScriptBlock {Open-File $file} -ArgumentList $file
while($job.status -eq 'Running'){
    Write-Host '.' -NoNewLine
}
以下是我的想法。

如果您想使用powershell进行一些“并行”计算,请使用作业

$job = Start-Job -ScriptBlock {Open-File $file} -ArgumentList $file
while($job.status -eq 'Running'){
    Write-Host '.' -NoNewLine
}
以下是我的想法。

您应该使用通知用户流程的运行状态,并将其更新为事件保证。

您应该使用通知用户流程的运行状态,并将其更新为事件保证