about_PSSessions
简短说明
介绍 (PSSessions) 的 PowerShell 会话,并说明如何与远程计算机建立持久连接。
长说明
若要在远程计算机上运行 PowerShell 命令,可以使用 cmdlet 的 ComputerName 参数,也可以 (PSSession) 创建 PowerShell 会话,并在 PSSession 中运行命令。
创建 PSSession 时,PowerShell 会与远程计算机建立持久连接。 使用 PSSession 在远程计算机上运行一系列相关命令。 在同一 PSSession 中运行的命令可以共享数据,例如变量、别名和函数的值。
还可以在本地计算机上创建 PSSession 并在其中运行命令。 本地 PSSession 使用 PowerShell 远程处理基础结构来创建和维护 PSSession。
从 Windows PowerShell 3.0 开始,Windows 上的 PSSession 独立于创建它们的会话。 活动 PSSession 在远程计算机 (或连接) 的远程端或“服务器端”计算机上维护。 因此,在 Windows 上,你可以从远程 Windows 计算机上的 PSSession 断开连接,并在以后从同一台计算机或其他 Windows 计算机重新连接到该计算机。
本主题介绍如何创建、使用、获取和删除 PSSession。 有关更多高级信息,请参阅 about_PSSession_Details。
注意:PSSession 使用 PowerShell 远程处理基础结构。 若要使用 PSSession,必须为远程处理配置本地计算机和远程计算机。 有关详细信息,请参阅 about_Remote_Requirements。
在 Windows Vista 和更高版本的 Windows 中,若要在本地计算机上创建 PSSession,必须使用“以管理员身份运行”选项启动 PowerShell。
什么是会话?
会话是运行 PowerShell 的环境。
每次启动 PowerShell 时,都会为你创建一个会话,你可以在会话中运行命令。 还可以将项(如模块和管理单元)添加到会话,并且可以创建变量、函数和别名等项。 这些项目仅存在于会话中,并在会话结束时被删除。
还可以在本地计算机或远程计算机上创建用户管理的会话,称为“PowerShell 会话”或“PSSession”。 与默认会话一样,你可以在 PSSession 中运行命令,并添加和创建项。 但是,与自动启动的会话不同,你可以控制创建的 PSSession。 可以获取、创建、配置和删除它们,断开并重新连接到它们,并在同一 PSSession 中运行多个命令。 PSSession 在你将其删除或超时之前,它仍然可用。
通常,创建 PSSession 以在远程计算机上运行一系列相关命令。 在远程计算机上创建 PSSession 时,PowerShell 会与远程计算机建立持久连接以支持会话。
如果使用 或 Enter-PSSession
cmdlet 的 Invoke-Command
ComputerName 参数运行远程命令或启动交互式会话,PowerShell 将在远程计算机上创建一个临时会话,并在命令完成后或交互式会话结束后立即关闭会话。 无法控制这些临时会话,并且不能将它们用于多个命令或单个交互式会话。
在 PowerShell 中,“当前会话”是你正在处理的会话。 “当前会话”可以引用任何会话,包括临时会话或 PSSession。
为何使用 PSSession?
如果需要与远程计算机建立持久连接,请使用 PSSession。 使用 PSSession,可以运行一系列共享数据的命令,例如变量的值、函数的内容或别名的定义。
无需创建 PSSession 即可运行远程命令。 使用已启用远程的 cmdlet 的 ComputerName 参数在一台或多台计算机上运行单个命令或一系列不相关的命令。
使用 或 Enter-PSSession
的 Invoke-Command
ComputerName 参数时,PowerShell 会与远程计算机建立临时连接,并在命令完成后立即关闭连接。 关闭连接时,创建的任何数据元素都将丢失。
具有 ComputerName 参数的其他 cmdlet(如 Get-Eventlog
和 Get-WmiObject
)使用不同的远程处理技术来收集数据。 无创建类似于 PSSession 的持久连接。
如何Create PSSession
若要创建 PSSession,请使用 New-PSSession
cmdlet。 若要在远程计算机上创建 PSSession,请使用 cmdlet 的 New-PSSession
ComputerName 参数。
例如,以下命令在 Server01 计算机上创建新的 PSSession。
New-PSSession -ComputerName Server01
提交命令时, New-PSSession
将创建 PSSession 并返回表示 PSSession 的对象。 可以在创建 PSSession 时将对象保存在变量中,也可以在以后使用 Get-PSSession
命令获取 PSSession。
例如,以下命令在 Server01 计算机上创建新的 PSSession,并将生成的 对象保存在 $ps 变量中。
$ps = New-PSSession -ComputerName Server01
如何在多台计算机上Create PSSession
若要在多台计算机上创建 PSSession,请使用 cmdlet 的 New-PSSession
ComputerName 参数。 在逗号分隔的列表中键入远程计算机的名称。
例如,若要在 Server01、Server02 和 Server03 计算机上创建 PSSession,请键入:
New-PSSession -ComputerName Server01, Server02, Server03
New-PSSession
在每个远程计算机上创建一个 PSSession。
如何获取 PSSessions
若要获取在当前会话中创建的 PSSession,请使用 Get-PSSession
不带 ComputerName 参数的 cmdlet。 Get-PSSession
返回返回的相同类型的对象 New-PSSession
。
以下命令获取在当前会话中创建的所有 PSSession。
Get-PSSession
PSSession 的默认显示会显示其 ID 和默认显示名称。 可以在创建会话时分配备用显示名称。
Id Name ComputerName State ConfigurationName
--- ---- ------------ ----- ---------------------
1 Session1 Server01 Opened Microsoft.PowerShell
2 Session2 Server02 Opened Microsoft.PowerShell
3 Session3 Server03 Opened Microsoft.PowerShell
还可以将 PSSession 保存在变量中。 以下命令获取 PSSession 并将其保存在 $ps 123 变量中。
$ps123 = Get-PSSession
使用 PSSession cmdlet 时,可以按 ID、名称或实例 ID (GUID) 引用 PSSession。 以下命令按 ID 获取 PSSession,并将其保存在 $ps 01 变量中。
$ps01 = Get-PSSession -Id 1
从 Windows PowerShell 3.0 开始,PSSession 在远程计算机上维护。 若要获取在特定远程计算机上创建的 PSSession,请使用 cmdlet 的 Get-PSSession
ComputerName 参数。 以下命令获取在 Server01 远程计算机上创建的 PSSession。 这包括在当前会话以及本地计算机或其他计算机上的其他会话中创建的 PSSession。
Get-PSSession -ComputerName Server01
在 Windows PowerShell 2.0 中, Get-PSSession
仅获取在当前会话中创建的 PSSession。 它不会获取在其他会话或其他计算机上创建的 PSSession,即使这些会话已连接到本地计算机并在本地计算机上运行命令也是如此。
如何在 PSSession 中运行命令
若要在一个或多个 PSSession 中运行命令,请使用 Invoke-Command
cmdlet。
使用 Session 参数指定 PSSessions,使用 ScriptBlock 参数指定命令。
例如,若要在保存在 $ps 123 变量中的三个 Get-ChildItem
PSSession 中运行 (“dir”) 命令,请键入:
Invoke-Command -Session $ps123 -ScriptBlock { Get-ChildItem }
如何删除 PSSession
完成 PSSession 后,使用 Remove-PSSession
cmdlet 删除 PSSession 并释放它正在使用的资源。
Remove-PSSession -Session $ps
或
Remove-PSSession -Id 1
若要从远程计算机中删除 PSSession,请使用 cmdlet 的 Remove-PSSession
ComputerName 参数。
Remove-PSSession -ComputerName Server01 -Id 1
如果不删除 PSSession,则 PSSession 在超时之前仍可供使用。
还可以使用 cmdlet 的 New-PSSessionOption
IdleTimeout 参数设置空闲 PSSession 的过期时间。 有关详细信息,请参阅 New-PSSessionOption。
PSSession Cmdlet
有关 PSSession cmdlet 的列表,请键入:
Get-Help *-PSSession
- Connect-PSSession:将 PSSession 连接到当前会话
- Disconnect-PSSession:断开 PSSession 与当前会话的连接
- Enter-PSSession:启动交互式会话
- Exit-PSSession:结束交互式会话
- Get-PSSession:获取当前会话中的 PSSession
- New-PSSession:在本地或远程计算机上创建新的 PSSession
- Receive-PSSession:获取在断开连接的会话中运行的命令的结果
- Remove-PSSession:删除当前会话中的 PSSession
注意
仅在 Windows 上支持断开连接的会话。 Connect-PSSession
、 Disconnect-PSSession
和 Receive-PSSession
cmdlet 仅在 Windows 上可用。 有关断开连接的会话的详细信息,请参阅 about_Remote_Disconnected_Session
有关详细信息
有关 PSSession 的详细信息,请参阅 about_PSSession_Details。