如何在Windows Server 2019中允许非管理员用户运行Get-CimInstance命令
非管理员执行Get-CimInstance访问Win32_Process权限错误解决及子进程树获取方案
原命令权限修复操作步骤
你可以通过修改WMI命名空间权限给非管理员用户授权,无需赋予管理员全权限,操作路径如下:
- 登录目标Windows Server 2019实例,按下Win+R组合键,输入
wmimgmt.msc后回车打开WMI管理控制台 - 右键点击左侧导航栏的「WMI控制(本地)」,选择属性,切换到安全选项卡
- 展开节点列表找到
root\cimv2,选中该节点后点击下方的安全按钮 - 在弹出的权限配置窗口中,点击添加,输入需要授权的非管理员用户或对应用户组,点击确认
- 给刚添加的主体勾选以下权限的允许复选框:
- 启用账户
- 远程启用
- 读取权限
- 点击高级按钮,选中刚添加的权限主体,点击编辑
- 将「应用于」选项修改为「这个命名空间和子命名空间」,依次确认保存所有打开的配置窗口
- 以管理员身份运行PowerShell执行以下命令重启WMI服务使配置生效:
Restart-Service winmgmt -Force
配置完成后非管理员用户即可正常执行原Get-CimInstance Win32_Process命令。
子进程树获取替代方案
如果你不想修改WMI权限,可使用以下原生PowerShell脚本实现指定PID子进程树查询,无需额外权限即可获取当前用户可见的进程树:
function Get-ProcessChildTree { param( [Parameter(Mandatory = $true)] [int]$TargetPID ) # 优先用Get-Process获取基础进程信息 $allProcess = Get-Process | Select-Object Id, Name, @{ Name = "ParentProcessId" Expression = { try { $_.Parent.Id } catch { $null } } } $childProcess = $allProcess | Where-Object { $_.ParentProcessId -eq $TargetPID } foreach ($proc in $childProcess) { $proc Get-ProcessChildTree -TargetPID $proc.Id } } # 调用示例:查询PID为1024的子进程树 Get-ProcessChildTree -TargetPID 1024
如果需要查询系统所有进程的子树,还是需要先完成上文中的WMI权限配置。
内容的提问来源于stack exchange,提问作者Kevin Leutzinger
相关产品推荐
相关产品推荐

