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

[玩转系统] 断开连接-PSSession (Microsoft.PowerShell.Core)

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

断开连接-PSSession (Microsoft.PowerShell.Core)


断开连接-PSSession

模块 :Microsoft.PowerShell.Core

与会话断开连接。

句法

Disconnect-PSSession
          [-Session] <PSSession[]>
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]
Disconnect-PSSession
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          -Name <String[]>
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]
Disconnect-PSSession
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          -InstanceId <Guid[]>
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]
Disconnect-PSSession
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          [-Id] <Int32[]>
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]

描述

此 cmdlet 仅适用于 Windows 平台。

Disconnect-PSSession cmdlet 将 PowerShell 会话 (PSSession)(例如使用 New-PSSession cmdlet 启动的会话)与当前会话断开连接。因此,PSSession 处于断开状态。您可以从当前会话或本地计算机或另一台计算机上的另一个会话连接到断开连接的 PSSession

Disconnect-PSSession cmdlet 仅断开连接到当前会话的打开的 PSSessionDisconnect-PSSession 无法断开损坏或关闭的 PSSession 或使用 Enter-PSSession cmdlet 启动的交互式 PSSession,并且它无法断开连接到其他会话的PSSession

要重新连接到断开连接的 PSSession,请使用 Connect-PSSessionReceive-PSSession cmdlet。

PSSession 断开连接时,PSSession 中的命令将继续运行直至完成,除非 PSSession 超时或 PSSession 中的命令PSSession 被完整的输出缓冲区阻塞。要更改空闲超时,请使用 IdleTimeoutSec 参数。要更改输出缓冲模式,请使用 OutputBufferingMode 参数。您还可以使用 Invoke-Command cmdlet 的 InDisconnectedSession 参数在以下位置运行命令:断开连接的会话。

有关“断开连接的会话”功能的更多信息,请参阅 about_Remote_Disconnected_Sessions。

此 cmdlet 是在 Windows PowerShell 3.0 中引入的。

示例

示例 1 - 按名称断开会话

此命令断开 Server01 计算机上的 UpdateSession PSSession 与当前会话的连接。该命令使用名称参数来标识PSSession

PS> Disconnect-PSSession -Name UpdateSession
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1  UpdateSession   Server01        Disconnected  Microsoft.PowerShell          None

输出显示尝试断开连接成功。会话状态为DisconnectedAvailabilityNone,这表明会话不忙,可以重新连接。

示例 2 - 断开与特定计算机的会话连接

此命令将 Server12 计算机上的 ITTask PSSession 与当前会话断开连接。 ITTask 会话是在当前会话中创建的,并连接到 Server12 计算机。该命令使用 Get-PSSession cmdlet 获取会话,并使用 Disconnect-PSSession cmdlet 断开会话连接。

PS> Get-PSSession -ComputerName Server12 -Name ITTask |
  Disconnect-PSSession -OutputBufferingMode Drop -IdleTimeoutSec 86400
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1  ITTask          Server12        Disconnected  ITTasks               None

Disconnect-PSSession 命令使用 OutputBufferingMode 参数将输出模式设置为 Drop。此设置可确保即使会话输出缓冲区已满,会话中正在运行的脚本也可以继续运行。由于脚本将其输出写入文件共享上的报告,因此其他输出可能会丢失,而不会产生任何后果。

该命令还使用 IdleTimeoutSec 参数将会话的空闲超时延长至 24 小时。此设置允许该管理员或其他管理员有时间重新连接到会话,以验证脚本是否运行并在需要时进行故障排除。

示例 3 - 在多台计算机上使用多个 PSSession

这一系列命令展示了如何在企业场景中使用 Disconnect-PSSession cmdlet。在这种情况下,新技术人员在远程计算机上的会话中启动脚本并遇到问题。技术人员断开与会话的连接,以便更有经验的经理可以连接到会话并解决问题。

PS> $s = New-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
PS> Invoke-Command $s -FilePath \Server01\Scripts\Get-PatchStatus.ps1
PS> Get-PSSession -Name ITTask -ComputerName Srv1 | Disconnect-PSSession
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1 ITTask           Srv1            Disconnected  Microsoft.PowerShell          None

PS> Get-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 1 ITTask          Srv1            Disconnected  Microsoft.PowerShell          None
 2 ITTask          Srv2            Opened        Microsoft.PowerShell     Available
 3 ITTask          Srv30           Opened        Microsoft.PowerShell     Available

PS> Get-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 1 ITTask          Srv1            Disconnected  Microsoft.PowerShell          None

