运行 在 powershell 中作为作业运行

Running function as a job in powershell

下面是从 win-form 应用程序中 ping 所有机器的功能: 我只是 ping 所有机器并在输出框中显示结果并将其保存到 csv 文件中: 由于 UI 运行ning 为单线程模式,我无法执行任何其他进程。 所以请帮我 运行 这个函数作为 $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)

您正在寻找的是以太 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