脚本块解析问题

时间:2017-11-10 04:08:18

标签: powershell

我正在运行一些从加密文件中读取并转换为ScriptBlock的代码。代码将是一个完整的复杂脚本,但为简单起见,我们假设它是以下内容:

"$(date) Agent started." | Out-File -FilePath 'C:\TMP\test_agent.log' -Append
while($true) {
    '$(date) Will check back in 30 seconds...' | Out-File -FilePath 'C:\TMP\test_agent.log' -Append
    Start-Sleep -Seconds 30
}

下面是启动它的简单代码,它工作正常($sStr变量包含上述脚本作为字符串):

$job = Start-Job -ScriptBlock {
    $sb = $executioncontext.invokecommand.NewScriptBlock($args[0])
    Invoke-Command -ScriptBlock $sb
} -ArgumentList $sStr | Wait-Job -Timeout 1 | Receive-Job

再次,这很好。但是,我需要将其作为新的PowerShell进程运行。但是,当我尝试下面的ScriptBlock没有正确解析,我得到错误。这是修改后的启动器:

$job = Start-Job -ScriptBlock {
    $sb = $executioncontext.invokecommand.NewScriptBlock($args[0])
    powershell "Invoke-Command -ScriptBlock $sb"
} -ArgumentList $sStr | Wait-Job -Timeout 1 | Receive-Job

如何启动新的PowerShell进程(并终止父进程)以便正确解析和执行ScriptBlock? 谢谢!

1 个答案:

答案 0 :(得分:0)

也许您可以通过PowerShell后台作业解决您的问题,该作业可以通过Start-Job创建。 Start-Job也有一个-ScriptBlock参数。 Get-Job Example 7向您展示了如何检查作业是否已完成,以及如何检索作业结果。

希望有所帮助。