powershell远程会话管理核心是显式创建、复用、断开与清理pssession:用new-pssession赋值变量以复用;invoke-command可跨命令共享变量;disconnect-pssession支持断连续跑;须及时remove-pssession释放资源。
powershell 远程执行中,管理远程会话(pssession)的持久连接资源,核心在于**显式创建、复用、断开与清理**,而不是依赖一次性命令自动建立又销毁的临时连接。关键不是“不断开”,而是“有控制地保持、暂停或释放”。
创建并保存 PSSession 对象
使用 New-PSSession 建立连接,并立即将其赋值给变量,这是复用的前提:
-
单台计算机:
$s = New-PSSession -ComputerName Server01 -
多台计算机:
$s = New-PSSession -ComputerName Server01, Server02 - 支持凭据、端口、SSL 等参数,如
-Credential $cred -UseSSL -Port 5986 - 会话对象保留在内存中,可随时被
Invoke-Command -Session $s或Enter-PSSession -Session $s复用
复用会话执行多个关联命令
同一 PSSession 内,变量、函数、模块加载状态可跨命令保留,适合需要上下文延续的操作:
将提醒同步至 Windows/Outlook 日历。用户提及「提醒我」「设置提醒」「加到日历」「同步到日历」「日程」「calendar」「日历」时触发。支持Microsoft Graph API 设备代码流认证,无需 Web 服务器,直接写入用户 Outlook 日历。
- 在会话中先获取进程列表并存为变量:
Invoke-Command -Session $s -ScriptBlock {$procs = Get-Process} - 后续命令可直接引用该变量:
Invoke-Command -Session $s -ScriptBlock {$procs | Where-Object CPU -gt 100} - 注意:这些变量只存在于远程会话中,本地 PowerShell 不可见
主动断开与重新连接(适用于长时间任务)
从 PowerShell 3.0 起,支持将 PSSession “断开连接”(Disconnect),让远程端继续运行,本地可关闭终端或切换设备:
- 断开:
Disconnect-PSSession -Session $s - 查看已断开会话:
Get-PSSession -ComputerName Server01(显示状态为 Disconnected) - 重新连接:
Connect-PSSession -ComputerName Server01或Connect-PSSession -Id 3 - 断开后会话仍驻留在远程计算机上,受
WSMan:\localhost\Shell中的空闲超时等策略约束
及时清理不再使用的会话
未清理的 PSSession 会持续占用远程 WinRM 资源(如会话数、内存),可能触发配额限制:
- 查看当前所有会话:
Get-PSSession - 关闭指定会话:
Remove-PSSession -Session $s - 批量清除所有会话:
Get-PSSession | Remove-PSSession - 远程端配置可通过
dir WSMan:\localhost\Shell查看,如MaxIdleTimeoutms(默认 7200000 ms = 2 小时)、MaxConcurrentUsers等,必要时可用Set-Item修改










