about_PSSession_Details

简短说明

提供有关 PowerShell 会话及其在远程命令中扮演的角色的详细信息。

长说明

会话是运行 PowerShell 的环境。 每当启动 PowerShell 时,会为你创建一个会话。 可以在计算机或其他计算机上创建名为“PowerShell 会话”或“PSSessions”的其他会话。

与 PowerShell 为你创建的会话不同,你可以控制和管理你创建的 PSSession。

PSSession 在远程计算中发挥着重要作用。 创建连接到远程计算机的 PSSession 时,PowerShell 会与远程计算机建立持久连接以支持 PSSession。 可以使用 PSSession 运行一系列共享数据的命令、函数和脚本。

本主题提供有关 PowerShell 中的会话和 PSSession 的详细信息。 有关可以使用会话执行的任务的基本信息,请参阅 about_PSSessions

关于会话

从技术上讲,会话是运行 PowerShell 的执行环境。 每个会话包括一个 System.Management.Automation 引擎实例和一个运行 PowerShell 的主机程序。 主机可以是熟悉的 PowerShell 控制台或运行命令(例如 Cmd.exe)的其他程序,也可以是为托管 PowerShell 而构建的程序,例如Windows PowerShell集成脚本环境 (ISE) 。 从 Windows 的角度来看,会话是目标计算机上的 Windows 进程。

每个会话都是独立配置的。 它包括自己的属性、自己的执行策略和自己的配置文件。 创建会话时存在的环境将在其生存期内保留,即使更改计算机上的环境也是如此。 所有会话都是在全局范围内创建的,甚至是在脚本中创建的会话。

一次只能在会话中 (或命令管道) 运行一个命令。 第二个命令 (一次同步运行一个命令,) 等待长达四分钟才能完成第一个命令。 第二个命令异步运行 (同时) 失败。

关于 PSSessions

每次启动 PowerShell 时都会创建一个会话。 并且,PowerShell 会创建临时会话来运行单个命令。 但是,还可以创建 (称为“PowerShell 会话”或“PSSessions”) 由你控制和管理的会话。

PSSession 对远程命令至关重要。 如果使用 或 Enter-PSSession cmdlet 的 Invoke-CommandComputerName 参数,PowerShell 会建立一个临时会话来运行命令,然后在命令或交互式会话完成后立即关闭会话。

但是,如果使用 New-PSSession cmdlet 创建 PSSession,PowerShell 会在远程计算机上建立一个永久会话,你可以在其中运行多个命令或交互式会话。 创建的 PSSession 将保持打开状态并可供使用,直到删除它们或关闭创建它们的会话为止。

在远程计算机上创建 PSSession 时,系统会在远程计算机上创建 PowerShell 进程,并建立从本地计算机到远程计算机上的进程的连接。 在本地计算机上创建 PSSession 时,将在本地计算机上创建新进程和连接。

何时需要 PSSession?

Invoke-CommandEnter-PSSession cmdlet 同时具有 ComputerNameSession 参数。 可以使用任一方式运行远程命令。

使用 ComputerName 参数在一台或多台计算机上运行单个命令或一系列不相关的命令。

若要运行共享数据的命令,需要与远程计算机建立持久连接。 在这种情况下,请创建 PSSession,然后使用 Session 参数在 PSSession 中运行命令。

从远程计算机(如 Get-ProcessGet-ServiceGet-EventLogGet-WmiObject )获取数据的其他许多 cmdlet 仅具有 ComputerName 参数。 他们使用 PowerShell 远程处理以外的技术远程收集数据。 这些 cmdlet 没有 Session 参数,但可以使用 Invoke-Command cmdlet 在 PSSession 中运行这些命令。

如何Create PSSession?

若要创建 PSSession,请使用 New-PSSession cmdlet。 可以使用 New-PSSession 在本地或远程计算机上创建 PSSession。

是否可以在任何计算机上Create PSSession?

若要创建连接到远程计算机的 PSSession,必须在 PowerShell 中将计算机配置为远程处理。 当前用户必须是远程计算机上的管理员组的成员,或者当前用户必须能够提供管理员组成员的凭据。 有关详细信息,请参阅 about_Remote_Requirements

是否可以在其他会话中看到我的 PSSession?

从 Windows PowerShell 3.0 开始,cmdlet 的 Get-PSSessionComputerName 参数获取你在指定的远程计算机上创建的 PSSession。

活动 PSSession 在远程计算机上维护, (连接的“服务器端”) ,你可以从任何计算机上的任何会话获取它们。

例如,如果创建从 Server01 计算机到 Server02 计算机的 PSSession,然后切换到 Server03 计算机,则可以使用如下所示的命令获取会话。

Get-PSSession -ComputerName Server02

即使与会话断开连接,该会话也会在远程计算机上进行维护,直到你将其删除或超时。

在 Windows PowerShell 2.0 中,只能获取在当前会话中创建的 PSSession。 无法获取在其他会话中创建的 PSSession。

