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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章