PowerShell中的事件处理与Tab补全增强
一、PowerShell事件处理
在PowerShell中,处理事件是一项重要的功能,但也存在一些需要注意的地方。
1. WMI事件脚本的风险
之前提到的WMI事件脚本非常有用,但也可能存在危险。如果不调用事件监视器的Stop方法,系统会不断执行查询。多次运行脚本会导致事件监视器累积,系统性能会显著下降,因为大部分CPU时间会用于执行泄漏的查询。所以,在完成操作后,一定要停止事件监视器并断开与事件的连接。
2. 检测脚本是否被用户终止
以监控文件夹文件删除操作的脚本为例,当脚本监听事件时,如果用户按下Ctrl + C,PowerShell不仅会终止脚本,还会终止整个输入的命令。例如:
PS C:\PowerShell> .\WatchDeletedFiles.ps1 ; Write-Host "Done" PS C:\PowerShell>这里甚至不会输出“Done”消息。在PowerShell 1.0中,处理Ctrl + C是一个薄弱环节。不过,PSEventing管理单元提供了两个cmdlet来帮助我们:Start - KeyHandler和Stop - KeyHandler。这两个cmdlet可以捕获各种按键,但我们只关注处理Ctrl + C。
支持Ctrl + C的关键步骤如下:
1. 使用Start - KeyHandler - CaptureCtrlC注册一个处理程序。
2. 区分Ctrl +