1

我有一个从域服务器运行并在域服务器上“工作”的脚本。

工作被划分为脚本块中的作业,这些作业使用存储的 PSsession 通过调用命令调用。

结果将记录在域服务器上的日志文件中,该日志文件名称中包含日期时间戳。

现在,我需要添加另一个日志,该日志需要驻留在完成工作的遥控器上。日志名称格式还需要包含日期和时间戳。

我的问题是将日志名称传递给每个作业,以便它们写入同一个文件。我玩过 -ArgumentList、@args 和 $args,我可以正常运行但什么也不做,所以我没有正确传递日志文件名。

下面是我如何构建脚本的超级简化版本。

将 Start-Job 嵌套在另一个脚本块中是错误的吗?我如何将我唯一的日志文件名传递给这些脚本块以捕获成功/失败和特定点?


#log file names, ps session and other variables declared here  

  $DoDomainWorkScriptBlock = {

    Try {

            start-job -name DoDomainWorkjob -scriptblock{

          $command = "C:\Program Files\someprogram\someprogram.exe"

          & $command  -f someargs


            If ($? -ne "True") {Throw 'Do work failed’}

            " Do non-domain work job completed. "

            }

        } Catch {$Error[0] | Out-File $ErrorLog -Append}

    }

#other jobs nested in other scriptblocks like the one above here

Invoke-Command -session $RemoteSession -scriptblock $DoDomainWorkScriptblock | Out-File $DomainProgressLog -Append

Invoke-Command -session $RemoteSession -command{Wait-Job -name DoDomainWorkjob } | Out-File $DomainProgressLog -Append

Invoke-Command -session $RemoteSession -command{Receive-Job -Name DoDomainWorkjob } | Out-File $DomainProgressLog –Append


#invoke start, wait, and receive job commands for the other jobs
4

1 回答 1

3

您可以将参数传递给脚本块,如下所示:

$code = {
  param( $foo )
  Write-Host $foo
}

$bar = "bar"
Invoke-Command -ScriptBlock $code -ArgumentList $bar
于 2012-10-05T14:13:17.027 回答