gpt4 book ai didi

powershell - 在远程服务器上获取所有打开的 PS session (从新的控制台窗口)

转载 作者:行者123 更新时间:2023-12-03 23:49:10 24 4
gpt4 key购买 nike

我可以在远程服务器上启动 5 个新的 PS session ,并通过运行 Get-PSSession 来查看它们

PS C:\> New-PSSession -ComputerName MyServerName

Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Session1 MyServerName Opened Microsoft.PowerShell Available

[repeat 4 more times]

正如预期的那样,当我尝试打开第 6 个 session 时,我收到错误消息,说这是一个禁忌(由于 PoswerShells 默认限制为 5 个并发远程 PSSession)。但是运行 Get-Session 会显示所有 5 个 session ,因此到目前为止一切正常:
PS C:\> New-PSSession -ComputerName MyServerName
New-PSSession : [......maximum number of 5 concurrent shells]

PS C:\> Get-PSSession

Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Session1 MyServerName Opened Microsoft.PowerShell Available
2 Session2 MyServerName Opened Microsoft.PowerShell Available
3 Session3 MyServerName Opened Microsoft.PowerShell Available
4 Session4 MyServerName Opened Microsoft.PowerShell Available
5 Session5 MyServerName Opened Microsoft.PowerShell Available

但是,当我关闭该控制台并打开一个新控制台时,运行 Get-PSSession(无论是否定义了“-ComputerName”参数)都不会显示任何打开的 session 。
PS C:\> Get-PSSession
PS C:\>

我知道这些 session 仍然打开,因为当我尝试在我的新控制台中打开一个新的 session 时,我收到关于 5 个以上并发 session 的相同错误:
PS C:\> New-PSSession -ComputerName MyServerName
New-PSSession : [......maximum number of 5 concurrent shells]

根据 'Get-PSSession Get-Help -full' 运行 'Get-PSSession -ComputerName MyServerName 应该在特定服务器上获取所有远程 PS session ,无论它们是从哪个 session 或计算机启动的(至少我理解的方式):

"The command returns all of the sessions on [the remote server], even if they were created in different sessions or on different computers."



那么,有没有一种方法可以在远程服务器上查找和/或删除任何打开的 PS session ——而不必从一个控制台 session 中完成所有操作?

最佳答案

据我所知...

您创建的 PSSession 在“MyServerName”上实时存在,并且在您首次创建它们的 session 期间,也将由 Get-PSSession 返回(不带参数,在您远程发送的框的 PowerShell 窗口中)。当您关闭创建它们的 session 时,这些 session 将不再位于您的计算机上。这就是当您关闭并打开一个新的 PowerShell 窗口时 Get-PSSession 不返回任何内容的原因。它们从未“存在”在您的计算机上,它们是远程 session ,但是,它们在您原始 PowerShell 窗口中的范围内,因为这是您在其中创建它们的本地范围。

如果您的 session 仍在 MyServerName 上,因为它们似乎是由于您提到的有关最大 session 的错误,则键入以下命令应列出它们:

Get-PSSession -ComputerName MyServerName

如果您想在现有 session /窗口中重新连接它们,您可以执行以下操作:
Get-PSSession -ComputerName MyServerName | Connect-PSSession

将它们全部删除,使您能够为 MyServerName 创建新的 PSSession
Get-PSSession -ComputerName MyServerName | Remove-PSSession

在文档中进一步查看,当您关闭 PowerShell 窗口时,所有 session 都不会无限期地存在。看:

Get-Help about_Remote_Disconnected_Sessions -ShowWindow

partial excerpt (with emphasis mine):

If you close (exit) the session in which a PSSession was created while commands are running in the PSSession, Windows PowerShell maintains the PSSession in the Disconnected state on the remote computer. If you close (exit) the session in which a PSSession was created, but no commands are running in the PSSession, Windows PowerShell does not attempt to maintain the PSSession.



从我所见,当您关闭启动 PSSession 的 PowerShell 窗口时,不会 a) 断开连接或 b) 忙于运行命令的 session 被丢弃。此外,文档似乎确实提到还有超时(这可能取决于服务器上的 PSSessionConfigurations,但我自己对这些一无所知(除了它们存在)。

这是我筛选一些 PowerShell Remoting 文档的好借口,还可以查看:
Get-Help *PSSession*
Get-Help *remote*

关于powershell - 在远程服务器上获取所有打开的 PS session (从新的控制台窗口),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17846417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com