new-pssession 创建持久会话的核心是建完不关、留着复用,与临时连接的关键区别在于会话保留在远程计算机上,支持变量、函数和执行状态跨命令延续。
直接用 new-pssession 创建持久会话,核心是“建完不关、留着复用”。它和临时连接(比如直接用 invoke-command -computername)的关键区别在于:会话保留在远程计算机上,变量、函数、执行状态都能跨命令延续。
基础用法:创建单台或多台机器的会话
最常用的是按计算机名创建:
-
$s = New-PSSession -ComputerName Server01—— 创建后存进变量,方便后续调用 -
$s = New-PSSession -ComputerName Server01, Server02—— 一次建多个,返回多个会话对象数组 - 支持凭据、端口、SSL 等参数:
New-PSSession -ComputerName Server01 -Credential $cred -Port 5986 -UseSSL
关键细节:会话生命周期与超时控制
会话不是永久存在的,远程端有空闲超时(默认约 10–15 分钟),超时后会话被关闭,无法恢复。要延长可用时间,需显式设置:
- 用
New-PSSessionOption自定义超时:$opt = New-PSSessionOption -IdleTimeout 3600000(单位毫秒,这里设为 1 小时) - 再传给
New-PSSession -SessionOption $opt - 注意:最终生效值受远程 WinRM 服务配置限制,如
winrm get winrm/config中的MaxTimeoutms
后续怎么用这些会话?
建好只是第一步,真正发挥持久性优势靠的是复用:
- 批量运行命令:
Invoke-Command -Session $s -ScriptBlock { Get-Process | Where CPU -gt 100 } - 共享变量(在会话内有效):
Invoke-Command -Session $s -ScriptBlock { $data = Get-Service },之后再跑Invoke-Command -Session $s -ScriptBlock { $data | Where Status -eq 'Running' } - 交互式进入:
Enter-PSSession -Session $s,退出用Exit-PSSession(不会销毁会话)
安全与连接方式扩展
除传统 WinRM,New-PSSession 还支持其他协议:
- HTTPS 连接:
New-PSSession -ConnectionUri https://Server01:5986/wsman -UseSSL - SSH 远程(需目标启 SSH 服务):
New-PSSession -HostName server01 -UserName admin -KeyFilePath ~/.ssh/id_rsa - 容器或虚拟机:
New-PSSession -VMName "Win10-Test"或-ContainerId "abc123"











