在PowerShell中将函数作为作业运行

时间:2015-03-11 18:26:31

标签: powershell powershell-v3.0 powershell-v4.0

以下是从win-form appliaction中ping所有机器的功能:     我只是ping所有机器并在输出框中显示结果并将其保存到csv文件中:     由于UI作为单线程模式运行,我无法执行任何其他进程。     所以请帮我把这个函数作为$ Buttonping.Add_Click({pinginfo     })

function pingInfo
{
$pingresults = @()
$outputBox.Clear()
$count1 = 0
$count2 = 0
$Inputarray = $InputBox.Lines
$outputBox.AppendText("PINGING ALL THE MACHINES : PLEASE WAIT TILL THE COMPLETION `n---------------------------------------------------`n")
foreach ($pc in $Inputarray)
{
if(!(Test-Connection -Cn $pc -BufferSize 16 -Count 1 -ea 0 -quiet))
    {
        $viv = ($pc).ToUpper()
        #$outputBox.ForeColor = [System.Drawing.Color]::red
        $outputBox.AppendText("$viv" +"  ----   NOT REACHABLE `r`n")
        #$outputBox.ForeColor = "red"
        $outputBox.ScrollToCaret()
        $Form.refresh()
        $notreachabecount = $count1++
          $details = @{            

            ComputerName     = $pc                
            Status      = "NOT REACHABLE"
                    }
            $pingresults += New-Object PSObject -Property $details 
    }
    else
    {
        $viv = $pc
        $viv = ($pc).ToUpper()
        #$outputBox.ForeColor = [System.Drawing.Color]::Green
        $outputBox.AppendText("$viv" +"   ----   ONLINE `r`n")
        $outputBox.ScrollToCaret()
        $Form.refresh()
        $reachabecount = $count2++

             $details = @{                        
            ComputerName     = $pc                
            Status      = "ONLINE"
                          }
            $pingresults += New-Object PSObject -Property $details                
    }

}
$pingresults | export-csv -Path $env:TEMP\DIT_Tool_Reports\Ping_Result.csv -NoTypeInformation

$outputBox.AppendText("---------------------------------------------------`r TOTAL ONLINE MACHINE : $count2 `n TOTAL OFFLINE MACHINES $count1")       
$outputBox.ScrollToCaret()
$Form.refresh()
}

# Ping button's form part
$Buttonping = New-Object System.Windows.Forms.Button 
$Buttonping.Location = New-Object System.Drawing.Size(190,130) 
$Buttonping.Size = New-Object System.Drawing.Size(150,30) 
$Buttonping.Text = "PING ALL MACHINES" 
$Buttonping.Add_Click({pinginfo
}) 
$Form.Controls.Add($Buttonping)

1 个答案:

答案 0 :(得分:0)

您正在寻找的是以上的Powershell工作流程,请详细了解我在PowerShell出售中输入以下信息:

get-help about_Workflows

或者您可以使用名为:

的powershell中的此cmdlet
get-help Start-Job -full

前。 " Start-Job":

start-job -name process -scriptblock {get-process}

Powershell将在作业中启动Get-process,您可以在此会话中继续工作或使用GUI。 作业完成后,您可以使用

get-job -name process | Receive-Job

要了解有关此cmdlet及其相关cmdlet的更多信息,请访问PowerShell并对以下内容进行获取帮助 相关链接:     获取在职     删除-工作     简历,招聘     启动工作     停止 - 工作     挂起作业     等待-工作     about_Jobs     about_Job_Details