当我关闭会话或注销计算机时,计划任务是在后台保留 运行 Powershell 脚本的唯一方法吗?
Is a scheduled task the only way to keep running a Powershell script in the background, when I close my session or log out of the computer?
如果我想运行一个Powershell脚本(v.7.1.5),分离,因为我可以关闭cmd window,注销,回来,登录,然后它仍然像 Linux 中那样 运行ning,不使用任务调度程序是否可能?
我在 SO 上看到了很多关于此的问题,但在 Linux 中似乎没有什么像 & 或 nohup 这样的。如果重要的话,我在 Windows Server 2016 上。我已经看到了这个(以及 许多 其他人):
Powershell equivalent of bash ampersand (&) for forking/running background processes
如果我想运行这个,
foreach($n in (0..100)) {
write-host "Hello World $n"
start-sleep -seconds 2
}
我可以通过 receive-job [job_number]
看到作业及其生成的内容。如果我关闭会话 window,它就会死掉。我想如果我使用:
start-job -name BackgroundJob -FilePath C:\temp\test.ps1
它会留下来,我也试过了.\test.ps1 &
当我关闭 cmd window.
时,脚本总是死掉
- 如何保留所有内容 运行ning?
- 我可以每分钟对脚本执行一个计划任务 运行 而不是 运行 如果它已经 运行ning 了,但是这会导致服务器检查那么多?
- 我也可以在启动时隐藏window,但这似乎并不是真正的
同样的事情(是吗?)
- Linux 中的 nohup 和 & 是否通过简单地 运行ning 一些东西并隐藏 window 来愚弄我(如果我注销怎么办?
您可以在提升的提示下使用 register-scheduledjob。然后您可以注销并重新登录,当作业完成时,您可以使用常规作业命令行开关来处理它。您可以在 \Microsoft\Windows\Powershell\ScheduledJobs 下的任务计划程序中找到作业。计划作业的输出可以是序列化对象,就像作业的输出一样。
$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
如果我想运行一个Powershell脚本(v.7.1.5),分离,因为我可以关闭cmd window,注销,回来,登录,然后它仍然像 Linux 中那样 运行ning,不使用任务调度程序是否可能?
我在 SO 上看到了很多关于此的问题,但在 Linux 中似乎没有什么像 & 或 nohup 这样的。如果重要的话,我在 Windows Server 2016 上。我已经看到了这个(以及 许多 其他人):
Powershell equivalent of bash ampersand (&) for forking/running background processes
如果我想运行这个,
foreach($n in (0..100)) {
write-host "Hello World $n"
start-sleep -seconds 2
}
我可以通过 receive-job [job_number]
看到作业及其生成的内容。如果我关闭会话 window,它就会死掉。我想如果我使用:
start-job -name BackgroundJob -FilePath C:\temp\test.ps1
它会留下来,我也试过了.\test.ps1 &
当我关闭 cmd window.
时,脚本总是死掉- 如何保留所有内容 运行ning?
- 我可以每分钟对脚本执行一个计划任务 运行 而不是 运行 如果它已经 运行ning 了,但是这会导致服务器检查那么多?
- 我也可以在启动时隐藏window,但这似乎并不是真正的 同样的事情(是吗?)
- Linux 中的 nohup 和 & 是否通过简单地 运行ning 一些东西并隐藏 window 来愚弄我(如果我注销怎么办?
您可以在提升的提示下使用 register-scheduledjob。然后您可以注销并重新登录,当作业完成时,您可以使用常规作业命令行开关来处理它。您可以在 \Microsoft\Windows\Powershell\ScheduledJobs 下的任务计划程序中找到作业。计划作业的输出可以是序列化对象,就像作业的输出一样。
$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