假设我有一个简单的工作,如下所示:
$job = Start-Job -ArgumentList 1, 2 -ScriptBlock {
$var1 = $args[0]
$var2 = $args[1]
$var3 = $var1 + $var2
Write-Host $var3
}
现在假设我想继续执行 $job session 并引入新参数,然后继续在 $job 内执行。
据我了解,这不是乔布斯在 Powershell 中的工作方式。一旦作业内部的命令被执行,作业就被认为已经完成,并且不能再被回收。如果我的理解是正确的,是否有其他方法可以实现在 powershell session 中有效地执行后台任务的效果,您可以继续注入(inject)新的命令/变量,而无需创建新的作业/ session /进程?为了清楚起见,这是本地的(在同一台机器上)。
最佳答案
Dennis' helpful answer提供关键指针:使用 PowerShell SDK创建可用于重复调用命令的进程内 PowerShell 实例。
以下示例代码演示了这一点:它不断提示您执行命令并使用单个可重用的 PowerShell
实例来执行它(按 Ctrl-C 退出):
$ps = [powershell]::Create()
while ($true) {
$cmd = Read-Host 'Type a command to execute'
# Execute and output the results.
$ps.AddScript($cmd).Invoke()
# Relay errors, if any.
$ps.Streams.Error | Write-Error
# Reset in preparation for the next command.
$ps.Commands.Clear(); $ps.Streams.ClearStreams()
}
关于powershell - 在作业被触发后执行其他 cmdlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68944342/