powershell - PowerShell:Start-Job -scriptblock多行脚本 block ?

标签 powershell jobs invoke-command start-job scriptblock

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

如果我使用Job-Start命令,那么-SciptBlock函数似乎只会接受一条管道命令。我有太多命令要传递,因此我需要在脚本块中运行多行。

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

请问我做错了什么?

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. [..]

最佳答案

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

使用Start-JobInvoke-Command时,请注意将-ScriptBlock参数的开头{与命令放在同一行。不要像使用o​​jit_code或if命令那样将其放在下面的行中。

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

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

关于powershell - PowerShell:Start-Job -scriptblock多行脚本 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149748/

相关文章:

Laravel "queue:prune-batches"未定义

regex - Powershell 高级正则表达式从文件中选择

powershell - 使用强制选项在Powershell中创建应用程序池

c# - 尝试从默认打印机获取打印作业时,GetPrintJobInfoCollection() 抛出 NullReferenceException

powershell - 如何捕获使用Powershell的Invoke-Command调用的ScriptBlock的返回值

powershell - 启 Action 业与调用命令 -asjob

.net - Powershell Invoke-WebRequest 错误 - 与 Azure Databricks 交互

powershell - 如何编写对象的单个属性的值?

ruby - 如何在 vagrant 代理后面安装代理插件

node.js - 如何使用 Kue 每周四安排一次工作?