Receive-PSSession
获取断开连接的会话中的命令的结果
语法
Receive-PSSession
[-Session] <PSSession>
[-OutTarget <OutTarget>]
[-JobName <String>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Receive-PSSession
[-Id] <Int32>
[-OutTarget <OutTarget>]
[-JobName <String>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Receive-PSSession
[-ComputerName] <String>
[-ApplicationName <String>]
[-ConfigurationName <String>]
-Name <String>
[-OutTarget <OutTarget>]
[-JobName <String>]
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[-CertificateThumbprint <String>]
[-Port <Int32>]
[-UseSSL]
[-SessionOption <PSSessionOption>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Receive-PSSession
[-ComputerName] <String>
[-ApplicationName <String>]
[-ConfigurationName <String>]
-InstanceId <Guid>
[-OutTarget <OutTarget>]
[-JobName <String>]
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[-CertificateThumbprint <String>]
[-Port <Int32>]
[-UseSSL]
[-SessionOption <PSSessionOption>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Receive-PSSession
[-ConfigurationName <String>]
[-ConnectionUri] <Uri>
[-AllowRedirection]
-Name <String>
[-OutTarget <OutTarget>]
[-JobName <String>]
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[-CertificateThumbprint <String>]
[-SessionOption <PSSessionOption>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Receive-PSSession
[-ConfigurationName <String>]
[-ConnectionUri] <Uri>
[-AllowRedirection]
-InstanceId <Guid>
[-OutTarget <OutTarget>]
[-JobName <String>]
[-Credential <PSCredential>]
[-Authentication <AuthenticationMechanism>]
[-CertificateThumbprint <String>]
[-SessionOption <PSSessionOption>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Receive-PSSession
[-InstanceId] <Guid>
[-OutTarget <OutTarget>]
[-JobName <String>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Receive-PSSession
[-Name] <String>
[-OutTarget <OutTarget>]
[-JobName <String>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
说明
cmdlet Receive-PSSession
获取在 PowerShell 会话中运行的命令的结果,这些命令 (PSSession) 已断开连接。 如果会话当前已连接, Receive-PSSession
则获取会话断开连接时正在运行的命令的结果。 如果会话仍然断开连接, Receive-PSSession
则连接到会话,恢复暂停的任何命令,并获取会话中运行的命令的结果。
此 cmdlet 是在 PowerShell 3.0 中引入的。
除了 命令之外, Receive-PSSession
还可以使用 或 Connect-PSSession
。
Receive-PSSession
可以连接到在其他会话或其他计算机上启动的任何断开连接或重新连接的会话。
Receive-PSSession
适用于使用 Disconnect-PSSession
cmdlet 或 InDisconnectedSession 参数有意断开连接的 Invoke-Command
PSSession。 或因网络中断意外断开连接。
如果使用 Receive-PSSession
cmdlet 连接到未运行或挂起命令的会话, Receive-PSSession
则会连接到该会话,但不会返回任何输出或错误。
有关断开连接会话的功能的详细信息,请参阅 about_Remote_Disconnected_Sessions。
一些示例使用 splatting 来减少线条长度并提高可读性。 有关详细信息,请参阅 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
cmdlet New-PSSession
在 Server01 计算机上创建会话,并将该会话保存在 变量中 $s
。 变量 $s
显示 “状态 已打开”, 可用性 为“可用”。 这些值表示你已连接到会话,并且可以在会话中运行命令。
cmdlet 在 Invoke-Command
变量的会话中 $s
运行脚本。 该脚本开始运行并返回数据,但如果出现网络故障,可能会中断该会话。 用户必须退出该会话并重新启动本地计算机。
当计算机重启时,用户启动 PowerShell 并运行命令 Get-PSSession
来获取 Server01 计算机上的会话。 输出显示 AD 会话仍存在于 Server01 计算机上。 状态指示 AD 会话已断开连接。 可用性值 None 指示会话未连接到任何客户端会话。
cmdlet Receive-PSSession
重新连接到 AD 会话,并获取会话中运行的脚本的结果。 命令使用 OutTarget 参数在名为 ADJob 的作业中请求结果。 命令返回作业对象,输出指示脚本仍在运行。
cmdlet Get-PSSession
用于检查作业状态。 输出确认 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 时设置 IdleTimeout ,并且仅在与 PSSession 断开连接时更改它。 连接到 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
cmdlet New-PSSession
在 Server01 计算机上创建测试会话。 该命令将该会话保存在 $s
变量中。
cmdlet Invoke-Command
在 变量的会话中 $s
运行命令。 命令使用 AsJob 参数将命令作为作业运行,并在当前会话中创建作业对象。
命令返回保存在 变量中的 $j
作业对象。 变量 $j
显示作业对象。
变量中的 $s
会话对象将向下发送管道, Disconnect-PSSession
并且会话断开连接。
将显示 $j
变量,并显示断开变量中 $j
作业对象连接的效果。 现在,该作业状态为“Disconnected”。
在 Receive-Job
变量中的 $j
作业上运行 。 输出显示作业在会话和作业断开连接之前开始返回输出。
cmdlet Connect-PSSession
在同一客户端会话中运行。 命令重新连接到 Server01 计算机上的测试会话,并将会话保存在 变量中 $s2
。
cmdlet Receive-PSSession
获取会话中运行的作业的结果。 由于命令在同一会话中运行, Receive-PSSession
因此默认情况下以作业的形式返回结果,并重复使用相同的作业对象。 命令将作业保存在 变量中 $j2
。 cmdlet Receive-Job
获取变量中 $j
作业的结果。
参数
-AllowRedirection
指示此 cmdlet 允许将此连接重定向到备用统一资源标识符 (URI) 。
使用 ConnectionURI 参数时,远程目标将返回一个指令,以重定向到不同的 URI。 默认情况下,PowerShell 不会重定向连接,但你可以使用此参数来启用它来重定向连接。
你也可以通过更改 MaximumConnectionRedirectionCount 会话选项值,限制重定向连接的次数。 使用 cmdlet 的 New-PSSessionOption
MaximumRedirection 参数或设置首选项变量的 $PSSessionOption
MaximumConnectionRedirectionCount 属性。 默认值为 5。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ApplicationName
指定应用程序。 此 cmdlet 仅连接到使用指定应用程序的会话。
输入连接 URI 的应用程序名称段。 例如,在以下连接 URI 中,WSMan 是应用程序名称: https://localhost:5985/WSMAN
。
会话的应用程序名称存储在该会话的 Runspace.ConnectionInfo.AppName 属性中。
参数的值用于选择和筛选会话。 它不会更改会话使用的应用程序。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Authentication
指定用于在命令中对用户凭据进行身份验证以重新连接到断开连接的会话的机制。 此参数的可接受值为:
- Default
- 基本
- Credssp
- 摘要
- Kerberos
- Negotiate
- NegotiateWithImplicitCredential
默认值为 Default。
有关此参数的值的详细信息,请参阅 AuthenticationMechanism 枚举。
注意
凭据安全支持提供程序 (CredSSP) 身份验证,其中用户凭据将传递给远程计算机进行身份验证,适用于需要对多个资源进行身份验证的命令,例如访问远程网络共享。 此机制增加了远程操作的安全风险。 如果远程计算机的安全受到威胁,则传递给该计算机的凭据可用于控制网络会话。
Type: | AuthenticationMechanism |
Accepted values: | Default, Basic, Negotiate, NegotiateWithImplicitCredential, Credssp, Digest, Kerberos |
Position: | Named |
Default value: | Default |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CertificateThumbprint
指定有权连接到断开连接的会话的用户帐户的数字公钥证书 (X509)。 输入证书的证书指纹。
在基于客户端证书的身份验证中使用证书。 证书只能映射到本地用户帐户,不适用于域帐户。
若要获取证书指纹,请在 Get-Item
PowerShell Cert:
驱动器中使用 或 Get-ChildItem
命令。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ComputerName
指定在其中存储断开连接的会话的计算机。 会话存储在服务器端或连接接收端的计算机上。 默认为本地计算机。
(一台计算机的 FQDN) 键入 NetBIOS 名称、IP 地址或完全限定的域名。
不允许使用通配符。 若要指定本地计算机,请键入计算机名称、点 (.
) 、 $env:COMPUTERNAME
或 localhost。
Type: | String |
Aliases: | Cn |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-ConfigurationName
指定会话配置的名称。 此 cmdlet 仅连接到使用指定会话配置的会话。
输入会话配置的配置名称或完全限定的资源 URI。 如果只指定配置名称,则将在其前面预置以下架构 URI:
https://schemas.microsoft.com/powershell
.
会话的配置名称存储在该会话的 ConfigurationName 属性中。
参数的值用于选择和筛选会话。 它不会更改会话使用的会话配置。
有关会话配置的详细信息,请参阅 about_Session_Configurations。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Confirm
提示你在运行 cmdlet 之前进行确认。
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ConnectionUri
指定一个 URI,该 URI 定义用于重新连接到断开连接的会话的连接终结点。
URI 必须完全限定。 字符串的格式如下所示:
<Transport>://<ComputerName>:<Port>/<ApplicationName>
默认值如下:
https://localhost:5985/WSMAN
如果未指定连接 URI,可以使用 UseSSL、 ComputerName、 Port 和 ApplicationName 参数指定连接 URI 值。
URI 的 Transport 段的有效值为 HTTP 和 HTTPS。 如果使用传输段指定连接 URI,但未指定端口,则会使用标准端口创建会话:80 用于 HTTP,443 用于 HTTPS。 若要使用默认端口进行 PowerShell 远程处理,请为 HTTP 指定端口 5985,为 HTTPS 指定端口 5986。
如果目标计算机将连接重定向到其他 URI,则 PowerShell 会阻止重定向,除非你在 命令中使用 AllowRedirection 参数。
Type: | Uri |
Aliases: | URI, CU |
Position: | 0 |
Default value: | https://localhost:5985/WSMAN |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Credential
指定有权连接到断开连接的会话的用户帐户。 默认为当前用户。
键入用户名,例如 User01 或 Domain01\User01,或输入 cmdlet Get-Credential
生成的 PSCredential 对象。 如果键入用户名,系统会提示输入密码。
凭据存储在 PSCredential 对象中,密码存储为 SecureString。
注意
有关 SecureString 数据保护的详细信息,请参阅 SecureString 的安全性如何?。
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Id
指定断开连接的会话的 ID。 仅当已断开连接的会话以前连接到当前会话时, Id 参数才有效。
当会话存储在本地计算机上,但未连接到当前会话时,此参数有效,但无效。
Type: | Int32 |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InstanceId
指定断开连接的会话的实例 ID。 实例 ID 是一个 GUID,用于唯一标识本地或远程计算机上的 PSSession 。 实例 ID 存储在 PSSession 的 InstanceID 属性中。
Type: | Guid |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-JobName
指定返回的作业 Receive-PSSession
的友好名称。
Receive-PSSession
当 OutTarget 参数的值为 Job 或在断开连接的会话中运行的作业在当前会话中启动时,返回作业。
如果在断开连接的会话中运行的作业在当前会话中启动,PowerShell 将重用会话中的原始作业对象,并忽略 JobName 参数的值。
如果在断开连接的会话中运行的作业在不同的会话中启动,则 PowerShell 会创建新的作业对象。 它使用默认名称,但你可以使用此参数来更改名称。
如果 OutTarget 参数的默认值或显式值不是 Job,则命令会成功,但 JobName 参数不起作用。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
指定断开连接的会话的友好名称。
Type: | String |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OutTarget
确定如何返回会话结果。 此参数的可接受值为:
- 作业。 在作业对象中异步返回结果。 你可以使用 JobName 参数来指定作业的名称或新名称。
- 主机。 将结果返回到命令行(同步)。 如果正在恢复该命令或者结果由大量对象组成,则可能会延迟响应。
OutTarget 参数的默认值为 Host。 如果在断开连接的会话中收到的命令是在当前会话中启动的, 则 OutTarget 参数的默认值是启动命令的形式。 如果命令作为作业启动,则默认情况下,它将作为作业返回。 否则,默认情况下,它会返回到主机程序。
通常,主机程序会立即在命令行中显示返回的对象,但是此行为会有所不同。
Type: | OutTarget |
Accepted values: | Default, Host, Job |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 参数。 命令中设置的端口适用于运行命令的所有计算机或会话。 备用端口设置可能会阻止在所有计算机上运行该命令。
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Session
指定断开连接的会话。 输入包含 PSSession 的变量或用于创建或获取 PSSession 的命令,例如 Get-PSSession
命令。
Type: | PSSession |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-SessionOption
为该会话指定高级选项。 输入 SessionOption 对象,例如使用 New-PSSessionOption
cmdlet 创建的一个对象,或一个哈希表,其中键是会话选项名称,值是会话选项值。
选项的默认值由首选项变量的值 $PSSessionOption
(如果已设置)确定。 否则,通过在会话配置中设置的选项创建默认值。
会话选项值优先于首选项变量和会话配置中 $PSSessionOption
设置的会话的默认值。 但是,它们不优先于会话配置中设置的最大值、配额或限制。
有关包含默认值的会话选项的说明,请参阅 New-PSSessionOption
。 有关 $PSSessionOption 首选项变量的信息,请参阅 about_Preference_Variables。 有关会话配置的详细信息,请参阅 about_Session_Configurations。
Type: | PSSessionOption |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseSSL
指示此 cmdlet 使用安全套接字层 (SSL) 协议连接到断开连接的会话。 默认情况下,不使用 SSL。
WS-Management 加密通过网络传输的所有 PowerShell 内容。 UseSSL 是一种额外的保护措施,它通过 HTTPS 连接而不是 HTTP 连接来发送数据。
如果使用此参数,并且 SSL 在用于命令的端口上不可用,则命令将失败。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WhatIf
显示运行该 cmdlet 时会发生什么情况。 cmdlet 未运行。
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
输入
可以通过管道将会话对象传递给此 cmdlet,例如 cmdlet 返回的对象 Get-PSSession
。
可以通过管道将会话 ID 传递给此 cmdlet。
可以通过管道传递此 cmdlet 会话的实例 ID。
可以通过管道将会话名称传递给此 cmdlet。
输出
System.Management.Automation.Job or PSObject
此 cmdlet 返回在断开连接的会话中运行的命令的结果(如果有)。 如果 OutTarget 参数的值或默认值为 Job, Receive-PSSession
将返回一个作业对象。 否则,它将返回表示命令结果的对象。
备注
此 cmdlet 仅在 Windows 平台上可用。
Receive-PSSession
仅从已断开连接的会话获取结果。 只有连接到运行 PowerShell 3.0 或更高版本的计算机或在其处终止的会话才能断开连接并重新连接。
如果在断开连接的会话中运行的命令未生成结果,或者如果结果已返回到另一个会话, Receive-PSSession
则 不会生成任何输出。
会话的输出缓冲模式确定会话断开连接时会话中的命令如何管理输出。 当会话的 OutputBufferingMode 选项的值为 Drop 且输出缓冲区已满时,命令将开始删除输出。 Receive-PSSession
无法恢复此输出。 有关输出缓冲模式选项的详细信息,请参阅 New-PSSessionOption 和 New-PSTransportOption cmdlet 的帮助文章。
连接到 PSSession 或接收结果时,无法更改 PSSession 的空闲超时值。 的 SessionOption 参数Receive-PSSession
采用具有 IdleTimeout 值的 SessionOption 对象。 但是,在连接到 PSSession 或接收结果时,将忽略 SessionOption 对象的 IdleTimeout 值和变量的 $PSSessionOption
IdleTimeout 值。
- 在创建 PSSession、使用
New-PSSession
或Invoke-Command
cmdlet 以及断开与 PSSession 的连接时,可以设置和更改 PSSession 的空闲超时。 - PSSession 的 IdleTimeout 属性对于断开连接的会话至关重要,因为它决定了断开连接的会话在远程计算机上保持多长时间。 断开连接的会话从其断开连接的时刻起就被视为空闲,即使命令正在断开连接的会话中运行也是如此。
如果使用 cmdlet 的 Invoke-Command
AsJob 参数在远程会话中启动作业,则会在当前会话中创建作业对象,即使作业在远程会话中运行也是如此。 如果断开远程会话的连接,则当前会话中的作业对象将与作业断开连接。 作业对象包含已返回给它的任何结果,但不会从断开连接的会话中的作业接收新结果。
如果其他客户端连接到包含正在运行的作业的会话,则传递到原始会话中原始作业对象的结果在新连接的会话中不可用。 在重新连接的会话中只能使用未传递给原始作业对象的结果。
同样,如果在会话中启动脚本,然后断开与会话的连接,则该脚本在断开连接前传递到会话的任何结果都不适用于连接到该会话的另一个客户端。
若要防止要断开连接的会话中数据丢失,请使用 cmdlet 的 InDisconnectedSession 参数。Invoke-Command
由于此参数会阻止结果返回到当前会话,因此在重新连接该会话后所有结果均可用。
还可以通过使用 Invoke-Command
cmdlet 在远程会话中运行 Start-Job
命令来防止数据丢失。 在此情况下,将在远程会话中创建作业对象。 不能使用 Receive-PSSession
cmdlet 获取作业结果。 请改用 Connect-PSSession
cmdlet 连接到会话,然后使用 Invoke-Command
cmdlet 在会话中运行 Receive-Job
命令。
当包含正在运行的作业的会话断开连接后重新连接时,仅当作业断开连接并重新连接到同一会话时,才会重新使用原始作业对象,并且用于重新连接的命令未指定新的作业名称。 如果会话重新连接到其他客户端会话或指定了新的作业名称,则 PowerShell 会为新会话创建一个新的作业对象。
断开 PSSession 的连接时,会话状态为“已断开连接”,可用性为“无”。
- State 属性的值是相对于当前会话的。 值 Disconnected 表示 PSSession 未连接到当前会话。 但是,这并不意味着 PSSession 与所有会话断开连接。 它可能连接到另一个会话。 若要确定是否可以连接或重新连接到该会话,请使用 Availability 属性。
- Availability 的 None 值指示可连接会话。 值为 Busy 表示无法连接到 PSSession ,因为它已连接到另一个会话。
- 有关会话的 State 属性的值的详细信息,请参阅 RunspaceState。
- 有关 会话的可用性属性 的值的详细信息,请参阅 RunspaceAvailability。