鸡肋的powershell后台任务
背景:
需做一个这样小脚本:启动监控windows某个东西状态变化,用powershell启动可以,但使用cmd bat掉用无法生效。
问题 :
做个简单实验:
如下一段最简单powershell的脚本, 命名为tmp.ps1:
echo "start ps1" >tmp.txt sleep 100 echo "end ps1" >>tmp.txt
按照windows官方说法,后台任务使用Start-Job运行,官方文档见:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/start-job?view=powershell-7.3
我们打开powershell 运行 如下命令:
start-job -FailPath tmp.ps1
再通过get-job查看,可以看到脚本已在后台运行,如下:
到这,是不是感觉后台任务稳稳后,没问题。
但问题来了, 我想通过bat脚本调用ps1来后台运行。写下面的脚本:
echo "start bat" powershell -command "start-job -Failpath tmp.ps1" echo "end bat"
从理论上看,会调用tmp.ps1后台运行,但是呢:
看起来在运行,结果我们再次打开powshell输出get-job查看,该后台任务无法找到....
再次翻阅官方法说,有这么一段话:
start-job只能适用于当前的session.也就是说不能想linux一样,真正放在后台运行。鸡肋的功能
解决方案:
那么有没有好的解决方法呢,有:那就是将脚本放在计划任务中,然后再去调用计划任务 run,步骤如下:
-->
然后在需要时,使用来调用
schtasks.exe /Run /TN tmp
参考文档:
Email:362299908@qq.com