有关详细信息,请参阅 Get-PSSession

我是否可以查看其他人在我的计算机上创建的 PSSession?

仅当可以提供创建 PSSession 的用户的凭据或 PSSession 使用的会话配置包括 RunAs 凭据时,才能获取和管理其他人创建的 PSSession。 否则,可以仅获取、连接、使用和管理创建的 PSSession。

能否从其他计算机连接到 PSSession?

从 Windows PowerShell 3.0 开始,Windows 计算机上的 PSSession 独立于创建它们的会话。 活动 PSSession 在远程或连接的“服务器端”计算机上维护。

在 Windows 计算机上,可以使用 Disconnect-PSSession cmdlet 从 PSSession 断开连接。 PSSession 与本地会话断开连接,但在远程计算机上维护。 命令继续在断开连接的 PSSession 中运行。 可以在不中断 PSSession 的情况下关闭 PowerShell 并关闭原始计算机。

然后,即使几小时后,你也可以使用 Get-PSSession cmdlet 获取 PSSession,并使用 Connect-PSSession cmdlet 从其他 Windows 计算机上的新会话连接到 PSSession。

有关详细信息,请参阅 about_Remote_Disconnected_Sessions

如果计算机停止,我的 PSSession 会发生什么情况?

断开连接的 PSSession 独立于创建它们的会话。 如果断开 PSSession 的连接,然后关闭原始计算机,则会在远程计算机上维护 PSSession。

此外,PowerShell 会尝试恢复意外断开连接的活动 PSSession,例如计算机重新启动、暂时停电或网络中断。 如果原始会话仍然可用,PowerShell 会尝试维护或恢复 PSSession 到“已打开”状态,或者尝试将 PSSession 恢复到断开连接状态(如果不是)。

“活动”PSSession 是运行命令的 PSSession。 如果 PSSession 已连接 (未断开连接) 并且命令在连接会话关闭时在 PSSession 中运行,则 PowerShell 会尝试在远程计算机上维护 PSSession。 但是,如果 PSSession 中未运行任何命令,则 PowerShell 在连接的会话关闭时关闭 PSSession。

有关详细信息,请参阅 about_Remote_Disconnected_Sessions

是否可以在 PSSession 中运行后台作业?

是的。 后台作业是在后台异步运行的命令,无需与当前会话交互。 提交命令以启动作业时,该命令将返回一个作业对象,但该作业将继续在后台运行,直到完成。

若要在本地计算机上启动后台作业,请使用 Start-Job 命令。 可以使用 ComputerName 参数) 在临时连接 (运行后台作业,也可以使用 Session 参数) 在 PSSession (运行后台作业。

若要在远程计算机上启动后台作业,请使用 cmdlet Invoke-Command 及其 AsJob 参数,或使用 Invoke-Command cmdlet 在远程计算机上运行 Start-Job 命令。 使用 AsJob 参数时,可以使用 ComputerNameSession 参数。

使用 Invoke-Command 运行 Start-Job 命令时,必须在 PSSession 中运行命令。 如果使用 ComputerName 参数,则 PowerShell 将在作业对象返回时结束连接,并且作业中断。

有关详细信息,请参阅 about_Jobs

是否可以运行交互式会话?

是的。 若要启动与远程计算机的交互式会话,请使用 Enter-PSSession cmdlet。 在交互式会话中,键入的命令在远程计算机上运行,就像直接在远程计算机上键入一样。

可以使用 ComputerName 参数) 在临时会话 (中运行交互式会话,也可以使用 Session 参数) 在 PSSession (运行交互式会话。 如果使用 PSSession,PSSession 将保留先前命令中的数据,PSSession 将保留交互式会话期间生成的任何数据,以供后续命令使用。

结束交互式会话时,PSSession 将保持打开状态并可供使用。

有关详细信息,请参阅 Enter-PSSessionExit-PSSession

是否必须删除 PSSession?

是的。 PSSession 是一个进程,它是一个独立环境,即使在不使用内存和其他资源时也使用它。 完成 PSSession 后,请将其删除。 如果创建多个 PSSession,请关闭未使用的 PSSession,并仅保留当前正在使用的 PSSession。

若要删除 PSSession,请使用 Remove-PSSession cmdlet。 它会删除 PSSession 并释放它们使用的所有资源。

还可以使用 的 IdleTimeOut 参数 New-PSSessionOption 在指定的间隔后关闭空闲 PSSession。 有关详细信息,请参阅 New-PSSessionOption

如果将 PSSession 对象保存在变量中,然后删除 PSSession 或使其超时,则该变量仍包含 PSSession 对象,但 PSSession 未处于活动状态,无法使用或修复。

所有会话和 PSSession 是否都一样?

错误。 开发人员可以创建仅包含所选提供程序和 cmdlet 的自定义会话。 如果命令在一个会话中有效,但在另一个会话中无效,则可能是因为该会话受到限制。

另请参阅