当我关闭会话或退出计算机时,计划任务是保持在后台运行Powershell脚本的唯一方法吗?



如果我想运行一个Powershell脚本(v. 7.1.5),分离,就像我可以关闭cmd窗口,注销,回来,登录,它仍然像在Linux中运行一样,不使用任务调度程序是可能的吗?

我在SO上看到了很多关于这个的问题,但似乎没有什么像&或者在Linux中没有。我在Windows Server 2016上,如果这很重要的话。我看到过这个(和许多)

Powershell与bash & (&)的等效,用于分叉/运行后台进程

如果我想运行这个,

foreach($n in (0..100)) {
write-host "Hello World $n" 
start-sleep -seconds 2
}

我可以看到工作和它产生的receive-job [job_number]。如果我关闭会话窗口,它就会死亡。我想如果我用:

start-job -name BackgroundJob -FilePath C:temptest.ps1

它会留下来,我也试过.test.ps1 &

脚本总是在我关闭cmd窗口时死亡。

  • 我如何保持一切运行?
  • 我可以做一个计划任务,每分钟运行脚本,而不是运行它,如果它已经在运行,但这会使服务器检查陷入困境吗?
  • 我也可以在启动时隐藏窗口,但这似乎并不是真正的同样的事情(是吗?)
  • Is nohup and &在Linux中,通过简单地运行一些东西并隐藏窗口来愚弄我(如果我退出怎么办?

可以在提升的提示符下使用register- schedulejob。然后您可以注销并重新登录,当作业完成时,您可以使用常规作业命令来处理它。您可以在MicrosoftWindowsPowershell schedulejobs下的任务调度程序中找到作业。调度作业的输出可以是序列化对象,就像作业的输出一样。

$trigger = New-JobTrigger -Once -At 1:57pm
Register-ScheduledJob test {sleep 1; 'done'} -trigger $trigger

get-scheduledjob
Id         Name            JobTriggers     Command                Enabled
--         ----            -----------     -------                -------
3          test            1               sleep 1; 'done'        True

get-job
Id     Name PSJobTypeName   State         HasMoreData Location  Command
--     ---- -------------   -----         ----------- --------  -------
1      test PSScheduledJob  Completed     True        localhost sleep 1; 'done'

get-job | receive-job -keep
done

相关内容

  • 没有找到相关文章

最新更新