后台工作似乎没有运行

时间:2010-12-24 00:24:39

标签: powershell

我在PowerShell 2.0脚本中有功能,我将其作为bkground作业启动

Start-Job -ScriptBlock {CopyDataToServer($uploadSessionGuid)} -Name $uploadSessionGuid

然后在剧本的最后我有

Wait-Job -State Running -Timeout $LogCopyTimeout

虽然作业显示为“正在运行”,但已完成,但没有任何内容复制到服务器。

我该如何调试?

2 个答案:

答案 0 :(得分:4)

在新的运行空间中调用脚本块{CopyDataToServer($uploadSessionGuid)},其中命令CopyDataToServer或变量$uploadSessionGuid可能不可用。要检查这个而不是你的工作,首先运行它:

Start-Job -ScriptBlock {
    Get-Command CopyDataToServer
    Get-Variable uploadSessionGuid
}

Wait-Job -State Running
Get-Job | Receive-Job

如果作业返回命令和变量,则问题出在其他地方并且调试尚未结束。但如果它失败或得到错误的结果,那么这就是要解决的问题(使命令可用和/或使用不同的方式来提供参数)。

答案 1 :(得分:4)

Roman对于CopyDataToServer是正确的,并且$ uploadSessionGuid可能没有在作业执行的运行空间中定义(upvoted他的答案)。顺便说一下,我认为最好等待一个特定的工作对象而不是运行状态下的任何工作,例如:

$job = Start-Job {param($path, $guid) . $path\lib.ps1; CopyDataToServer $guid} `
       -arg $pwd,$uploadSessionGuid
Wait-Job $job
Receive-Job $job

请注意,您可以使用-ArgumentList参数将参数传递到scriptblock。虽然您可以通过$args在脚本块中访问这些参数,但我更喜欢使用param块并命名args。此示例还说明了如何将路径传递给包含函数CopyDataToServer的PowerShell脚本,该函数将点源应用到作业的运行空间中。