2016-08-12 55 views
4

我想实现一个GUI到我的PowerShell脚本来简化其他用户的某个过程。我有以下PowerShell脚本:如何完成某项工作

if ($checkBox1.Checked) { 
    Try{ 
    Start-Job { & K:\sample\adp.cmd } 
    $listBox1.Items.Add("ADP-Job started...") 
    }catch [System.Exception]{ 
    $listBox1.Items.Add("ADP --> .cmd File not found!")} 
    } 

    if ($checkBox2.Checked) { 
    Try{ 
    Start-Job { & K:\sample\kdp.cmd } 
    $listBox1.Items.Add("KDP-Job started...") 
    }catch [System.Exception]{ 
    $listBox1.Items.Add("KDP --> .cmd File not found!")} 
    } 

有没有一种方法,不断检查所有正在运行的作业,做一些对于已完成各工作?例如,在我的列表框中打印出如下所示的内容:ADP-Files have been uploaded

由于每个作业需要大约5分钟--4小时,所以我想到了一段时间循环,每5分钟检查一次作业是否完成,但是我无法确定了解如何区分每个工作以做具体的事情。

回答

6

您可以使用-Name参数specifiy名作业:

Start-Job { Write-Host "hello"} -Name "HelloWriter" 

并采用Get-Job cmdlet的接收作业状态:

Get-Job -Name HelloWriter 

输出:

Id  Name   PSJobTypeName State   HasMoreData  Location    Command     
--  ----   ------------- -----   -----------  --------    -------     
3  HelloWriter  BackgroundJob Completed  True   localhost    Write-Host "hello" 

或自己指定的Start-Job cmdlet来一个变量,并用它来检索工作:

$worldJob = Start-Job { Write-Host "world"} 

所以,你可以只写$woldJob和接收:

Id  Name   PSJobTypeName State   HasMoreData  Location    Command     
--  ----   ------------- -----   -----------  --------    -------     
7  Job7   BackgroundJob Completed  True   localhost    Write-Host "world" 

你也不必轮询作业状态。而是使用Register-ObjectEvent cmdlet时该作业完成获得notificated:

$job = Start-Job { Sleep 3; } -Name "HelloJob" 

$jobEvent = Register-ObjectEvent $job StateChanged -Action { 
    Write-Host ('Job #{0} ({1}) complete.' -f $sender.Id, $sender.Name) 
    $jobEvent | Unregister-Event 
} 
+0

谢谢你的快速答案。所以,如果我给我的工作个人名称,然后使用Get-Job -Name cmdlet,我可以创建一个自定义的消息,打印出一旦作业已完成,即使它需要几个小时?或者我是否必须制作一个循环,每5分钟连续检查一次是否完成? –

+0

你也可以让工作完成后自己输出信息 –

+0

这将是一个完美的解决方案,但我该怎么做?我通过在我的.cmd文件后面写了一个写主机消息来尝试它,但是它只是悄悄地打印了消息,即使该作业尚未完成。 –

2

多种可能的方式在这里:

$Var = Start-Job { & K:\sample\kdp.cmd } 

的再检查

$Var.State 

或者给作业的名称

Start-Job { & K:\sample\kdp.cmd } -Name MyJob 

,然后检查

Get-Job MyJob