PSSession 简介

简短说明

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

详细描述

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

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

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

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

本主题介绍如何创建、使用、获取和删除 PSSessions。 有关更多高级信息,请参阅 about_PSSession_Details

注意:PSSession 使用 Windows PowerShell 远程处理基础结构。 若要使用 PSSession,必须为本地和远程计算机配置远程处理。 有关详细信息,请参阅 about_Remote_Requirements

在 Windows Vista 及更高版本的 Windows 中,要在本地计算机上创建 PSSession,必须使用“以管理员身份运行”选项启动 Windows PowerShell。

什么是会话?

会话是运行 Windows PowerShell 的环境。

每次启动 Windows PowerShell 时,都会为您创建一个会话,您可以在该会话中运行命令。 还可以将项添加到会话(例如模块和插件),还可以创建项,例如变量、函数和别名。 这些项仅存在于会话中,并在会话结束时被删除。

您还可以在本地计算机或远程计算机上创建用户管理的会话,称为“Windows PowerShell 会话”或“PSSessions”。 与默认会话一样,可以在 PSSession 中运行命令并添加和创建项。 但是,与自动启动的会话不同,你可以控制你创建的 PSSession 会话。 可以获取、创建、配置和删除它们、断开连接并重新连接到它们,并在同一 PSSession 中运行多个命令。 在删除 PSSession 或超时之前,PSSession 将保持可用。

通常,创建 PSSession 以在远程计算机上运行一系列相关命令。 在远程计算机上创建 PSSession 时,Windows PowerShell 会建立与远程计算机的持久连接以支持会话。

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

在 Windows PowerShell 中,“当前会话”是你在其中工作的会话。 “当前会话”可以指代任何会话,包括临时会话或 PSSession。

为何使用 PSSession?

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

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

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

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

如何创建 PSSession

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

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

New-PSSession -ComputerName Server01

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

例如,以下命令在 Server01 计算机上创建新的 PSSession,并将生成的对象保存在$ps变量中。

$ps = New-PSSession -ComputerName Server01

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

若要在多台计算机上创建 PSSessions,请使用 cmdlet 的 New-PSSession 参数。 在逗号分隔的列表中键入远程计算机的名称。

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

New-PSSession -ComputerName Server01, Server02, Server03

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

如何获取 PSSession

要获取在当前会话中创建的 PSSessions,请使用 Get-PSSession cmdlet,并且不要使用 ComputerName 参数。 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 保存在变量中。 以下命令获取 PSSessions 并将其保存在 $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 在远程计算机上维护。 若要获取在特定远程计算机上创建的 PSSessions,请使用 cmdlet 的 Get-PSSession 参数。 以下命令获取你在 Server01 远程计算机上创建的 PSSessions。 这包括在当前会话中创建的 PSSession,以及本地计算机或其他计算机上的其他会话。

Get-PSSession -ComputerName Server01

在 Windows PowerShell 2.0 中,Get-PSSession 仅获取在当前会话中创建的 PSSession。 它无法获取在其他会话或其他计算机上创建的 PSSession,即使这些会话已连接到本地计算机并且正在本地计算机上运行命令。

如何在 PSSession 中运行命令

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

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

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

如何删除 PSSessions

完成 PSSession 后,请使用 Remove-PSSession cmdlet 删除 PSSession 并释放其使用的资源。

Remove-PSSession -Session $ps

Remove-PSSession -Id 1

若要从远程计算机中删除 PSSession,请使用 cmdlet 的 Remove-PSSession 参数。

Remove-PSSession -ComputerName Server01 -Id 1

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

还可以使用 cmdlet 的 New-PSSessionOption 参数设置空闲 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

详细信息

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

另请参阅

关于远程

about_Remote_Disconnected_Sessions

关于远程要求

Connect-PSSession

Disconnect-PSSession

进入 PSSession

退出 - PSSession

Get-PSSession

调用命令

新 - PSSession

Remove-PSSession