如何通过PowerShell远程重置WinRM服务并安全重注册同名PS会话?
无需重启WinRM重注册同名PsSessionConfiguration的方案
核心结论
没有无需重启WinRM服务就能安全注销并重新注册同名PowerShell会话配置(PsSessionConfiguration)的官方方法。注销同名配置后,WinRM服务内存中会保留旧配置的缓存,不重启的话新配置无法正常生效,甚至引发会话异常。
可靠替代方案:远程计划任务执行
由于直接远程执行会因WinRM重启断开连接,使用Windows计划任务是最稳妥的方式:
- 远程创建一个以系统账户运行的计划任务,包含注销旧配置、重启WinRM、注册新配置的完整逻辑
- 任务设置为延迟几秒后触发,启动任务后本地会话可直接断开,避免连接中断
- 后续可通过查询任务状态或检查会话配置验证执行结果
示例远程创建计划任务的代码:
Invoke-Command 'RemoteServer' { # 定义任务执行的PowerShell命令,包含完整操作逻辑 $command = @" Unregister-PsSessionConfiguration -Name 'MySession' -Force Restart-Service WinRM -Force Register-PsSessionConfiguration -Name 'MySession' -SecurityDescriptorSddl 'O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;SY)' "@ $taskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-Command $command" $taskTrigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddSeconds(10) $taskSettings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries # 注册并启动任务,使用系统账户确保权限足够 Register-ScheduledTask -TaskName "ReRegister-MySession" -Action $taskAction -Trigger $taskTrigger -Settings $taskSettings -User "NT AUTHORITY\SYSTEM" -Force Start-ScheduledTask -TaskName "ReRegister-MySession" }
关键安全提示
注册PsSessionConfiguration时,必须强制使用-SecurityDescriptorSddl参数,通过SDDL字符串严格限制访问权限,防止未授权的管理员或用户随意访问该会话配置。示例中的SDDL仅允许内置管理员组和系统账户拥有完全控制权,可根据实际需求调整规则。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

