主题
    about_PSSession_Details

简短说明
    介绍有关 Windows PowerShell 会话及其在远程命令中所起作用的详细信息。

详细说明
    会话是 Windows PowerShell 的运行环境。只要打开 Windows PowerShell,就会创建一个会话,您可以在
    自己的计算机或其他计算机上创建更多会话,这些会话称为"Windows PowerShell 会话"或"PSSession"。

    与 Windows PowerShell 为您创建的会话不同,您创建的 PSSession 是由您控制和管理的。

    PSSession 在远程计算中起着重要作用。当您创建连接至远程计算机的 PSSession 时,Windows 
    PowerShell 与远程计算机建立持续性连接来支持 PSSession。可以使用 PSSession 运行一系列共享数
    据的命令、函数和脚本。

    本主题介绍有关 Windows PowerShell 中的会话和 PSSession 的详细信息。有关可通过会话执行
    的任务的基本信息,请参阅 about_PSSessions。

 关于会话
    在技术上,会话是 Windows PowerShell 运行的执行环境。每个会话都包括一个 
    System.Management.Automation 引擎的实例,以及一个主机程序(Windows PowerShell 在
    该程序中运行)。主机可以是常见的 Windows PowerShell 控制台、其他运行命令(如 Cmd.exe)
    的程序,或为 Windows PowerShell 生成的主机程序(如 Windows PowerShell 集成脚本环境 (ISE))。从 
    Windows 的角度看,会话是目标计算机上的 Windows 进程。

    每个会话都是独立配置的,它包括自己的属性、执行策略和配置文件。在会话生存期内,
    会一直保存会话创建时所处的环境,即使您更改计算机上的环境也是如此。所有会话
    (包括在脚本中创建的会话)都是在全局作用域中创建的。

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

 关于 PSSession
    每次打开 Windows PowerShell 都会创建一个会话。Windows PowerShell 创建临时会话来运行各命令。
    不过,您也可以创建由自己控制和管理的会话,这些会话称为“Windows PowerShell 会话”或
   “PSSession”。
 
    PSSession 对于远程命令至关重要。如果使用 Invoke-Command 或 Enter-PSSession cmdlet 
    的 ComputerName 参数,Windows Powershell 将建立临时会话来运行命令,然后在命令或交互式会话完
    成时关闭该会话。

    但是,如果使用 New-PSSession 创建 PSSession,Windows PowerShell 将在远程计算机上建
    立持续性会话,在该会话中,您可以运行多个命令或交互式会话。您所创建的 PSSession 将保持为打开和
    可用的状态,直至您将它删除或关闭创建该会话时所在的会话为止。

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


 何时需要 PSSession?
    Invoke-Command 和 Enter-PSSession cmdlet 具有 ComputerName 和 Session 这两个参数。可以
    使用其中任何一个运行远程命令。

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

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

    从远程计算机获取数据的许多其他 cmdlet(如 Get-Process、Get-Service、Get-EventLog 
    和 Get-WmiObject)只有 ComputerName 参数。它们使用 Windows PowerShell 远程处理之
    外的技术从远程收集数据。这些 cmdlet 没有 Session 参数,不过,可以使用 Invoke-Command 
    cmdlet 在 PSSession 中运行这些命令。
 

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


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


 我可以查看其他人在我的计算机上创建的 PSSession 吗?
    不可以。您只能获取和管理您在当前会话中创建的 PSSession。您无法看到其他人创建的 PSSession,
    即使这些 PSSession 在本地计算机上运行命令也是如此。


 我可以在 PSSession 中运行后台作业吗?
    可以。后台作业是在后台异步运行而不与当前会话交互的命令。提交命令来启动作业时,
    命令返回一个作业对象,但该作业在后台继续运行,直至完成。

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

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

    使用 Invoke-Command 运行 Start-Job 命令时,必须在 PSSession 中运行命令。如果使用 
    ComputerName 参数,当作业对象返回、作业中断时,Windows PowerShell 将终止连接。

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


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

    可以在临时会话(通过使用 ComputerName 参数)或 PSSession(通过使用 Session 参数)中运
    行交互式会话。如果使用 PSSession,PSSession 会保存以前的命令的数据,还会保存交互式会话过
    程中生成的所有数据,供以后的命令使用。

    结束交互式会话时,PSSession 保持为打开和可用的状态。

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

 我是否必须删除 PSSession?
    是的。PSSession 是一个进程;即使未使用,它也是一个使用内存和其他资源的自包含环境。完成 
    PSSession 后,请将其删除。如果创建了多个 PSSession,请关闭当前未使用的 PSSession,只保
    留当前使用的 PSSession。

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

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

    如果未删除 PSSession,也未设置超时,则在将其关闭、关闭其创建时所在的会话或退出 Windows 
    PowerShell 之前,PSSession 保持为打开和可用的状态。不过,如果远程计算机四分钟未响应,则远
    程计算机上的 PSSession 将断开连接。(远程计算机配置为每三分钟发送一次检测信号脉冲。)

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

 是不是所有会话和 PSSession 都相似?
    不是。开发人员可以创建仅包括所选提供程序和 cmdlet 的自定义会话。如果命令可以在一个会话中
    运行,但无法在另一个会话中运行,则可能是因为会话受到了限制。


另请参阅
    about_Jobs
    about_PSSessions
    about_Remote 
    about_Remote_Requirements
    Invoke-Command
    New-PSSession 
    Get-PSSession 
    Remove-PSSession 
    Enter-PSSession 
    Exit-PSSession 




目录