about_PSSessions

简短说明

介绍 PowerShell 会话 (PSSession) 并解释如何与远程计算机建议持续连接。

长说明

若要在远程计算机上运行 PowerShell 命令,可以使用 cmdlet 的 ComputerName 参数,或者创建 Windows PowerShell 会话 (PSSession),然后在 PSSession 中运行命令。

创建 PSSession 时,PowerShell 将建立与远程计算机的持久连接。 在远程计算机上使用 PSSession 运行一系列相关命令。 在同一 PSSession 中运行的命令可以共享数据,例如变量、别名和函数的值。

还可以在本地计算机上创建 PSSession,并在其中运行命令。 本地 PSSession 使用 PowerShell 远程处理基础结构来创建和维护 PSSession。

从 Windows PowerShell 3.0 开始,Windows 上的 PSSession 独立于在其中创建的会话。 活动 PSSession 保留在远程计算机上(或连接远程端或“服务器端”的计算机)。 因此,在 Windows 上,你可以从远程 Windows 计算机上的 PSSession 断开连接,并在以后从同一台或另一台 Windows 计算机重新连接 PSSession。

本主题介绍如何创建、使用、获取和删除 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 运行一系列相关命令。 当你在远程计算机上创建 PSSession 时,PowerShell 将建立与远程计算机的持续性连接以支持会话。

如果使用 Invoke-CommandEnter-PSSession cmdlet 的 ComputerName 参数来运行远程命令或启动交互式会话,则 PowerShell 会在远程计算机上创建一个临时会话,并在命令完成或交互式会话结束后立即关闭会话。 无法控制这些临时会话,不能将它们用于多个命令或单个交互式会话。

在 PowerShell 中,“当前会话”是指正在使用的会话。 “当前会话”可以引用任何会话,包括临时会话或 PSSession。

为什么使用 PSSession?

当需要持续连接远程计算机时,可以使用 PSSession。 使用 PSSession,可以运行一系列共享数据的命令,例如变量的值、函数的内容或别名的定义。

无需创建 PSSession 即可运行远程命令。 使用已启用远程 cmdlet 的 ComputerName 参数在一个或多个计算机上运行单个命令或一系列不相关的命令。

使用 Invoke-CommandEnter-PSSessionComputerName 参数时,PowerShell 会与远程计算机建立临时连接,并在命令完成后立即关闭连接。 连接关闭时,创建的任何数据元素都将丢失。

具有“ComputerName”参数的其他 cmdlet(如 Get-EventlogGet-WmiObject)使用不同的远程处理技术来收集数据。 没有一个会像 PSSession 一样创建持续连接。

如何创建 PSSession

若要创建 PSSession,请使用 New-PSSession cmdlet。 若要在远程计算机上创建 PSSession,请使用 New-PSSession cmdlet 的“ComputerName”参数。

作为示例,以下命令在 Server01 计算机上创建新的 PSSession。

New-PSSession -ComputerName Server01

提交命令时,New-PSSession 会创建 PSSession 并返回一个表示 PSSession 的对象。 创建 PSSession 时,可以将对象保存在变量中,也可以使用 Get-PSSession 命令在以后获取 PSSession。

例如,以下命令在 Server01 计算机上创建 PSSession 并将结果对象保存在 $s 变量中。

$ps = New-PSSession -ComputerName Server01

如何在多台计算机上创建 PSSession

若要在多台计算机上创建 PSSession,请使用 New-PSSession cmdlet 的“ComputerName”参数。 以逗号分隔列表的形式输入远程计算机的名称。

例如,若要在 Server01、Server02 和 Server03 计算机上创建 PSSession,请键入:

New-PSSession -ComputerName Server01, Server02, Server03

New-PSSession 在每个远程计算机上创建一个 PSSession。

如何获取 PSSession

若要获取在当前会话中创建的 PSSession,使用不具有“ComputerName”参数的 Get-PSSession 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,请使用 Get-PSSessioncmdlet 的“ComputerName”参数。 以下命令获取 Server01 远程计算机上你创建的 PSSession。 这包括在当前会话中创建的 PSSession,以及本地计算机或其他计算机上的其他会话。

Get-PSSession -ComputerName Server01

在 Windows PowerShell 2.0 中,Get-PSSession 仅获取在当前会话中创建的所有 PSSession。 此命令不会获取在其他会话中或其他计算机上创建的会话,即使会话连接到已连接并且正在本地计算机上运行命令也是如此。

如何在 PSSession 中运行命令

若要在一个或多个 PSSession 中运行命令,请使用 Invoke-Command cmdlet。 使用 Session 参数指定 PSSession 和 ScriptBlock 参数来指定命令。

例如,若要在保存在 $ps 123 变量中的每个 PSSession 中运行 Get-ChildItem ("dir") 命令,请键入:

Invoke-Command -Session $ps123 -ScriptBlock { Get-ChildItem }

如何删除 PSSession

处理完 PSSession 后,使用 Remove-PSSession cmdlet 删除 PSSession 并释放其正在使用的资源。

Remove-PSSession -Session $ps

Remove-PSSession -Id 1

若要在远程计算机上删除 PSSession,请使用 Remove-PSSession cmdlet 的“ComputerName”参数。

Remove-PSSession -ComputerName Server01 -Id 1

如果不删除 PSSession,则 PSSession 将保持可用,直到超时。

还可以使用 New-PSSessionOption cmdlet 的“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:获取在断开连接的会话中运行的命令的结果
  • move-PSSession:删除当前会话中的所有 PSSession

注意

断开连接的会话仅在 Windows 上受支持。 Connect-PSSessionDisconnect-PSSessionReceive-PSSession cmdlets 仅在 Windows 上可用。 有关断开连接的会话的详细信息,请参阅 about_Remote_Disconnected_Sessions

有关详细信息

有关 PSSession 的详细信息,请参阅 about_PSSession_Details

请参阅