You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无管理员权限下,如何订阅Windows新进程启动事件?

无需管理员权限的进程启动事件订阅方法

当然有无需管理员权限就能订阅的进程启动事件方案,下面是两种实用的实现方式:

1. WMI临时事件监听(基于Win32_Process)

利用WMI的临时实例创建事件,不需要管理员权限,只能监听当前用户有权访问的进程,足够覆盖日常用户上下文场景。示例代码:

# 构造监听进程启动的WMI查询
$query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'"
# 注册事件并定义触发动作
Register-CimIndicationEvent -Query $query -Action {
    $proc = $event.SourceEventArgs.NewEvent.TargetInstance
    Write-Host "新进程:$($proc.Name) | PID: $($proc.ProcessId)"
}

注:这种方式无法捕获系统级或其他用户的进程,但对当前用户启动的进程监听足够精准。

2. .NET Process类轮询优化方案

虽然是轮询,但通过缩短扫描间隔可以降低短生命周期进程的遗漏概率,且无需管理员权限:

# 记录初始进程ID列表
$existingPids = (Get-Process).Id

while ($true) {
    $currentPids = (Get-Process).Id
    # 找出新增的进程ID
    $newPids = Compare-Object $existingPids $currentPids | Where-Object SideIndicator -eq '=>' | Select-Object -ExpandProperty InputObject
    
    foreach ($pid in $newPids) {
        try {
            $proc = Get-Process -Id $pid -ErrorAction Stop
            Write-Host "新进程启动:$($proc.ProcessName) | PID: $pid"
        }
        catch {
            # 跳过无权限访问的进程
            continue
        }
    }
    
    $existingPids = $currentPids
    Start-Sleep -Milliseconds 100
}

如果需要关联父进程,在获取到进程后可以通过$proc.Parent.Id(PowerShell 5.1+支持)或者查询Win32_Process的ParentProcessId来匹配,但同样只能访问当前用户权限内的进程关系。

重要提示

无管理员权限时,所有方案都只能监控当前用户有权限访问的进程,系统核心进程、其他用户的进程无法被捕获,这是Windows权限模型的限制。

内容的提问来源于stack exchange,提问作者alx9r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:47:09