当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 关于 PSSession 详细信息

作者:精品下载站 日期:2024-12-14 02:19:45 浏览:15 分类:玩电脑

关于 PSSession 详细信息


简短描述

提供有关 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 会话”或“PSSession”)。

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

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

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

我什么时候需要 PSSession?

Invoke-CommandEnter-PSSession cmdlet 都具有 ComputerNameSession 参数。您可以使用其中任何一个来运行远程命令。

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

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

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

如何创建 PSSession?

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

我可以在任何计算机上创建 PSSession 吗?

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

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

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

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

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

Get-PSSession -ComputerName Server02

即使您从会话断开连接,会话也会保留在远程计算机上,直到您将其删除或超时。

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

有关详细信息,请参阅获取 PSSession。

我可以看到其他人在我的计算机上创建的 PSSession 吗?

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

我可以从另一台计算机连接到 PSSession 吗?

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

在 Windows 计算机上,您可以使用 Disconnect-PSSession cmdlet 断开与 PSSession 的连接。 PSSession 与本地会话断开连接,但在远程计算机上维护。命令继续在断开连接的 PSSession 中运行。您可以关闭 PowerShell 并关闭源计算机,而无需中断 PSSession。

然后,即使数小时后,您也可以使用 Get-PSSession cmdlet 获取 PSSession,并使用 Connect-PSSession cmdlet 从不同网络上的新会话连接到 PSSession。 Windows 计算机。

有关详细信息,请参阅 about_Remote_Disconnected_Sessions。

如果我的计算机停止运行,我的 PSSession 会怎样?

断开连接的 PSSession 独立于创建它们的会话。如果断开 PSSession,然后关闭源计算机,PSSession 将保留在远程计算机上。

此外,PowerShell 会尝试恢复无意中断开的活动 PSSession,例如由于计算机重新启动、临时断电或网络中断。如果原始会话仍然可用,则 PowerShell 尝试将 PSSession 维持或恢复到“打开”状态;如果不可用,则将其恢复到“断开连接”状态。

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

有关详细信息,请参阅 about_Remote_Disconnected_Sessions。

我可以在 PSSession 中运行后台作业吗?

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

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

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

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

有关更多信息,请参阅 about_Jobs。

我可以运行交互式会话吗?

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

您可以在临时会话(通过使用 ComputerName 参数)或 PSSession(通过使用 Session 参数)中运行交互式会话。如果您使用 PSSession,则 PSSession 会保留先前命令中的数据,并且 PSSession 会保留交互式会话期间生成的任何数据以供后面的命令使用。

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

有关详细信息,请参阅 Enter-PSSession 和 Exit-PSSession。

我必须删除 PSSession 吗?

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

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

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

如果将 PSSession 对象保存在变量中,然后删除 PSSession 或让它超时,则该变量仍包含 PSSession 对象,但 PSSession 不活动,无法使用或修复。

所有会话和 PSSession 都一样吗?

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

参见

  • 关于乔布斯
  • about_PSSessions
  • about_Remote
  • about_Remote_Disconnected_Sessions
  • about_Remote_Requirements
  • Invoke-Command
  • 输入-PSSession
  • 退出-PSSession
  • 获取 PSSession
  • 新 PS 会话
  • 删除-PSSession

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