gpt4 book ai didi

powershell - 如果工作完成了怎么办

转载 作者:行者123 更新时间:2023-12-04 10:03:19 24 4
gpt4 key购买 nike

我正在尝试为我的PowerShell脚本实现GUI,以简化其他用户的特定过程。我有以下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个小时,因此我想到了一个while循环,该循环每5分钟检查一次作业是否完成,但是我不知道如何区分每个作业来做特定的事情。

最佳答案

您可以使用-Name参数指定作业的名称:

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"

您也不必轮询Job状态。而是在工作完成时使用 Register-ObjectEvent cmdlet进行通知:
$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
}

关于powershell - 如果工作完成了怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38912095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com