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渡されたスクリプト ブロックを別のワーカー プロセスで実行します。この場合、そのプロセスには の定義がありませんa1a1両方を定義する必要があり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 に答える