鸡肋的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

  

参考文档:

  https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/start-job?view=powershell-7.3

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-7.3

https://social.technet.microsoft.com/Forums/office/en-US/a2c4741d-8c6b-4277-afcd-bbdc73ca8deb/startjob-works-from-powershell-but-not-from-cmd

 

posted @ 2023-01-12 09:11  Believer007  阅读(1404)  评论(0编辑  收藏  举报