PS> $s = Connect-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
PS> Invoke-Command -Session $s {dir $HOME\Scripts\PatchStatusOutput.ps1}
PS> Invoke-Command -Session $s {mkdir $HOME\Scripts\PatchStatusOutput}
PS> Invoke-Command -Session $s -FilePath \Server01\Scripts\Get-PatchStatus.ps1
PS> Disconnect-PSSession -Session $s

技术人员首先在多台远程计算机上创建会话并在每个会话中运行脚本。第一个命令使用 New-PSSession cmdlet 在三台远程计算机上创建 ITTask 会话。该命令将会话保存在 $s 变量中。第二个命令使用 Invoke-Command cmdlet 的 FilePath 参数在 $s 变量中的会话中运行脚本。

在 Srv1 计算机上运行的脚本生成意外错误。技术人员联系他的经理并寻求帮助。经理指示技术人员断开与会话的连接,以便他可以进行调查。第二个命令使用 Get-PSSession cmdlet 获取 Srv1 计算机上的 ITTask 会话,并且 Disconnect-PSSession cmdlet 以断开连接。此命令不会影响其他计算机上的 ITTask 会话。

第三个命令使用 Get-PSSession cmdlet 获取 ITTask 会话。输出显示 Srv2 和 Srv30 计算机上的 ITTask 会话不受断开连接命令的影响。

经理登录到他的家庭计算机,连接到他的公司网络,启动 PowerShell,并使用 Get-PSSession cmdlet 获取 Srv1 计算机上的 ITTask 会话。他使用技术人员的凭据来访问会话。

接下来,管理器使用 Connect-PSSession cmdlet 连接到 Srv1 计算机上的 ITTask 会话。该命令将会话保存在 $s 变量中。

管理器使用 Invoke-Command cmdlet 在会话中的 $s 变量中运行一些诊断命令。他认识到脚本失败是因为它没有找到所需的目录。经理使用 MkDir 函数创建目录,然后重新启动 Get-PatchStatus.ps1 脚本并断开与会话的连接。经理向技术人员报告他的发现,建议他重新连接到会话以完成任务,并要求他向 Get-PatchStatus.ps1 脚本添加一个命令,用于创建所需的目录(如果不存在)。

示例 4 - 更改 PSSession 的超时值

此示例演示如何更正会话的 IdleTimeout 属性值,以便可以将其断开连接。

会话的空闲超时属性对于断开连接的会话至关重要,因为它决定断开连接的会话在被删除之前维持多长时间。您可以在创建会话和断开会话时设置空闲超时选项。会话空闲超时的默认值在本地计算机上的 $PSSessionOption 首选项变量和远程计算机上的会话配置中设置。为会话设置的值优先于会话配置中设置的值,但会话值不能超过会话配置中设置的配额,例如 MaxIdleTimeoutMs 值。

PS> $Timeout = New-PSSessionOption -IdleTimeout 172800000
PS> $s = New-PSSession -Computer Server01 -Name ITTask -SessionOption $Timeout
PS> Disconnect-PSSession -Session $s
Disconnect-PSSession : The session ITTask cannot be disconnected because the specified
idle timeout value 172800(seconds) is either greater than the server maximum allowed
43200 (seconds) or less that the minimum allowed60(seconds).  Choose an idle time out
value that is within the allowed range and try again.

PS> Invoke-Command -ComputerName Server01 {Get-PSSessionConfiguration Microsoft.PowerShell} |
 Format-List -Property *

Architecture                  : 64
Filename                      : %windir%\system32\pwrshplugin.dll
ResourceUri                   : http://schemas.microsoft.com/powershell/microsoft.powershell
MaxConcurrentCommandsPerShell : 1000
UseSharedProcess              : false
ProcessIdleTimeoutSec         : 0
xmlns                         : http://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
MaxConcurrentUsers            : 5
lang                          : en-US
SupportsOptions               : true
ExactMatch                    : true
RunAsUser                     :
IdleTimeoutms                 : 7200000
PSVersion                     : 3.0
OutputBufferingMode           : Block
AutoRestart                   : false
SecurityDescriptorSddl        : O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
MaxMemoryPerShellMB           : 1024
MaxIdleTimeoutms              : 2147483647
Uri                           : http://schemas.microsoft.com/powershell/microsoft.powershell
SDKVersion                    : 2
Name                          : microsoft.powershell
XmlRenderingType              : text
Capability                    : {Shell}
RunAsPassword                 :
MaxProcessesPerShell          : 15
ParentResourceUri             : http://schemas.microsoft.com/powershell/microsoft.powershell
Enabled                       : true
MaxShells                     : 25
MaxShellsPerUser              : 25
Permission                    : BUILTIN\Administrators AccessAllowed
PSComputerName                : localhost
RunspaceId                    : aea84310-6dbf-4c21-90ac-13980039925a
PSShowComputerName            : True


