我正在运行一些从加密文件中读取并转换为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? 谢谢!