如何使用powershell gui并对其进行处理

时间:2016-05-04 14:20:59

标签: multithreading user-interface powershell events jobs

我正在开发Powershell GUI,向用户展示建立VPN连接的每个步骤。因此,当他开始编写脚本时,他将看到所有步骤,当前步骤以粗体显示,最后一步完成以浅灰色显示。 Webbrowser通过加载与当前步骤相关的html文件来显示其他信息。

我不明白我一方面要加载GUI,另一方面要做背景工作。在这个例子中,它正在工作,因为我创建了一个用于更改html的按钮事件:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$SyncHash = [hashtable]::Synchronized(@{})

$Main = New-Object Windows.Forms.Form
$Main.Width = 768
$Main.Height = 576

$button_1 = New-Object System.Windows.Forms.Button
$button_1.Text = "1"
$button_1.Size = New-Object System.Drawing.Size(20,20)
$button_1.Location = New-Object System.Drawing.Size(20,10)
$Main.Controls.Add($button_1)

$SyncHash.infoBrowser = new-object Windows.Forms.WebBrowser
$SyncHash.infoBrowser.Size = new-object System.Drawing.Size(710,200)
$SyncHash.infoBrowser.Location = new-object System.Drawing.Size(10,290)
$SyncHash.infoBrowser.ScrollBarsEnabled = $true
$Main.Controls.Add($SyncHash.infoBrowser)

$htmlFile = "h:\csv\Test.html"
$html = get-content $htmlFile
$SyncHash.infoBrowser.DocumentText = $html 

$button_1.Add_Click( 
{ 
    $htmlFile = "h:\csv\underLAN.html"
    $html = get-content $htmlFile
    write-host $html
    $SyncHash.infoBrowser.DocumentText = $html
}) 

[Windows.Forms.Application]::Run($Main)

但是,如果尝试使用工作,就会发生这种情况。

...
$underLAN={
    $htmlFile = "h:\csv\underLAN.html"
    $html = get-content $htmlFile
    write-host $html
    $SyncHash.infoBrowser.DocumentText = $html
}

[Windows.Forms.Application]::Run($Main)
Start-Job -Name test -ScriptBlock $underLAN  | Receive-Job 

0 个答案:

没有答案