2016-03-24 11 views
0

OK, damit ich neu zu Windows Forms in Powershell verwenden, und ich habe ein bisschen Probleme mit der Form alle Laggy da es eine kontinuierliche Ping läuft. Grundsätzlich muss ich bei jedem Ping nur die IP-Adresse anzeigen. Ich habe versucht, herum zu suchen, und es scheint, als wäre der richtige Weg dazu ein laufender Job im Hintergrund?Continuous Ping Powershell Formular

ich glaube, die Art und Weise dies derzeit geschrieben wird, dass der Ping im Hintergrund passiert, aber ich bin nicht sicher, wie das Formular zu aktualisieren (oder wenn sein sogar möglich, sie sichtbar zu machen?)

Hier Eine Probe, jede Anleitung mit diesem würde sehr geschätzt werden.

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 
+0

Sie finden das Ping-Signal an einem Hintergrundthread versenden müssen, haben vielleicht einen Blick auf [WPFRunspace] (https://gallery.technet.microsoft.com/scriptcenter/WPFRunspace-a-BackgroundWor-7f30edc4) –

+0

Welche Power Version liegst du? –

+0

Powershell-Version 3 – nkasco

Antwort

1

Sie müssen die GUI-Aktualisierung und die Ping-Task trennen. Dies ist in Sprachen, die GUIs wie C# winforms haben, einfach. Wenn Sie es ausprobieren, würden Sie überrascht sein, wie viel einfacher es ist, wenn Sie versuchen, eine GUI über PowerShell zu biegen.

Sie können versuchen, den Link Mathias geschrieben, es wird tun, was Sie benötigen.

+2

Darüber hinaus gibt es viele Ping-Klassen, und Sie könnten immer einen Runspace von PowerShell hosten und Test-Connection ausführen, wenn Sie wirklich das stattdessen verwenden möchten. – Heath

+0

Alles native für Powershell, das ich stattdessen verwenden könnte? – nkasco

+1

Aus der Box stammende PowerShell? Nicht dass ich jemals davon gehört habe. Ich liebe PowerShell und Sie können alles tun, was Sie wollen, aber es kann sehr schwierig werden mit GUI-Sachen. Ihre Skripte können monolithische riesige Abschnitte von GUI-Code sein, die es wirklich schwierig für andere Leute macht, Ihre Skripte und Dokumentation zu unterstützen, um massiv zu werden. – Nick