【问题标题】:Continuous Ping Powershell Form连续 Ping Powershell 表单
【发布时间】:2016-07-11 12:06:33
【问题描述】:

好的,所以我对在 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

【问题讨论】:

  • 您需要将 ping 发送到后台线程,也许可以查看WPFRunspace
  • 你运行的是哪个 powershell 版本?
  • Powershell 版本 3

标签: forms winforms user-interface powershell


【解决方案1】:

您需要将 GUI 更新和 ping 任务分开。这在设计为具有 C# winforms 等 GUI 的语言中很容易,如果您尝试过,您会惊讶地发现它比尝试在 PowerShell 上弯曲 GUI 容易得多。

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

【讨论】:

  • 最重要的是,那里有很多 ping 类,如果您真的打算使用它,您可以随时从 PowerShell 托管一个运行空间并运行测试连接。
  • 我可以使用任何适用于 Powershell 的原生软件吗?
  • 开箱即用的原生 PowerShell?不是我听说过的。我喜欢 PowerShell,你可以用它做任何你想做的事情,但是使用 GUI 的东西会变得非常困难。您的脚本可能是庞大的 GUI 代码部分,这使得其他人很难支持您的脚本和文档也变得庞大。
猜你喜欢
  • 1970-01-01
  • 2020-06-25
  • 2013-01-24
  • 2020-12-08
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多