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

[玩转系统] 接收 PSSession (Microsoft.PowerShell.Core)

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

接收 PSSession (Microsoft.PowerShell.Core)


接收PS会话

模块 :Microsoft.PowerShell.Core

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

句法

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 仅适用于 Windows 平台。

Receive-PSSession cmdlet 获取在已断开连接的 PowerShell 会话 (PSSession) 中运行的命令的结果。如果会话当前已连接,Receive-PSSession 会获取会话断开连接时正在运行的命令的结果。如果会话仍然断开连接,Receive-PSSession 将连接到会话、恢复所有暂停的命令,并获取会话中运行的命令的结果。

此 cmdlet 是在 PowerShell 3.0 中引入的。

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

Receive-PSSession 适用于使用 Disconnect-PSSession cmdlet 或 Invoke-Command 故意断开连接的 PSSession InDisconnectedSession 参数。或者因网络中断而意外断开。

如果您使用 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

该命令使用 ComputerNameName 参数来标识断开连接的会话。它使用值为 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 变量显示State 为Opened,并且Availability 为Available。这些值指示您已连接到会话并且可以在会话中运行命令。

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

当计算机重新启动时,用户启动 PowerShell 并运行 Get-PSSession 命令来获取 Server01 计算机上的会话。输出显示 Server01 计算机上仍然存在 AD 会话。 State表示AD会话已断开。 Availability 值为 None,表示会话未连接到任何客户端会话。

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

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

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

Receive-PSSession cmdlet 连接到 $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 变量中的作业上运行。输出显示作业在会话和作业断开连接之前开始返回输出。

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

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

参数

-AllowRedirection

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

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

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

类型 :

SwitchParameter

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

-ApplicationName

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

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

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

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

类型 :

String

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

True

接受通配符:

False

-Authentication

指定用于在重新连接到断开连接的会话的命令中验证用户凭据的机制。该参数可接受的值为:

  • 默认
  • 基本的
  • 信用证
  • 消化
  • 克伯罗斯
  • 谈判
  • 使用隐式凭证进行协商

默认值为默认。

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

警告

凭据安全支持提供程序 (CredSSP) 身份验证将用户凭据传递到远程计算机进行身份验证,专为需要对多个资源进行身份验证的命令(例如访问远程网络共享)而设计。这种机制增加了远程操作的安全风险。如果远程计算机受到威胁,则传递给它的凭据可用于控制网络会话。

类型 :

AuthenticationMechanism

接受的值:

默认、基本、协商、NegotiateWithImplicitCredential、Credssp、摘要、Kerberos

位置:

命名

默认值:

默认

必需的:

False

接受管道输入:

False

接受通配符:

False

-CertificateThumbprint

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

证书用于基于客户端证书的身份验证。证书只能映射到本地用户帐户,不能与域帐户一起使用。

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

类型 :

String

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-ComputerName

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

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

类型 :

String

别名:

Cn

位置:

0

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-ConfigurationName

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

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

http://schemas.microsoft.com/powershell

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

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

有关会话配置的更多信息,请参阅 about_Session_Configurations。

类型 :

String

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

True

接受通配符:

False

-Confirm

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

类型 :

SwitchParameter

别名:

cf

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

-ConnectionUri

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

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

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

默认值如下:

http://localhost:5985/WSMAN

如果不指定连接 URI,则可以使用 UseSSLComputerNamePortApplicationName参数来指定连接 URI 值。

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

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

类型 :

乌里

别名:

URI, CU

位置:

0

默认值:

http://localhost:5985/WSMAN

必需的:

True

接受管道输入:

True

接受通配符:

False

-Credential

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

输入用户名,例如 User01Domain01\User01,或输入由 Get-Credential cmdlet。如果您键入用户名,系统会提示您输入密码。

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

笔记

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

类型 :

PS凭证

位置:

命名

默认值:

当前用户

必需的:

False

接受管道输入:

False

接受通配符:

False

-Id

指定断开连接的会话的ID。仅当断开连接的会话之前连接到当前会话时,Id 参数才起作用。

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

类型 :

整数32

位置:

0

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-InstanceId

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

类型 :

指导

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

False

接受通配符:

False

-JobName

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

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

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

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

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

类型 :

String

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Name

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

类型 :

String

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

False

接受通配符:

False

-OutTarget

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

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

OutTarget 参数的默认值为 Host。如果在断开连接的会话中接收的命令是在当前会话中启动的,则 OutTarget 参数的默认值是命令启动时的形式。如果该命令作为作业启动,则默认情况下它会作为作业返回。否则,默认返回给宿主程序。

通常,主机程序会立即在命令行显示返回的对象,但这种行为可能会有所不同。

类型 :

OutTarget

接受的值:

默认、主机、作业

位置:

命名

默认值:

None

必需的:

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\>

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

类型 :

整数32

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Session

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

类型 :

PS会话

位置:

0

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-SessionOption

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

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

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

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

类型 :

PS会话选项

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-UseSSL

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

WS-Management 对通过网络传输的所有 PowerShell 内容进行加密。 UseSSL 是一种附加保护,可通过 HTTPS 连接而不是 HTTP 连接发送数据。

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

类型 :

SwitchParameter

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

-WhatIf

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

类型 :

SwitchParameter

别名:

wi

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

输入

PS会话

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

Int32

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

指导

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

字符串

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

输出

工作

如果 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 的空闲超时值。 Receive-PSSessionSessionOption 参数采用具有 IdleTimeout 值的 SessionOption 对象。但是,当 SessionOption 对象的 IdleTimeout 值和 $PSSessionOption 变量的 IdleTimeout 值被忽略时,连接到 PSSession 或接收结果。

    • 您可以在创建 PSSession 时使用 New-PSSession 设置和更改 PSSession 的空闲超时Invoke-Command cmdlet,以及当您与 PSSession 断开连接时。
    • PSSessionIdleTimeout 属性对于断开连接的会话至关重要,因为它决定断开连接的会话在远程计算机上维持多长时间。断开连接的会话从断开连接的那一刻起就被视为空闲,即使命令正在断开连接的会话中运行。

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

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

    同样,如果您在会话中启动脚本,然后从会话断开连接,则连接到该会话的其他客户端将无法使用该脚本在断开连接之前传递到会话的任何结果。

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

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

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

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

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

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

    取消回复欢迎 发表评论:

    关灯