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

非AD环境下通过PSSession执行高权限命令失败,求解决办法

问题原因

非AD环境下,Windows的**远程UAC过滤(Remote UAC Filtering)**会限制本地管理员账号的远程权限:当本地管理员通过网络(如WinRM/PSSession)连接时,系统会自动剥离其管理员权限令牌,仅保留标准用户权限,导致无法执行编辑注册表、配置防火墙这类高权限操作。而AD域管理员不受此限制,所以AD环境中流程能正常运行。

解决方案

1. 修改远程主机注册表,禁用远程UAC过滤

这是最彻底的解决方法,修改后本地管理员的远程会话会保留完整权限:

# 先远程执行注册表修改(需确保当前能建立基础会话)
Invoke-Command -ComputerName $server -Credential $MySecureCreds -ScriptBlock {
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" `
        -Name "LocalAccountTokenFilterPolicy" -Value 1 -Type DWord -Force
    # 重启WinRM服务让设置生效
    Restart-Service WinRM -Force
}

完成后重新创建PSSession,再执行高权限命令就能正常运行了。

2. 检查并配置WinRM基本认证(非域环境必备)

非AD环境下WinRM默认可能未开启基本认证,虽然你能建立会话,但还是建议确认:

# 检查基本认证状态
Invoke-Command -ComputerName $server -Credential $MySecureCreds -ScriptBlock {
    Get-Item WSMan:\localhost\Service\Auth\Basic
}
# 若未启用,执行以下命令开启
Invoke-Command -ComputerName $server -Credential $MySecureCreds -ScriptBlock {
    Set-Item WSMan:\localhost\Service\Auth\Basic -Value $true -Force
}

3. 远程会话内强制提权(备选方案)

如果暂时无法修改注册表,可在ScriptBlock里用Start-Process以管理员身份运行脚本:

Invoke-Command -Session $session -ScriptBlock {
    Start-Process powershell.exe -ArgumentList "-File C:\path\to\your\config-script.ps1" `
        -Verb RunAs -Wait -NoNewWindow
}

注意:这种方式在无交互场景下可能受UAC弹窗限制,优先推荐注册表方案。

重要提示
  • LocalAccountTokenFilterPolicy=1仅影响本地管理员的远程权限,不会改变本地登录时的权限。
  • 修改注册表后必须重启WinRM服务,设置才会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:27:43