当我的进程为“时,如何运行PowerShell函数?”;“杀死”;via";“停止进程”;还是任务管理器?

当我的进程为“时,如何运行PowerShell函数?”;“杀死”;via";“停止进程”;还是任务管理器?,powershell,Powershell,我想编写一个在本地机器上永远运行的守护进程PowerShell脚本。如果它是通过停止进程或任务管理器被终止的,我希望在终止之前先命中rest端点。是否可以处理“终止”信号 [编辑] 感谢JPBlanc的建议,我提出了以下建议: $thisproc = get-process -name powershell $other = start-job -scriptblock { while($true) { wait-process $thisproc -timeout 10

我想编写一个在本地机器上永远运行的守护进程PowerShell脚本。如果它是通过停止进程或任务管理器被终止的,我希望在终止之前先命中rest端点。是否可以处理“终止”信号

[编辑]

感谢JPBlanc的建议,我提出了以下建议:

$thisproc = get-process -name powershell
$other = start-job -scriptblock {
   while($true) {
      wait-process $thisproc -timeout 10
      if ($thisproc.HasExited) {
         echo "this process stopped" > out.txt
         exit;
      }
   }
}

while ($true) {
   wait-job $other -timeout 10
   if ($other.state -eq 'Stopped' -Or $other.state -eq 'Failed') {
      echo "other process ended"
      exit;
   }
}

如果我强制终止后台作业创建的进程,我会成功地将“其他进程已结束”打印到控制台。然而,如果我杀死了主进程,我就不会得到我想要的out.txt文件。我做错什么了吗?

在Windows系统上,处理不同的情况并不容易:

第一:如果PowerShell进程以自然方式退出、用户退出或脚本退出,甚至右角的十字,则可以使用PowerShell:

第二:如果进程被外部进程(任务管理器)终止,我知道的唯一方法就是从外部管理您的PowerShell进程。您可以使用WMI事件或以下方法执行此操作:

$a = get-process PowerShell
$a.waitforexit()
"PowerShell has stopped running."

因此,在第二种情况下,如果我先终止管理进程,然后终止守护程序脚本,我的处理程序将不会运行,对吗?在我的场景中,我想让用户很难规避。你应该把你的编辑作为答案。你的问题不会一直悬而未决。好吧,它仍然没有按照我想要的方式工作。不过我真的不需要我写的剧本了。
$a = get-process PowerShell
$a.waitforexit()
"PowerShell has stopped running."