gpt4 book ai didi

windows - 如何让任务调度程序终止从 powershell 脚本启动的子进程

转载 作者:可可西里 更新时间:2023-11-01 14:02:18 25 4
gpt4 key购买 nike

我有一个启动 exe 进程的 powershell 脚本。我有一个任务计划在计算机空闲时运行此 powershell 脚本,我将其设置为在它不空闲时停止它。

问题是任务计划不会终止已启动的 exe 进程,我假设它只是试图终止 powershell 进程。

我似乎找不到将启动的 exe 作为 powershell.exe 的子进程的方法当它从任务计划程序启动时

我试过使用 invoke-expression、start-proces 启动进程,我还尝试通过管道传输到 out-null、wait-process 等。当从任务调度程序启动 ps1 时,似乎没有任何效果。

有没有办法做到这一点?

谢谢

最佳答案

我认为您的问题没有简单的解决方案,因为进程是 terminated它不会收到任何通知,您也没有机会进行任何清理。

但是您可以生成另一个看门狗进程来监视您的第一个进程并为您进行清理:

启动脚本在无事可做后等待:

#store pid of current PoSh
$pid | out-file -filepath C:\Users\you\Desktop\test\currentposh.txt
$child = Start-Process notepad -Passthru
#store handle to child process
$child | Export-Clixml -Path (Join-Path $ENV:temp 'processhandle.xml')

$break = 1
do
{
Sleep 5 # run forever if not terminated
}
while ($break -eq 1)

如果启动脚本被终止,看门狗脚本会杀死 child :

$break = 1
do
{
$parentPid = Get-Content C:\Users\you\Desktop\test\currentposh.txt
#get parent PoSh1
$Running = Get-Process -id $parentPid -ErrorAction SilentlyContinue
if($Running -ne $null) {
$Running.waitforexit()
#kill child process of parent posh on exit of PoSh1
$child = Import-Clixml -Path (Join-Path $ENV:temp 'processhandle.xml')
$child | Stop-Process
}
Sleep 5
}
while ($break -eq 1)

这可能有点复杂,根据您的情况可以简化。不管怎样,我想你明白了。

关于windows - 如何让任务调度程序终止从 powershell 脚本启动的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48039469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com