Powershell显示弹出窗口并不断更新弹出窗口的while循环体

标签 powershell powershell-3.0 messagebox

我正在尝试制作弹出窗口,其中包含正文中的一些数据,以便使用 powershell 显示。
尽管如此,我测试了一些方法来正确地做到这一点。但我找不到任何方法在更新弹出消息时保持循环进度。

请检查下面的消息框。

powershell.png

尽管如此,我不明白为什么 png 文件没有正确上传..
所以我在下面添加了我的 powershell 代码。

PowerShell 代码如下。

$msgBoxTitle = "i value"
$i = 0
while(1){
    $msgBoxBody = "
        current i value is : $i
    "
    $i++;
    [System.Windows.MessageBox]::Show($msgBoxBody, $msgBoxTitle)
}

在这种情况下,我想让循环在循环进行时不停止,并且消息框主体的值得到更新。

有什么可行的方法吗? 谢谢。

最佳答案

您可以创建自己的弹出表单,而不是使用 ShowDialog() 方法,而仅使用 Show()。 然后在脚本的其余部分中更新标签并在完成后将其丢弃。

为了方便起见,我将创建示例表单的代码放在函数中

function Show-MyPopup {
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing

    $form = New-Object System.Windows.Forms.Form
    $form.Size = New-Object System.Drawing.Size(400,200)
    $form.FormBorderStyle = 'FixedSingle'
    $form.StartPosition = 'CenterScreen'
    $form.TopMost = $true
    $form.ControlBox = $False
    $form.Text = 'i value'

    $label = New-Object System.Windows.Forms.Label
    $label.Size = New-Object System.Drawing.Size(360,22)  # or write '360,22'
    $label.Left = ($form.Width - $label.Width) / 2
    $label.Top = ($form.Height - $label.Height * 2) / 2
    $label.Text = 'Current i value is: 0'
    # in order to address this control later, you must Name it
    $label.Name = 'Label1'
    $form.Controls.Add($label)

    $button = New-Object System.Windows.Forms.Button 
    $button.Size = New-Object System.Drawing.Size(75,24)
    $button.Left = $form.Width - $button.Width - 20
    $button.Top = $form.Height - $button.Height * 3
    $button.Text = 'Exit'
    $button.Add_Click({ $form.Close() })
    $form.Controls.Add($button)
    $form.AcceptButton = $button
    $form.Show()
    # return the form object to the calling script
    $form
}

完成后,在下面编写控制表单的脚本的其余部分:

# call the function to show the popup and capture the form itself in a variable
$popup = Show-MyPopup
for ($i = 1; $i -le 10; $i++) {
    # update the label using the form's Controls collection
    $popup.Controls.Item('Label1').Text = "Current i value is: $i"
    # do what needs to be done here.
    # for demo, just sleep for one second
    Start-Sleep -Seconds 1
}

# very important! remove the form from memory when done
$popup.Dispose()
$popup = $null

关于Powershell显示弹出窗口并不断更新弹出窗口的while循环体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64424762/

相关文章:

powershell - PSCustomObject 数组和 ValueFromPipelineByPropertyName

excel - Visual Basic Excel 宏 MessageBox.Show 引发 "Object Required"错误

c# - 调用 MessageBox 和 BeginInvoking 有什么区别?

c# - WPF 中是否有等效的 MessageBox?

git - 获取 Git 中两次提交之间修改次数最多的文件

powershell - 如何将Powershell输出存储到变量?

powershell - ConvertTo-JSON 具有单个项目的数组

powershell - PowerShell 中的成员类型(ScriptProperty、Property 和 NoteProperty)

powershell - 如何使 powershell cmdlet 静音?

php - 需要正则表达式来匹配多行,直到在公共(public)分隔符之间找到匹配