连续Ping Powershell表格

时间:2016-03-24 00:09:20

标签: forms winforms user-interface powershell

好吧所以我在Powershell中使用Windows窗体比较新,而且由于连续运行ping,因此表格有点麻烦。从根本上说,我需要做的就是每次运行ping时都显示IP地址。我试图四处搜索,似乎正确的方法是在后台运行一个工作?

我认为目前编写的方式是ping在后台发生,但我不确定如何更新表单(或者如果它甚至可以使其可见?)

以下是一个示例,我们将非常感谢您的任何指导。

function global:ContinuousPing{
    $global:job = start-job {
        while($true){
            $pingStatus = Test-Connection google.com -Count 1
            $label.text = $pingStatus.IPV4Address.IPAddressToString
            #[System.Windows.Forms.Application]::DoEvents()
            start-sleep 1
        }
    }
}

Add-Type -AssemblyName System.Windows.Forms

$pingForm = New-Object System.Windows.Forms.Form
$label = New-Object System.Windows.Forms.Label
$button1 = New-Object System.Windows.Forms.Button

$ping = {
    ContinuousPing

    while($true){
        Receive-Job $job
    }
}

$label.Text = "Ping Status"

$button1.Location = New-Object System.Drawing.Point(100,10)
$button1.add_Click($ping)

$pingForm.Controls.Add($label)
$pingForm.Controls.Add($button1)

$pingForm.ShowDialog() | Out-Null

remove-job $job

1 个答案:

答案 0 :(得分:1)

您需要分离GUI更新和ping任务。这很容易用于设计有像C#winforms这样的GUI的语言。如果你试过它,你会比试图在PowerShell上弯曲GUI更容易感到惊讶。

您可以尝试Mathias发布的链接,它可以满足您的需求。