PowerShell远程会话资源配额通过会话配置实现,包括MaximumReceivedDataSizePerCommandMB、MaximumReceivedObjectSizeMB、IdleTimeoutms等参数,由WinRM强制执行,需预先配置并重启服务。
powershell 远程会话的资源配额限制,主要通过会话配置(session configuration)来实现,而不是直接对某个远程连接“限 cpu”或“限内存”。这些配额由管理员在本地计算机上预设,作用于所有使用该配置建立的远程会话(包括 new-pssession、invoke-command -computername 等场景)。关键在于:配额是会话级的,不是进程级的;它由 winrm 服务强制执行,无需在远程端额外安装工具。
会话配置中可设置的核心资源配额
会话配置支持以下与资源控制直接相关的参数(通过 Set-PSSessionConfiguration 或配置文件定义):
MaximumReceivedDataSizePerCommandMB
限制单条命令接收的数据大小(单位 MB),防止大对象传输耗尽内存。MaximumReceivedObjectSizeMB
限制单个序列化对象的最大尺寸(如Get-Process | Export-Clixml返回的对象),默认为 10 MB。IdleTimeoutms
会话空闲超时时间(毫秒),超时后自动断开,释放资源。例如7200000(2 小时)。OutputBufferingMode
可设为Block(阻塞式缓冲,防爆内存)或Drop(丢弃新输出,保会话存活)。MaxConcurrentCommandsPerShell和MaxConcurrentUsers
控制单个会话内并发命令数、以及同一配置允许的总并发用户数。EnableShellStream(PowerShell 7.2+)
启用流式响应可降低内存峰值,适合长时间运行、分批输出的脚本。
✅ 提示:这些值不能在已建立的会话中动态修改,必须提前配置并重启 WinRM 或重新注册配置。
配置步骤(以管理员身份运行 PowerShell)
1. 查看当前会话配置
Get-PSSessionConfiguration
重点关注 Microsoft.PowerShell(默认配置)。
2. 复制并修改配置(推荐方式)
# 导出现有配置为文件
Export-PSSessionConfiguration -Name Microsoft.PowerShell -FilePath .\restricted.pssc
# 编辑 .\restricted.pssc,添加或修改如下字段:
@{
SchemaVersion = '2.0.0.0'
GUID = 'a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8'
SessionType = 'Default'
MaximumReceivedDataSizePerCommandMB = 5
MaximumReceivedObjectSizeMB = 3
IdleTimeoutms = 3600000 # 1小时
OutputBufferingMode = 'Drop'
MaxConcurrentCommandsPerShell = 3
}3. 注册新配置
Register-PSSessionConfiguration -Path .\restricted.pssc -Name RestrictedPowerShell -Force
4. 分配权限(仅允许指定用户使用)
Set-PSSessionConfiguration -Name RestrictedPowerShell -ShowSecurityDescriptorUI
在弹出窗口中添加目标用户/组,并勾选“Execute”权限。
5. 使用该配置建立远程会话
New-PSSession -ComputerName Server01 -ConfigurationName RestrictedPowerShell
# 或
Invoke-Command -ComputerName Server01 -ConfigurationName RestrictedPowerShell -ScriptBlock { Get-Process }补充说明:不适用于“ComputerName 参数直连”的情况?
注意:像 Get-Service -ComputerName Server01 这类使用 ComputerName 参数的 cmdlet,不经过会话配置,而是走 DCOM 或 RPC 协议,因此不受上述配额限制。这类命令的资源消耗由目标服务自身控制(如 WMI 内存限制),需另行配置(如 WMI 命名空间配额)。
实际效果示例
若某远程脚本尝试返回一个 15 MB 的 ConvertTo-Json 结果,而配置中设了 MaximumReceivedObjectSizeMB = 3,则会话立即报错:
The deserialized object size exceeded the configured limit.
这比让 PowerShell 进程 OOM 更安全、更可控。
不复杂但容易忽略


















