【问题标题】:Resolving Variables within Scriptblocks for Jobs在作业的脚本块中解析变量
【发布时间】:2023-01-13 05:53:59
【问题描述】:

我有一个作业设置来运行/调用输出文件的脚本。该代码在单独运行时工作正常。我已验证作业未被阻止并成功完成。但是,从作业调用脚本时不会生成任何文件。我什至在其他地方做了一些非常相似的事情,没有问题,事实上,我从另一个类似的设置中提取了这段代码。无论如何,这就是我所拥有的:

作为作业运行时,没有文件输出:

$McShieldCheckerJob = Start-Job -ScriptBlock { 
    E:\ICSScoreCardUtilityPack\ServiceAndProcessCheckerV1.0.ps1 -ServicesAndOrProcesses 'McShield' -Comps 'COMP15' `
    -OutputMode 1 -OutputFile $McShieldCheckOutputFileName  -GroupByMachine "N" -AsJob "Y"
} -Name McShieldCheckerJob

当不作为作业运行时,文件按预期输出。

E:\ICSScoreCardUtilityPack\ServiceAndProcessCheckerV1.0.ps1 -ServicesAndOrProcesses 'McShield' -Comps 'COMP15' `
    -OutputMode 1 -OutputFile $McShieldCheckOutputFileName  -GroupByMachine "N" -AsJob "Y"

很难理解为什么这不会像工作一样工作,而不是工作。同样,我已经通过Get-JobReceive-job 验证了作业没有被阻止并且正在成功完成。

编辑: 变量 $McShieldCheckOutputFileName 似乎无法在作业的脚本块中解析。如果我使用字符串文字 [for $McShieldCheckOutputFileName] 我没有问题。 (经过更多的故障排除后,我能够确定作为作业运行时缺少输出文件是由于我的输出文件名的空值。)所以,我可以很容易地解决这个问题,但仍然如此似乎很好奇无法在脚本块中解析变量?必须是一个范围的东西...

【问题讨论】:

    标签: powershell


    【解决方案1】:

    想通了......这是它是如何完成的:

    $McShieldCheckerJob = Start-Job -ScriptBlock { 
        E:ICSScoreCardUtilityPackServiceAndProcessCheckerV1.0.ps1 -ServicesAndOrProcesses 'McShield' -Comps 'COMP15' `
        -OutputMode 1 -OutputFile "$($args[0])" -GroupByMachine "N"
    } -Name McShieldCheckerJob -ArgumentList $McShieldCheckOutputFileName
    

    如我们所见,我们需要为脚本块指定一个 -Argumentlist,然后通过 $args 变量在脚本块中引用所述参数。

    Reference (see example 10)

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 1970-01-01
      • 2018-09-22
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多