为何通过PowerShell远程会话运行AccessChk检查系统权限时遭拒绝?
使用SysInternals AccessChk远程查询用户权限时遇到拒绝访问错误
问题场景
- 本地以管理员身份登录,将SysInternals工具复制到本地
LocalAppData文件夹后,运行以下PowerShell代码可正常获取特定用户的系统安全权限:
[System.IO.FileInfo]$LocalApplicationDataFolder = [System.Environment]::GetFolderPath( [System.Environment+SpecialFolder]::LocalApplicationData ) & "$LocalApplicationDataFolder\SysInternals\accesschk64.exe" /accepteula -nobanner -u domain\plainuser -a *
- 执行
Enter-PsSession -ComputerName host1进入PowerShell远程会话后,运行相同代码,收到错误提示:
枚举账户权限时出错:
拒绝访问。
解决思路及方案
1. 修复远程会话权限受限问题
PowerShell远程默认使用受UAC限制的管理员令牌,即使以管理员身份连接,也无法获取枚举账户权限所需的完整权限。可尝试:
- 连接远程会话时启用网络访问权限:
Enter-PSSession -ComputerName host1 -EnableNetworkAccess - 在远程会话中以高权限启动AccessChk:
Start-Process -FilePath "$LocalApplicationDataFolder\SysInternals\accesschk64.exe" ` -ArgumentList "/accepteula -nobanner -u domain\plainuser -a *" ` -NoNewWindow -Wait -PassThru
2. 确认工具已部署到远程主机
进入远程会话后,LocalApplicationData指向的是远程主机的对应文件夹,若仅将工具复制到本地,远程主机上不存在该工具可能引发权限相关隐式错误。先将工具复制到远程主机:
# 本地执行,复制工具到远程主机指定路径 $remoteUser = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName host1).UserName $remotePath = "\\host1\C$\Users\$remoteUser\AppData\Local\SysInternals\" New-Item -Path $remotePath -ItemType Directory -Force Copy-Item -Path "$env:LOCALAPPDATA\SysInternals\accesschk64.exe" -Destination $remotePath
3. 检查远程主机安全策略
确认远程主机的本地安全策略中,你的账户拥有以下权限:
- 从网络访问此计算机:确保账户在该权限列表内
- 管理审核和安全日志:枚举账户权限可能需要此权限
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

