PowerShell:Start-Job -scriptblock多行脚本块?

时间:2017-02-10 00:56:32

标签: powershell jobs invoke-command start-job scriptblock

希望有人能帮助我弄清楚这是否可行。我有一个20行,在while循环中扫描日志文件。我需要与脚本的其余部分并行执行此操作。日志扫描循环将条目传递给SQLite,其他脚本需要对此信息进行操作 - 因此希望并行运行它们。

如果我使用Job-Start命令,那么-SciptBlock函数似乎只接受一个管道命令行。我有太多的命令要管道,所以我需要在scriptblock中运行多行。

我尝试了几种方法,但以下示例给出的错误最少。我也在Invoke-Command -ScriptBlock中尝试了它,就像在第二个例子中一样 - 两种方式都不接受多行脚本块。

我做错了什么,拜托?

Start-Job -Name LogScan -ScriptBlock
{
  $EventOld = ConvertFrom-Json (Get-content ( Get-ChildItem  | Sort-Object -Property LastWriteTime | Select-Object -last 1 ) | Select-Object -last 1) 
  $RunLoop = 1
  while (RunLoop -ge 1)
    {
    Start-Sleep -Milliseconds 333
    $RunLoop = $RunLoop +1
    $EventNew = ConvertFrom-Json (Get-content ( Get-ChildItem  | Sort-Object -Property LastWriteTime | Select-Object -last 1 ) | Select-Object -last 1)
    if ($EventOld.timestamp -ne $EventNew.timestamp)
      {
         # lots of commands and here passing the array to SQLite
      }
    $EventOld = $EventNew
  }
}

错误如下:

Start-Job : Missing an argument for parameter 'ScriptBlock'. 
Specify a parameter of type 'System.Management.Automation.ScriptBlock' 
and try again. [..]

1 个答案:

答案 0 :(得分:0)

感谢briantist帮助我到达那里:)

使用 $('input[type="checkbox"]').click(function () { $(this).prop("checked") ? $("unit").val("1") : $("unit").val(""); }); } Start-Job时,请小心将-ScriptBlock参数的开头Invoke-Command放在与命令相同的行上。不要像使用{if命令那样将它放在下面一行。

这导致了另一个问题,即没有发现您没有正确匹配开放while和关闭{括号,因为您习惯于匹配其缩进级别以配对它们的约定

请注意代码中对}的引用。这些来自于其中一个JSON字段被称为$Event.timestamp的事实 - 它不是标准字符串或数组的方法或属性。