Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么一个简单的带启动作业、等待作业的Powershell中断器不返回结果?_Powershell_Wait - Fatal编程技术网

为什么一个简单的带启动作业、等待作业的Powershell中断器不返回结果?

为什么一个简单的带启动作业、等待作业的Powershell中断器不返回结果?,powershell,wait,Powershell,Wait,我们有一个jenkins git的工作,需要经常远程检查。所以我想用一个超时来中止检查 我知道如果计时器必须停止正在等待的后台作业,等待作业将返回null。因此,当代码块长期运行时,它应该返回null。这在命令行中对我有效 然而,当一个作业很短时,当我在ISE中运行该函数时,下面的代码仍然会变为null。当我调试它时,它工作得很好。帮助 非常感谢。 安妮 “永不”承诺,如果超时过期,等待作业将返回任何内容,那么您为什么希望它返回呢 -超时 确定每个后台作业的最大等待时间(秒)。默认值,-1将等待

我们有一个jenkins git的工作,需要经常远程检查。所以我想用一个超时来中止检查

我知道如果计时器必须停止正在等待的后台作业,等待作业将返回null。因此,当代码块长期运行时,它应该返回null。这在命令行中对我有效

然而,当一个作业很短时,当我在ISE中运行该函数时,下面的代码仍然会变为null。当我调试它时,它工作得很好。帮助 非常感谢。 安妮

“永不”承诺,如果超时过期,等待作业将返回任何内容,那么您为什么希望它返回呢

-超时

确定每个后台作业的最大等待时间(秒)。默认值,-1将等待作业完成,无论作业运行多长时间。当您提交等待作业命令而不是开始作业命令时,计时开始

如果超过此时间,则等待结束并返回命令提示符,即使作业仍在运行。不显示任何错误消息

在等待作业返回后检查作业的状态,以确定作业是否已完成:

if ($job.State -eq 'Completed') {
  Write-Host 'Finished.'
} else {
  Write-Host 'Timeout expired. Stopping job.'
  Stop-Job -Id $job.Id
}

答案是,在我的系统上,一秒钟的超时时间太短了,即使对于最简单的程序也是如此。将超时时间设置为更长的秒数将返回预期结果。

ty用于答复!是如果超时则获取null是正确的。但如果我的工作是一个超短函数,它应该给我一个客观的结果。它在调试器中为我执行此操作,但在调用脚本时不执行此操作。从更多的阅读中,我想也许我的问题是使用了错误的工具。也许我需要工作流?是的,如果在超时之前完成,等待作业应返回作业。尝试使用更简单的条件if-not$answaitjob{…}else{…}。至于工作流,如果你不知道你需要它们的确切用途:远离。它们的行为与普通的PowerShell有着微妙的不同,它会落到你的脚上。lot.ty@Ansgar用于工作流警告。您的评论让我读了更多,我发现工作流中不支持大量命令。例如,我使用写主机进行日志记录,但它不受支持。
if ($job.State -eq 'Completed') {
  Write-Host 'Finished.'
} else {
  Write-Host 'Timeout expired. Stopping job.'
  Stop-Job -Id $job.Id
}