这是我以前问过的一个问题:How do I wait for an executable to open before continuing the code in PowerShell?
我找到了一个可行的解决方案,但它需要管理权限。我想知道有没有办法在没有管理许可的情况下做到这一点。.
我试图完成的主要任务是替换Register-CimIndicationEvent
,但不需要任何管理权限。
如果你有任何想法来做这件事,我将非常感谢!
我已经尝试使用Register-CimIndicationEvent -ClassName 'Win32_ProcessStartTrace' -SourceIdentifier "ProcessStarted"
,但它需要管理权限才能工作。
我也试过:
$Q = "Select * from win32_ProcessStartTrace where processname = 'Process.exe'"
Register-CimIndicationEvent -Query $q -SourceIdentifier Q -Action {Stop-Process $event.SourceEventArgs.newevent.processID}
上面的代码假定每次打开一个进程时都会关闭它,这是我的主要目标。如果您能帮助我在没有管理权限的情况下做这样的事情,我将不胜感激。
1条答案
按热度按时间bpzcxfmw1#
实际上,监视
Win32_ProcessStartTrace
CIM/WMI事件需要 elevation(以admin身份运行)-Register-CimIndicationEvent
在尝试从非提升会话注册事件处理程序时报告Access denied
错误。Win32_ProcessStartTrace
示例代码(因此需要提升)。作为非提升 * 代码的次优解决方案,您可以实现一个(无限)* 轮询循环 ,它根据进程的开始时间定期监视所有进程列表中的新添加*,但请注意以下几点:
Start-Sleep
进行休眠Stop-Process
杀死新进程,那么您唯一被允许杀死的进程是您自己的、未提升的进程。或者使用
__InstanceCreationEvent
CIM/WMI类: