为什么会发生
- Group Policy Bloat: The client machine belongs to an Active Directory domain with heavily customized or deeply nested Group Policy Objects (GPOs).
- MaxEnvelopeSizeKB Limit: WinRM has a default data transfer size limit (typically 500 KB). When a user connects, the target machine evaluates the user's group memberships and policies. If this security context data is too large, the WinRM service fails to parse the WS-Policy 它们的结构.
- MaxTokenSize Issue: 由于用户属于大量的Active Directory组,Kerberos身份验证令牌太大.
逐步修复问题
从最快的本地修复到域级修复顺序遵循这些解决方案.
解决方案1:增加 WinRM 的最大封面大小
您需要告诉 WinRM 服务允许更大的数据包,以便它可以处理复杂的策略结构.
- 按下 Start Menu, 类型
cmd,右键按下 Command Prompt,并选择 Run as administrator. - 键入下面的命令来检查您当前的信封大小:
winrm get winrm/config - 找一个
MaxEnvelopeSizeKB值 (默认值通常是500) 没有. - 运行这个命令将限制提高到
8000在源机和目的机上 KB (8 MB):winrm set winrm/config @{MaxEnvelopeSizeKB="8000"} - 重新启动 WinRM 服务以应用更改:
net stop winrm && net start winrm
解决方案2:通过Windows注册表增加MaxTokenSize
如果运行命令的用户帐户属于许多安全组,则Kerberos代币变得太大,WinRM无法处理.
- 按下
Windows Key + R, 类型regedit,并击中 Enter 打开注册表编辑器. - 导航到以下路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters(注:如果Parameters键不存在,右键Kerberos选择New > Key给它一个名字.Parameters) - 在右边窗口内右键单击,选择
New > DWORD (32-bit) Value. - 给出新的值.
MaxTokenSize. - 双击
MaxTokenSize换一个 Base 为了 Decimal,并设置 Value data 为了65535. - 点击 OK 并重新启动您的计算机.
解决方案3:使用本地帐户绕过域GPO复杂性
如果您正在执行基本的管理任务并且无法更改域范围内的GPOs,使用本地管理员帐户而不是域帐户完全绕过复杂的WS-Policy处理.
- 打开你的PowerShell控制台.
- 修改您的连接字符串以明确传递目标计算机的本地管理员凭证:
$cred = Get-Credential Enter-PSSession -ComputerName "Target_IP_Or_Name" -Credential $cred -Authentication Negotiate - 在格式中提供用户名:
TargetComputerName\LocalUsername.
解决方案4:清理Active Directory组策略 (对于域名管理员)
如果您是IT管理员,并且多个用户面临这个问题,则根本原因是GPO碎片化.
- 打开门 Group Policy Management Console (GPMC) 在您的域控制器上.
- 对受影响的组织单位 (OU) 实施的政策进行审计.
- 整合多个小GPO成单个,结构良好的GPO.
- 删除过时或冗余的策略定义,以缩小向WinRM交付的WS-Policy有效负载.
可能有一些错误.. Learn Microsoft