PS> $s.Runspace.ConnectionInfo
ConnectionUri                     : http://Server01/wsman
ComputerName                      : Server01
Scheme                            : http
Port                              : 80
AppName                           : /wsman
Credential                        :
ShellUri                          : http://schemas.microsoft.com/powershell/Microsoft.PowerShell
AuthenticationMechanism           : Default
CertificateThumbprint             :
MaximumConnectionRedirectionCount : 5
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize         : 209715200
UseCompression                    : True
NoMachineProfile                  : False
ProxyAccessType                   : None
ProxyAuthentication               : Negotiate
ProxyCredential                   :
SkipCACheck                       : False
SkipCNCheck                       : False
SkipRevocationCheck               : False
NoEncryption                      : False
UseUTF16                          : False
OutputBufferingMode               : Drop
IncludePortInSPN                  : False
Culture                           : en-US
UICulture                         : en-US
OpenTimeout                       : 180000
CancelTimeout                     : 60000
OperationTimeout                  : 180000
IdleTimeout                       : 172800000

PS> Disconnect-PSSession $s -IdleTimeoutSec 43200
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 4 ITTask          Server01        Disconnected  Microsoft.PowerShell          None

PS> $s.Runspace.ConnectionInfo.IdleTimeout
43200000

第一个命令使用 New-PSSessionOption cmdlet 创建会话选项对象。它使用 IdleTimeout 参数将空闲超时设置为 48 小时(172800000 毫秒)。该命令将会话选项对象保存在 $Timeout 变量中。

第二个命令使用 New-PSSession cmdlet 在 Server01 计算机上创建 ITTask 会话。该命令将会话保存在 $s 变量中。 SessionOption 参数的值是 $Timeout 变量中的 48 小时空闲超时。

第三个命令断开 $s 变量中的 ITTask 会话。该命令失败,因为会话的空闲超时值超出了会话配置中的 MaxIdleTimeoutMs 配额。由于在会话断开连接之前不会使用空闲超时,因此在会话使用期间可能不会检测到这种违规行为。

第四条命令使用 Invoke-Command cmdlet 为 Server01 计算机上的 Microsoft.PowerShell 会话配置运行 Get-PSSessionConfiguration 命令。该命令使用 Format-List cmdlet 在列表中显示会话配置的所有属性。输出显示 MaxIdleTimeoutMS 属性,该属性建立了允许的最大使用会话配置的会话的 IdleTimeout 值为 43200000 毫秒(12 小时)。

第五个命令获取 $s 变量中会话的会话选项值。许多会话选项的值是会话的 Runspace 属性的 ConnectionInfo 属性。输出显示 IdleTimeout 的值会话的属性为 172800000 毫秒(48 小时),这违反了会话配置中 12 小时的 MaxIdleTimeoutMs 配额。要解决此冲突,您可以使用 >ConfigurationName 参数来选择不同的会话配置,或使用 IdleTimeout 参数来减少会话的空闲超时。

第六个命令断开会话。它使用 IdleTimeoutSec 参数将空闲超时设置为最大值 12 小时。

第七个命令获取已断开连接的会话的 IdleTimeout 属性值,该值以毫秒为单位。输出确认命令成功。

参数

-Confirm

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

类型 :

SwitchParameter

别名:

cf

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

-Id

断开与指定会话 ID 的会话的连接。键入一个或多个 ID(以逗号分隔),或使用范围运算符 (..) 指定 ID 范围。

要获取会话 ID,请使用 Get-PSSession cmdlet。实例 ID 存储在会话的 ID 属性中。

类型 :

Int32[]

位置:

1

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-IdleTimeoutSec

更改断开连接的 PSSession 的空闲超时值。输入一个以秒为单位的值。最小值为 60(1 分钟)。

空闲超时确定断开连接的 PSSession 在远程计算机上维持的时间。当超时到期时,PSSession 将被删除。

断开连接的 PSSession 从断开连接那一刻起就被视为空闲,即使命令正在断开连接的会话中运行也是如此。

会话空闲超时的默认值由会话配置的 IdleTimeoutMs 属性值设置。默认值为 7200000 毫秒(2 小时)。

