如果我想運行一個 Powershell 腳本(v. 7.1.5),分離,因為我可以關閉 cmd 視窗,注銷,回來,登錄,它仍然像在 Linux 中一樣運行,是否可以不使用任務調度器?
我在 SO 上看到了很多關于此的問題,但在 Linux 中似乎沒有什么像 & 或 nohup 那樣有效。如果這很重要,我在 Windows Server 2016 上。我已經看到了這一點(以及其他許多關于 SO 的內容):
用于派生/運行后臺行程的 bash 與符號 (&) 的 Powershell 等效項
如果我想運行這個,
foreach($n in (0..100)) {
write-host "Hello World $n"
start-sleep -seconds 2
}
我可以看到作業及其產生的結果receive-job [job_number]。如果我關閉會話視窗,它就會死掉。我想如果我使用:
start-job -name BackgroundJob -FilePath C:\temp\test.ps1
它會留下來,我也嘗試過 .\test.ps1 &
當我關閉我的 cmd 視窗時,腳本總是死掉。
- 我如何保持一切運行?
- 我可以做一個計劃任務來每分鐘運行一次腳本,如果它已經在運行就不要運行它,但是這會讓服務器檢查那么多嗎?
- 我也可以在啟動時隱藏視窗,但這似乎不是一回事(是嗎?)
- Linux 中的 nohup 和 & 是否通過簡單地運行一些東西并隱藏視窗來愚弄我(如果我退出呢?
uj5u.com熱心網友回復:
您可以在提升的提示下使用 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/345259.html
標籤:电源外壳 windows-server-2012-r2 powershell-core
上一篇:在Powershell中,如何檢測是否安裝了WSLUbuntu?[復制]
下一篇:獲取DNS腳本在報告中缺少輸出
