在脚本终止/窗口关闭时运行命令

时间:2016-12-17 18:41:42

标签: powershell

我将PowerShell与Livestreamer(及其新的对应Streamlink)结合使用,根据正在播放的内容从各种服务流式传输。我制作的剧本很好用;唯一的问题是当我希望停止查看流时关闭PowerShell窗口经常会让Livestreamer和我的媒体播放器都运行,迫使我以特定的顺序退出(因为脚本会以其他方式循环)。

  

关于Livestreamer的更多信息:这是一种常用的工具   与YouTube和YouTube等多种多样的流媒体服务进行通信   Twitch.tv。它捕获输出(通常是RTMP)并将其传输到a   媒体播放器而不是强迫用户依赖基于网络的   技术。我写的脚本本质上是一个"包装器"对于   Livestreamer,用于检查外部JSON以确保流   在线然后推出Livestreamer。 Livestreamer将关闭一次   流停止,由脚本捕获;然后脚本循环   回到"在线"检查并从头开始。就是这样   脚本可以继续;然而,这也意味着,尽快   Livestreamer程序关闭,脚本将其视为流   离线并再次循环回来。出于这个原因,我希望脚本能够尽可能地干扰Livestreamer的工作。 Livestreamer的手册本身表示,当程序本身退出时,它试图关闭媒体播放器,但此功能非常不可靠。

我解决此问题的最佳方法是捕获PowerShell控制台窗口的关闭并执行响应命令。我已经调查了PowerShell的trap命令,但发现它想要与Unix相比(文档很少) - 我不相信以下伪代码有任何现实生活中的对应物: / p>

trap [System.Management.WindowClosed]
     {taskkill /f /im iris.exe; exit}

我担心我的任务有点复杂,因为依赖于第三方程序而不是内部PowerShell功能以及我希望特意捕获" X"按钮而不是 CTRL + C

1 个答案:

答案 0 :(得分:3)

使用Register-EngineEvent注册shell退出时要运行的操作:

d(arg, loc=loc, scale=scale)