此参数的值优先于 $PSSessionOption 首选项变量的 IdleTimeout 属性值以及会话配置中的默认空闲超时值。但是,该值不能超过会话配置的 MaxIdleTimeoutMs 属性的值。 MaxIdleTimeoutMs 的默认值为 12 小时(43200000 毫秒)。

类型 :

整数32

位置:

命名

默认值:

60

必需的:

False

接受管道输入:

False

接受通配符:

False

-InstanceId

断开与指定实例 ID 的会话的连接。

实例 ID 是唯一标识本地或远程计算机上的会话的 GUID。即使在多台计算机上的多个会话中,实例 ID 也是唯一的。

要获取会话的实例 ID,请使用 Get-PSSession cmdlet。实例 ID 存储在会话的 InstanceID 属性中。

类型 :

指导[]

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-Name

断开与指定友好名称的会话的连接。允许使用通配符。

要获取会话的友好名称,请使用 Get-PSSession cmdlet。友好名称存储在会话的 Name 属性中。

类型 :

String[]

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

True

-OutputBufferingMode

确定当输出缓冲区已满时如何在断开连接的会话中管理命令输出。默认值为阻止

如果断开连接的会话中的命令返回输出并且输出缓冲区已满,则此参数的值有效地确定命令在会话断开连接时是否继续运行。 Block 值会暂停命令,直到会话重新连接。 Drop 值允许命令完成,但数据可能会丢失。使用 Drop 值时,将命令输出重定向到磁盘上的文件。

有效值为:

  • Block:当输出缓冲区已满时,执行将暂停,直到缓冲区被清除。
  • Drop:当输出缓冲区已满时,继续执行。保存新输出时,最旧的输出将被丢弃。
  • None:未指定输出缓冲模式。会话配置的 OutputBufferingMode 属性的值用于断开连接的会话。
类型 :

输出缓冲模式

位置:

命名

默认值:

堵塞

必需的:

False

接受管道输入:

False

接受通配符:

False

-Session

与指定的 PSSession 断开连接。输入 PSSession 对象,例如 New-PSSession cmdlet 返回的对象。您还可以通过管道将 PSSession 对象传递给 Disconnect-PSSession

Get-PSSession cmdlet 可以获取在远程计算机上终止的所有 PSSession,包括断开连接的 PSSessionPSSession > 连接到其他计算机上的其他会话。 Disconnect-PSSession 仅断开连接到当前会话的 PSSession。如果将其他 PSSession 通过管道传输到 Disconnect-PSSession,则 Disconnect-PSSession 命令将失败。

类型 :

PS会话[]

位置:

1

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-ThrottleLimit

设置 Disconnect-PSSession 命令的限制。

限制是可以建立运行此命令的最大并发连接数。如果省略此参数或输入值 0,则使用默认值 32

限制仅适用于当前命令,不适用于会话或计算机。

类型 :

整数32

位置:

命名

默认值:

32

必需的:

False

接受管道输入:

False

接受通配符:

False

-WhatIf

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

类型 :

SwitchParameter

别名:

wi

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

输入

PS会话

您可以通过管道将会话传输到此 cmdlet。

输出

PS会话

此 cmdlet 返回一个表示它断开连接的会话的对象。

笔记

PowerShell 包含以下 Disconnect-PSSession 别名:

  • Windows:

      dnsn

    此 cmdlet 仅在 Windows 平台上可用。

    • 仅当本地和远程计算机运行 PowerShell 3.0 或更高版本时,Disconnect-PSSession cmdlet 才有效。

    • 如果在断开连接的会话上使用 Disconnect-PSSession cmdlet,则该命令不会对会话产生任何影响,也不会生成错误。

    • 具有交互式安全令牌的已断开环回会话(使用 EnableNetworkAccess 参数创建的会话)只能从创建会话的计算机重新连接。此限制可保护计算机免受恶意访问。

    • 当您断开 PSSession 的连接时,会话状态为已断开,可用性为

      State 属性的值与当前会话相关。因此,值 Disconnected 表示 PSSession 未连接到当前会话。但是,这并不意味着 PSSession 与所有会话断开连接。它可能连接到不同的会话。要确定是否可以连接或重新连接到会话,请使用可用性属性。

      Availability 值为 None 表示您可以连接到会话。 Busy 值表示您无法连接到 PSSession,因为它已连接到另一个会话。

      有关会话的 State 属性值的详细信息,请参阅 RunspaceState 枚举。

      有关会话的 Availability 属性值的详细信息,请参阅 RunspaceAvailability 枚举。

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

    取消回复欢迎 发表评论:

    关灯