1

我正在尝试在后台运行一个函数。这个函数总是需要等待一段时间。我试图用start-job. 但没有成功(日志为空)。

我的功能

Start-Job { a1 }
function a1()
{
  $timer = [diagnostics.stopwatch]::startnew()
  while ($timer.elapsed.totalseconds -lt 30) 
  {
    writelog "TESTTESTTEST" $timer.elapsed.totalseconds
    start-sleep -seconds 5
  }
  $timer.stop()
}

日志

function writelog([string]$func, [string] $Message, [string] $Value)
{
  $loggingpath = $LogPath+(Get-Date -displayhint date -Format yyyyMMdd)+".txt"
  Add-Content -Path $loggingpath -Value (" ")
  Add-Content -Path $loggingpath -Value ("Date:" + (Get-Date))
  Add-Content -Path $loggingpath -Value ("Function:" + ($func))
}

如果我运行代码start-job一切正常!

4

1 回答 1

1

Start-Job在单独的工作进程中运行传递的脚本块。在这种情况下,该过程没有定义a1。您需要在引用的脚本(文件)或脚本块中的内联(以及任何其他依赖项,如 )中a1定义writelog两者$LogPath

例如。以下确实添加到文件中:

$j = start-job { Add-Content -Path "$env:TEMP\JobDemo.txt" -value "A message at $([datetime]::Now)" }
$j | wait-job
$j | Receive-Job
Get-Content -Path "$env:TEMP\JobDemo.txt"
于 2012-07-04T13:30:58.000 回答