2013-03-19 74 views
0

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

... 

$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

该脚本按顺序运行。当输入$null对象时,while条件将始终为真。直到有打破它(这在脚本中从未happends功能将永远继续下去

首先然后将它用函数来完成,然后继续下一行:

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

摘要:while循环工程像while($true)大气压=糟糕的设计

1

如果你想要做的PowerShell中使用的工作有些“并行”计算。

$job = Start-Job -ScriptBlock {Open-File $file} -ArgumentList $file 
while($job.status -eq 'Running'){ 
    Write-Host '.' -NoNewLine 
} 

她e是我想到的Write-Host

2

您应该使用Write-Progress通知用户流程的运行状态,并在事件允许时更新它。

+0

有人刚刚学到了一些新东西......我! – 2013-03-21 06:04:11