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-CommandComputerName 参数运行远程命令或启动交互式会话,PowerShell 将在远程计算机上创建一个临时会话,并在命令完成后或交互式会话结束后立即关闭会话。 无法控制这些临时会话,并且不能将它们用于多个命令或单个交互式会话。

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

为何使用 PSSession?

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

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

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

具有 ComputerName 参数的其他 cmdlet(如 Get-EventlogGet-WmiObject)使用不同的远程处理技术来收集数据。 无创建类似于 PSSession 的持久连接。

如何Create PSSession

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

例如,以下命令在 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-PSSessionComputerName 参数。 在逗号分隔的列表中键入远程计算机的名称。

例如,若要在 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-PSSessionComputerName 参数。 以下命令获取在 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-PSSessionComputerName 参数。

Remove-PSSession -ComputerName Server01 -Id 1

如果不删除 PSSession,则 PSSession 在超时之前仍可供使用。

还可以使用 cmdlet 的 New-PSSessionOptionIdleTimeout 参数设置空闲 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-PSSessionDisconnect-PSSessionReceive-PSSession cmdlet 仅在 Windows 上可用。 有关断开连接的会话的详细信息,请参阅 about_Remote_Disconnected_Session

有关详细信息

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

请参阅