2016-08-12 54 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