Receive-PSSession

获取断开连接会话中的命令结果

语法

Session (默认值)

Receive-PSSession
    [-Session] <PSSession>
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Id

Receive-PSSession
    [-Id] <Int32>
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ComputerSessionName

Receive-PSSession
    [-ComputerName] <String>
    -Name <String>
    [-ApplicationName <String>]
    [-ConfigurationName <String>]
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-Credential <PSCredential>]
    [-Authentication <AuthenticationMechanism>]
    [-CertificateThumbprint <String>]
    [-Port <Int32>]
    [-UseSSL]
    [-SessionOption <PSSessionOption>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ComputerInstanceId

Receive-PSSession
    [-ComputerName] <String>
    -InstanceId <Guid>
    [-ApplicationName <String>]
    [-ConfigurationName <String>]
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-Credential <PSCredential>]
    [-Authentication <AuthenticationMechanism>]
    [-CertificateThumbprint <String>]
    [-Port <Int32>]
    [-UseSSL]
    [-SessionOption <PSSessionOption>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ConnectionUriSessionName

Receive-PSSession
    [-ConnectionUri] <Uri>
    -Name <String>
    [-ConfigurationName <String>]
    [-AllowRedirection]
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-Credential <PSCredential>]
    [-Authentication <AuthenticationMechanism>]
    [-CertificateThumbprint <String>]
    [-SessionOption <PSSessionOption>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

ConnectionUriInstanceId

Receive-PSSession
    [-ConnectionUri] <Uri>
    -InstanceId <Guid>
    [-ConfigurationName <String>]
    [-AllowRedirection]
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-Credential <PSCredential>]
    [-Authentication <AuthenticationMechanism>]
    [-CertificateThumbprint <String>]
    [-SessionOption <PSSessionOption>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

InstanceId

Receive-PSSession
    -InstanceId <Guid>
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

SessionName

Receive-PSSession
    -Name <String>
    [-OutTarget <OutTarget>]
    [-JobName <String>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

说明

此 cmdlet 仅在 Windows 平台上可用。

该 Receive-PSSession cmdlet 获取在 PowerShell 会话(PSSession)中运行的命令的结果,这些命令已断开连接。 如果会话当前已连接, Receive-PSSession 则获取会话断开连接时正在运行的命令的结果。 如果会话仍然断开连接, Receive-PSSession 请连接到会话,恢复挂起的任何命令,并获取会话中运行的命令的结果。

PowerShell 3.0 中引入了此 cmdlet。

除了命令之外,还可以使用 Receive-PSSession 或不使用 Connect-PSSession 命令。 Receive-PSSession 可以连接到在其他会话或其他计算机上启动的任何断开连接或重新连接的会话。

Receive-PSSession适用于有意使用 cmdlet 或 Disconnect-PSSession 参数断开连接的 Invoke-CommandPSSession。 或者无意中因网络中断而断开连接。

如果使用 Receive-PSSession cmdlet 连接到没有运行或挂起命令的会话, Receive-PSSession 则连接到会话,但不返回任何输出或错误。

有关断开连接会话功能的详细信息,请参阅 about_Remote_Disconnected_Sessions。

一些示例使用喷洒来减少行长并提高可读性。 有关详细信息,请参阅 about_Splatting。

示例

示例 1:连接到 PSSession

此示例连接到远程计算机上的会话,并获取在会话中运行的命令的结果。

Receive-PSSession -ComputerName Server01 -Name ITTask

指定 Receive-PSSession 具有 ComputerName 参数的远程计算机。 Name 参数标识 Server01 计算机上的 ITTask 会话。 该示例获取 ITTask 会话中运行的命令的结果。

由于命令不使用 OutTarget 参数,因此结果将显示在命令行上。

示例 2:获取断开连接会话上所有命令的结果

此示例获取两台远程计算机上所有断开连接会话中运行的所有命令的结果。

如果任何会话未断开连接或未运行命令, Receive-PSSession 则不连接到会话,也不会返回任何输出或错误。

Get-PSSession -ComputerName Server01, Server02 | Receive-PSSession

Get-PSSession 使用 ComputerName 参数指定远程计算机。 将对象通过管道发送到 Receive-PSSession。

示例 3:获取会话中运行的脚本的结果

此示例使用 Receive-PSSession cmdlet 获取远程计算机会话中运行的脚本的结果。

$parms = @{
  ComputerName = "Server01"
  Name = "ITTask"
  OutTarget = "Job"
  JobName = "ITTaskJob01"
  Credential = "Domain01\Admin01"
}
Receive-PSSession @parms
Id     Name            State         HasMoreData     Location
--     ----            -----         -----------     --------
16     ITTaskJob01     Running       True            Server01

该命令使用 ComputerName 和 Name 参数标识断开连接的会话。 它使用具有 Job 值的 OutTarget 参数来直接 Receive-PSSession 将结果作为作业返回。 JobName 参数指定重新连接会话中作业的名称。 Credential 参数使用域管理员的权限运行Receive-PSSession命令。

输出显示 Receive-PSSession 将结果作为当前会话中的作业返回。 若要获取作业结果,请使用 Receive-Job 命令

示例 4:在网络中断后获取结果

此示例使用 Receive-PSSession cmdlet 在网络中断中断会话连接后获取作业的结果。 PowerShell 在接下来的四分钟内自动尝试每秒重新连接会话一次,并且仅当四分钟间隔中的所有尝试失败时才放弃该工作。

PS> $s = New-PSSession -ComputerName Server01 -Name AD -ConfigurationName ADEndpoint
PS> $s

Id  Name   ComputerName    State        ConfigurationName     Availability
--  ----   ------------    -----        -----------------     ------------
8   AD      Server01       Opened       ADEndpoint               Available


PS> Invoke-Command -Session $s -FilePath \\Server12\Scripts\SharedScripts\New-ADResolve.ps1

Running "New-ADResolve.ps1"

# Network outage
# Restart local computer
# Network access is not re-established within 4 minutes


PS> Get-PSSession -ComputerName Server01

Id  Name   ComputerName    State          ConfigurationName      Availability
--  ----   ------------    -----          -----------------      ------------
1  Backup  Server01        Disconnected   Microsoft.PowerShell           None
8  AD      Server01        Disconnected   ADEndpoint                     None


PS> Receive-PSSession -ComputerName Server01 -Name AD -OutTarget Job -JobName AD

Job Id   Name      State         HasMoreData     Location
--       ----      -----         -----------     --------
16       ADJob     Running       True            Server01


PS> Get-PSSession -ComputerName Server01

Id  Name    ComputerName    State         ConfigurationName     Availability
--  ----    ------------    -----         -----------------     ------------
1  Backup   Server01        Disconnected  Microsoft.PowerShell          Busy
8  AD       Server01        Opened        ADEndpoint               Available

该 New-PSSession cmdlet 在 Server01 计算机上创建会话,并将会话保存在变量中 $s 。 该 $s 变量显示 状态 已打开且 可用性 可用。 这些值指示已连接到会话,并且可以在会话中运行命令。

该 Invoke-Command cmdlet 在变量中的 $s 会话中运行脚本。 脚本开始运行并返回数据,但发生网络中断会中断会话。 用户必须退出会话并重启本地计算机。

计算机重启时,用户启动 PowerShell 并运行一个 Get-PSSession 命令来获取 Server01 计算机上的会话。 输出显示 AD 会话仍存在于 Server01 计算机上。 状态指示 AD 会话已断开连接。 “无”的可用性值指示会话未连接到任何客户端会话。

该 Receive-PSSession cmdlet 重新连接到 AD 会话,并获取在会话中运行的脚本的结果。 该命令使用 OutTarget 参数在名为 ADJob 的作业中请求结果。 该命令返回作业对象,输出指示脚本仍在运行。

该 Get-PSSession cmdlet 用于检查作业状态。 输出确认 Receive-PSSession cmdlet 已重新连接到 AD 会话,该会话现已打开,可用于命令。 并且,脚本恢复执行,并正在获取脚本结果。

示例 5:重新连接到断开连接的会话

此示例使用 Receive-PSSession cmdlet 重新连接到有意断开连接的会话,并获取在会话中运行的作业的结果。

PS> $parms = @{
      InDisconnectedSession = $true
      ComputerName = "Server01", "Server02", "Server30"
      FilePath = "\\Server12\Scripts\SharedScripts\Get-BugStatus.ps1"
      Name = "BugStatus"
      SessionOption = @{IdleTimeout = 86400000}
      ConfigurationName = "ITTasks"
    }
PS> Invoke-Command @parms
PS> exit


PS> $s = Get-PSSession -ComputerName Server01, Server02, Server30 -Name BugStatus
PS> $s

Id  Name   ComputerName    State         ConfigurationName     Availability
--  ----   ------------    -----         -----------------     ------------
1  ITTask  Server01        Disconnected  ITTasks                       None
8  ITTask  Server02        Disconnected  ITTasks                       None
2  ITTask  Server30        Disconnected  ITTasks                       None


PS> $Results = Receive-PSSession -Session $s
PS> $s

Id  Name   ComputerName    State         ConfigurationName     Availability
--  ----   ------------    -----         -----------------     ------------
1  ITTask  Server01        Opened        ITTasks                  Available
8  ITTask  Server02        Opened        ITTasks                  Available
2  ITTask  Server30        Opened        ITTasks                  Available


PS> $Results

Bug Report - Domain 01
----------------------
ComputerName          BugCount          LastUpdated
--------------        ---------         ------------
Server01              121               Friday, December 30, 2011 5:03:34 PM

该 cmdlet 在 Invoke-Command 三台远程计算机上运行脚本。 由于脚本收集并汇总了来自多个数据库的数据,因此脚本通常需要较长时间才能完成。 该命令使用 InDisconnectedSession 参数来启动脚本,然后立即断开会话的连接。 SessionOption 参数扩展断开连接会话的 IdleTimeout 值。 断开连接的会话从断开连接的那一刻起被视为空闲。 必须设置足够长的时间空闲超时,以便命令可以完成,并且可以重新连接到会话。 只有在创建 PSSession 并仅在断开与 PSSession 的连接时才可设置 IdleTimeout。 连接到 PSSession 或接收其结果时,无法更改 IdleTimeout 值。 运行此命令后,用户退出 PowerShell 并关闭计算机。

第二天,用户恢复Windows,启动 PowerShell,并使用 Get-PSSession 获取运行脚本的会话。 该命令按计算机名称、会话名称和会话配置的名称标识会话,并将会话保存在变量中 $s 。 显示变量的值 $s ,并显示会话已断开连接,但不忙。

cmdlet Receive-PSSession 连接到变量中的 $s 会话并获取其结果。 该命令将结果保存在变量中 $Results 。 $s显示变量,并显示会话已连接并可用于命令。

脚本结果变量 $Results 显示在 PowerShell 控制台中。 如果任何结果都意外,用户可以在会话中运行命令来调查根本原因。

示例 6:在断开连接的会话中运行作业

此示例显示了在断开连接的会话中运行的作业会发生什么情况。

PS> $s = New-PSSession -ComputerName Server01 -Name Test
PS> $j = Invoke-Command -Session $s { 1..1500 | ForEach-Object {"Return $_"; sleep 30}} -AsJob
PS> $j

Id     Name           State         HasMoreData     Location
--     ----           -----         -----------     --------
16     Job1           Running       True            Server01


PS> $s | Disconnect-PSSession

Id Name   ComputerName    State         ConfigurationName     Availability
-- ----   ------------    -----         -----------------     ------------
1  Test   Server01        Disconnected  Microsoft.PowerShell          None


PS> $j

Id     Name           State         HasMoreData     Location
--     ----           -----         -----------     --------
16     Job1           Disconnected  True            Server01


PS> Receive-Job $j -Keep

Return 1
Return 2


PS> $s2 = Connect-PSSession -ComputerName Server01 -Name Test
PS> $j2 = Receive-PSSession -ComputerName Server01 -Name Test
PS> Receive-Job $j

Return 3
Return 4

该 New-PSSession cmdlet 在 Server01 计算机上创建测试会话。 该命令将会话保存在变量中 $s 。

该 Invoke-Command cmdlet 在变量中的会话中 $s 运行命令。 该命令使用 AsJob 参数将命令作为作业运行,并在当前会话中创建作业对象。 该命令返回保存在变量中的 $j 作业对象。 该 $j 变量显示作业对象。

变量中的 $s 会话对象将发送到管道 Disconnect-PSSession 并断开会话的连接。

$j显示该变量,并显示断开变量中$j作业对象连接的效果。 作业状态现在已断开连接。

在 Receive-Job 变量中的作业上运行 $j 。 输出显示作业在会话之前开始返回输出,作业已断开连接。

cmdlet Connect-PSSession 在同一客户端会话中运行。 该命令重新连接到 Server01 计算机上的测试会话,并将会话保存在变量中 $s2 。

该 Receive-PSSession cmdlet 获取在会话中运行的作业的结果。 由于该命令在同一会话中运行, Receive-PSSession 因此默认情况下以作业的形式返回结果,并重复使用相同的作业对象。 该命令将作业保存在 $j2 变量中。 该 Receive-Job cmdlet 获取变量中 $j 作业的结果。

参数

-AllowRedirection

指示此 cmdlet 允许将此连接重定向到备用统一资源标识符 (URI)。

使用 ConnectionURI 参数时,远程目标可以返回重定向到其他 URI 的指令。 默认情况下,PowerShell 不会重定向连接,但可以使用此参数来重定向连接。

还可以通过更改 MaximumConnectionRedirectionCount 会话选项值来限制连接重定向的次数。 使用 cmdlet 的 New-PSSessionOption 参数或设置 首选项变量的 $PSSessionOption 属性。 默认值为 5。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

ConnectionUriSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-ApplicationName

指定应用程序。 此 cmdlet 仅连接到使用指定应用程序的会话。

输入连接 URI 的应用程序名称段。 例如,在以下连接 URI 中,WSMan 是应用程序名称: http://localhost:5985/WSMAN

会话的应用程序名称存储在会话的 Runspace.ConnectionInfo.AppName 属性中。

参数的值用于选择和筛选会话。 它不会更改会话使用的应用程序。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

ComputerInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False
ComputerSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-Authentication

指定用于对命令中的用户凭据进行身份验证以重新连接到断开连接的会话的机制。 此参数的可接受值为:

  • 默认
  • 基本
  • Credssp
  • 摘要
  • Kerberos
  • 谈判
  • NegotiateWithImplicitCredential

默认值为 Default。

有关此参数的值的详细信息,请参阅 AuthenticationMechanism 枚举。

注意

凭据安全支持提供程序(CredSSP)身份验证(其中用户凭据传递到要进行身份验证的远程计算机)旨在用于需要对多个资源进行身份验证的命令,例如访问远程网络共享。 此机制会增加远程操作的安全风险。 如果远程计算机遭到入侵,则传递给它的凭据可用于控制网络会话。

参数属性

类型:AuthenticationMechanism
默认值:Default
接受的值:Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos
支持通配符:False
不显示:False

参数集

ComputerInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ComputerSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-CertificateThumbprint

指定有权连接到断开连接的会话的用户帐户的数字公钥证书 (X509)。 输入证书的证书指纹。

证书用于基于客户端证书的身份验证。 证书只能映射到本地用户帐户,并且不适用于域帐户。

若要获取证书指纹,请使用 PowerShell 驱动器中的命令Get-ItemGet-ChildItem。Cert:

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

ComputerInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ComputerSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-ComputerName

指定存储断开连接会话的计算机。 会话存储在位于服务器端的计算机或接收连接的末尾。 默认值为本地计算机。

键入一台计算机的 NetBIOS 名称、IP 地址或完全限定的域名(FQDN)。 不允许使用通配符。 若要指定本地计算机,请键入计算机名称、点(.) $Env:COMPUTERNAME或 localhost。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False
别名:Cn

参数集

ComputerInstanceId
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False
ComputerSessionName
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-ConfigurationName

指定会话配置的名称。 此 cmdlet 仅连接到使用指定会话配置的会话。

输入会话配置的配置名称或完全限定的资源 URI。 如果仅指定配置名称,则前面有以下架构 URI:

http://schemas.microsoft.com/powershell。

会话的配置名称存储在会话的 ConfigurationName 属性中。

参数的值用于选择和筛选会话。 它不会更改会话使用的会话配置。

有关会话配置的详细信息,请参阅 about_Session_Configurations。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

ComputerInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False
ComputerSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False
ConnectionUriSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False
ConnectionUriInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-Confirm

在运行 cmdlet 之前,提示你进行确认。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False
别名:Cf

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-ConnectionUri

指定一个 URI,该 URI 定义用于重新连接到断开连接的会话的连接终结点。

URI 必须完全限定。 字符串的格式如下所示:

<Transport>://<ComputerName>:<Port>/<ApplicationName>

默认值如下所示:

http://localhost:5985/WSMAN

如果未指定连接 URI,可以使用 UseSSL、 ComputerName、 Port 和 ApplicationName 参数指定连接 URI 值。

URI 传输 段的有效值为 HTTP 和 HTTPS。 如果使用传输段指定连接 URI,但不指定端口,则会使用标准端口创建会话:80(对于 HTTP)和 443(对于 HTTPS)。 若要使用 PowerShell 远程处理的默认端口,请为 HTTP 指定端口 5985,或为 HTTPS 指定端口 5986。

如果目标计算机将连接重定向到其他 URI,则 PowerShell 会阻止重定向,除非在命令中使用 AllowRedirection 参数。

参数属性

类型:Uri
默认值:http://localhost:5985/WSMAN
支持通配符:False
不显示:False
别名:URI, CU

参数集

ConnectionUriSessionName
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False
ConnectionUriInstanceId
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-Credential

指定有权连接到断开连接会话的用户帐户。 默认值为当前用户。

键入用户名(如 User01 或 Domain01\User01),或输入由 cmdlet 生成的 Get-Credential 对象。 如果键入用户名,系统会提示输入密码。

凭据存储在 PSCredential 对象中,密码存储为 SecureString。

注释

有关 SecureString 数据保护的详细信息,请参阅 SecureString 的安全性如何?。

参数属性

类型:PSCredential
默认值:Current user
支持通配符:False
不显示:False

参数集

ComputerInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ComputerSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Id

指定断开连接的会话的 ID。 ID 参数仅在以前连接到当前会话时断开连接的会话有效。

当会话存储在本地计算机上但未连接到当前会话时,此参数有效,但无效。

参数属性

类型:Int32
默认值:None
支持通配符:False
不显示:False

参数集

Id
Position:0
必需:True
来自管道的值:True
来自管道的值(按属性名称):True
来自剩余参数的值:False

-InstanceId

指定断开连接的会话的实例 ID。 实例 ID 是唯一标识本地或远程计算机上的 PSSession 的 GUID。 实例 ID 存储在 PSSession 的 InstanceId 属性中。

参数属性

类型:Guid
默认值:None
支持通配符:False
不显示:False

参数集

ComputerInstanceId
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriInstanceId
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
InstanceId
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-JobName

指定返回的作业 Receive-PSSession 的友好名称。

Receive-PSSession 当 OutTarget 参数的值为 Job 或当前会话中正在断开连接的会话中运行的作业时,返回作业。

如果在断开连接的会话中运行的作业是在当前会话中启动的,PowerShell 将重用会话中的原始作业对象,并忽略 JobName 参数的值。

如果在断开连接的会话中运行的作业在不同的会话中启动,PowerShell 将创建新的作业对象。 它使用默认名称,但可以使用此参数更改名称。

如果 OutTarget 参数的默认值或显式值不是 Job,则命令会成功,但 JobName 参数不起作用。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Name

指定断开连接的会话的友好名称。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

ComputerSessionName
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriSessionName
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
SessionName
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-OutTarget

确定如何返回会话结果。 此参数的可接受值为:

  • 作业。 在作业对象中异步返回结果。 可以使用 JobName 参数指定作业的名称或新名称。
  • 主机。 将结果返回到命令行(同步)。 如果命令正在恢复,或者结果由大量对象组成,则响应可能会延迟。

OutTarget 参数的默认值为 Host。 如果在当前会话中启动在断开连接的会话中收到的命令, 则 OutTarget 参数的默认值为启动命令的窗体。 如果命令作为作业启动,则默认情况下,该命令将作为作业返回。 否则,默认情况下,它将返回到主机程序。

通常,主机程序在命令行上显示返回的对象,而不会延迟,但此行为可能会有所不同。

参数属性

类型:OutTarget
默认值:None
接受的值:Default, Host, Job
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Port

指定用于重新连接到会话的远程计算机的网络端口。 若要连接到远程计算机,它必须侦听连接使用的端口。 默认端口为 5985,即 HTTP 的 WinRM 端口,5986 是 HTTPS 的 WinRM 端口。

在使用备用端口之前,必须在远程计算机上配置 WinRM 侦听器以侦听该端口。 若要配置侦听器,请在 PowerShell 提示符处键入以下两个命令:

Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse

New-Item -Path WSMan:\Localhost\listener -Transport http -Address * -Port \<port-number\>

除非有必要,否则不要使用 Port 参数。 命令中设置的端口适用于运行命令的所有计算机或会话。 备用端口设置可能会阻止命令在所有计算机上运行。

参数属性

类型:Int32
默认值:None
支持通配符:False
不显示:False

参数集

ComputerInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ComputerSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Session

指定断开连接的会话。 输入一个变量,其中包含 PSSession 或创建或获取 PSSession 的命令,例如 Get-PSSession 命令。

参数属性

类型:PSSession
默认值:None
支持通配符:False
不显示:False

参数集

Session
Position:0
必需:True
来自管道的值:True
来自管道的值(按属性名称):True
来自剩余参数的值:False

-SessionOption

指定会话的高级选项。 输入一个 SessionOption 对象,例如使用 New-PSSessionOption cmdlet 创建的对象,或者一个哈希表,其中键是会话选项名称,值是会话选项值。

选项的默认值取决于 $PSSessionOption 首选项变量的值(如果已设置)。 否则,默认值由会话配置中设置的选项建立。

会话选项值优先于在 $PSSessionOption 首选项变量和会话配置中设置的会话的默认值。 但是,它们不优先于会话配置中设置的最大值、配额或限制。

有关包含默认值的会话选项的说明,请参阅 New-PSSessionOption。 有关 $PSSessionOption 首选项变量的信息,请参阅 about_Preference_Variables。 有关会话配置的详细信息,请参阅 about_Session_Configurations。

参数属性

类型:PSSessionOption
默认值:None
支持通配符:False
不显示:False

参数集

ComputerInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ComputerSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ConnectionUriInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-UseSSL

指示此 cmdlet 使用安全套接字层 (SSL) 协议连接到断开连接的会话。 默认情况下,不使用 SSL。

WS-Management 加密通过网络传输的所有 PowerShell 内容。 UseSSL 是一项额外的保护,用于跨 HTTPS 连接而不是 HTTP 连接发送数据。

如果使用此参数,并且 SSL 在用于命令的端口上不可用,该命令将失败。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

ComputerInstanceId
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False
ComputerSessionName
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-WhatIf

显示 cmdlet 运行时会发生什么情况。 cmdlet 未能运行。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False
别名:无线

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

CommonParameters

此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters。

输入

PSSession

可以通过管道将会话对象传递给此 cmdlet,例如 cmdlet 返回 Get-PSSession 的对象。

Int32

可以通过管道将会话 ID 传递给此 cmdlet。

Guid

可以通过管道传递此 cmdlet 的会话实例 ID。

String

可以通过管道将会话名称传递给此 cmdlet。

输出

Job

如果 OutTarget 参数的值或默认值为 Job, Receive-PSSession 则返回作业对象。

PSObject

此 cmdlet 返回在断开连接的会话中运行的命令的结果(如果有)。

备注

PowerShell 包含以下与 Receive-PSSession相关的别名:

  • 所有平台:
    • rcsn

此 cmdlet 仅在 Windows 平台上可用。

Receive-PSSession 仅从已断开连接的会话中获取结果。 只有连接到或终止运行 PowerShell 3.0 或更高版本的计算机的会话才能断开连接并重新连接。

如果在断开连接的会话中运行的命令未生成结果,或者结果已返回到另一个会话, Receive-PSSession 则不会生成任何输出。

会话的输出缓冲模式确定会话中的命令在会话断开连接时如何管理输出。 当会话的 OutputBufferingMode 选项的值为 Drop 并且输出缓冲区已满时,命令将开始删除输出。 Receive-PSSession 无法恢复此输出。 有关输出缓冲模式选项的详细信息,请参阅 New-PSSessionOption 和 New-PSTransportOption cmdlet 的帮助文章。

连接到 PSSession 或接收结果时,无法更改 PSSession 的空闲超时值。 使用 SessionOption 对象的 Receive-PSSession 参数,该对象具有 IdleTimeout 值。 但是,当它连接到 PSSession 或接收结果时,将忽略 SessionOption 对象的 IdleTimeout 值和变量$PSSessionOption IdleTimeout 值。

  • 创建 PSSession 时,可以使用或 New-PSSession cmdlet 设置和更改 Invoke-Command 的空闲超时,以及断开与 PSSession 的连接时。
  • PSSession 的 IdleTimeout 属性对于断开连接的会话至关重要,因为它确定在远程计算机上维护断开连接的会话的时间。 即使命令在断开连接的会话中运行,断开连接的会话也被视为空闲。

如果使用 cmdlet 的 Invoke-Command 参数在远程会话中启动作业,则会在当前会话中创建作业对象,即使作业在远程会话中运行也是如此。 如果断开远程会话的连接,则当前会话中的作业对象与作业断开连接。 作业对象包含返回给它的任何结果,但不会从断开连接的会话中的作业接收新结果。

如果其他客户端连接到包含正在运行的作业的会话,则原始会话中传递到原始作业对象的结果在新连接的会话中不可用。 重新连接会话中仅提供未传递到原始作业对象的结果。

同样,如果在会话中启动脚本,然后与会话断开连接,则脚本在断开连接之前传递到会话的任何结果都不适用于连接到会话的另一个客户端。

若要防止要断开连接的会话中数据丢失,请使用 cmdlet 的 Invoke-Command 参数。 由于此参数可防止结果返回到当前会话,因此当重新连接会话时,所有结果都可用。

还可以通过使用 Invoke-Command cmdlet 在远程会话中运行 Start-Job 命令来防止数据丢失。 在这种情况下,作业对象是在远程会话中创建的。 不能使用 Receive-PSSession cmdlet 获取作业结果。 请改用 Connect-PSSession cmdlet 连接到会话,然后使用 Invoke-Command cmdlet 在会话中运行 Receive-Job 命令。

当包含正在运行的作业的会话断开连接并重新连接时,仅当作业断开连接并重新连接到同一会话时,才会重复使用原始作业对象,而要重新连接的命令不会指定新的作业名称。 如果会话重新连接到其他客户端会话或指定了新的作业名称,PowerShell 将为新会话创建新的作业对象。

断开 PSSession 的连接时,会话状态为“已断开连接”,可用性为“无”。

  • State 属性的值是相对于当前会话的。 “断开连接”值表示 PSSession 未连接到当前会话。 但是,这并不意味着 PSSession 已与所有会话断开连接。 它可能连接到另一个会话。 若要确定是否可以连接或重新连接到会话,请使用 Availability 属性。
  • “无”的可用性值表示可以连接到会话。 “忙碌”值表示无法连接到 PSSession ,因为它已连接到另一个会话。
  • 有关会话的 State 属性的值的详细信息,请参阅 RunspaceState。
  • 有关会话 可用性 属性的值的详细信息,请参阅 RunspaceAvailability。