Windows窗体中的Powershell进度条

use*_*240 5 powershell

我正在尝试向powershell中的表单添加进度条.我不想使用PowerShell的Write-Progress cmdlet(因为当我从命令行运行脚本时,它显示了一个基于文本的进度条,我总是想要一个基于表单/图形的栏).

我试过这个似乎工作(在网上找到):

[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null

$form_main = New-Object System.Windows.Forms.Form
$progressBar1 = New-Object System.Windows.Forms.ProgressBar
$timer1 = New-Object System.Windows.Forms.Timer

$timer1_OnTick = {
  $progressBar1.PerformStep()
}

$form_main.Text = 'ProgressBar demo'

$progressBar1.DataBindings.DefaultDataSourceUpdateMode = 0
$progressBar1.Step = 1
$progressBar1.Name = 'progressBar1'

$form_main.Controls.Add($progressBar1)

$timer1.Interval = 100
$timer1.add_tick($timer1_OnTick)
$timer1.Start()

$form_main.ShowDialog()| Out-Null
Run Code Online (Sandbox Code Playgroud)

但是,我不希望事件更新进度条(如上例中的$ timer1_OnTic)我想通过在整个脚本中调用来自行更新它,例如:

$progressBar1.PerformStep()
Run Code Online (Sandbox Code Playgroud)

要么

$progressBar1.Value = 10
Run Code Online (Sandbox Code Playgroud)

因此,似乎我需要某种后台工作程序,只要我调用PerformStep()或更改progressBar的值,就会更新进度条

调用ShowDialog会停止脚本内的所有处理,直到表单关闭.

bee*_*ino 6

如果我理解正确,您应该能够将ShowDialog()更改为Show(),这将显示Dialog而不会阻止您的脚本.然后,您可以继续执行并更新进度条.

您可能会对表单缺乏交互性感到失望.