本地保存的脚本运行invoke-command出现Access Denied错误咨询
问题解决建议
根因说明
你遇到的是PowerShell ISE与普通PowerShell窗口的运行上下文差异、以及WinRM本地环回链路的UAC权限过滤共同导致的报错:Invoke-Command访问localhost本质走WinRM远程协议而非本地直接执行,会触发Windows默认的UAC远程令牌过滤规则,哪怕你拥有域管理员权限,未做特殊配置时也会被拦截。
具体排查与解决步骤
- 优先确认ISE运行身份
打开PowerShell ISE时必须右键选择以管理员身份运行,Windows默认启动程序时会使用普通用户权限上下文,哪怕你的账号属于Domain Admins组,未提升权限时也无法通过WinRM本地链路获得管理员权限。可分别在普通PowerShell和ISE中执行whoami /groups,对比返回的权限组列表中是否标注强制组\启用的组属性来确认权限上下文是否一致。 - 关闭UAC远程令牌过滤
该规则默认会拦截所有远程访问的本地管理员权限,哪怕是本地环回链路也会生效,执行以下命令修改注册表:
修改后重启WinRM服务生效:reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /fRestart-Service WinRM -Force - 配置本地环回信任
将localhost加入WinRM客户端信任列表,避免NTLM认证拦截:Set-Item WSMan:\localhost\Client\TrustedHosts -Value "localhost","DP01" -Concatenate - 验证PowerShell架构一致性
如果你使用的是64位服务器,需确认ISE和正常运行的普通PowerShell架构一致,SCCM相关的客户端操作模块存在架构兼容限制:- 64位ISE路径:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe - 32位ISE路径:
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell_ise.exe
- 64位ISE路径:
- 显式指定认证参数
执行Invoke-Command时显式指定凭据和Kerberos认证,避免自动认证逻辑触发权限限制:Invoke-Command -ComputerName DP01 -ScriptBlock { # 你的执行逻辑 } -Credential (Get-Credential 你的域名\你的管理员账号) -Authentication Kerberos
内容的提问来源于stack exchange,提问作者NotEnoughSteel
相关产品推荐
相关产品推荐

