我可以在远程服务器上启动5个新的PS会话,并通过运行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个会话时,我收到错误消息,说明是禁止的(由于PoswerShells默认限制为5个并发远程PSSession)。但是运行Get-Session会显示所有5个会话,因此到目前为止一切正常:
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'参数)都没有显示打开的会话。
PS C:\> Get-PSSession
PS C:\>
我知道这些会话仍处于打开状态,因为当我尝试在新控制台中打开一个新会话时,我会收到超过5个并发会话的相同错误:
PS C:\> New-PSSession -ComputerName MyServerName
New-PSSession : [......maximum number of 5 concurrent shells]
根据'Get-PSSession Get-Help -full'运行'Get-PSSession -ComputerName MyServerName应该在特定服务器上获得所有远程PS会话,无论他们从哪个会话或计算机启动(至少我理解的方式):
“该命令返回[远程服务器]上的所有会话,甚至 如果它们是在不同的会话中或在不同的计算机上创建的。“
那么,有没有办法在远程服务器上查找和/或删除任何打开的PS会话 - 而无需在一个控制台会话中完成所有操作?
答案 0 :(得分:12)
据我所知......
您在“MyServerName”上创建的PSSession,并且在您首次创建它们的会话期间,Get-PSSession也将返回(没有参数,在您远程处理的框中的PowerShell窗口中) )。当您关闭创建的会话时,会话不再在您的计算机上。这就是当您关闭并打开一个新的PowerShell窗口时Get-PSSession不返回任何内容的原因。它们永远不会“存在”您的计算机上,它们是远程会话,但是,它们是原始PowerShell窗口中的范围,因为这是您创建它们的本地范围。
如果您的会话仍然在MyServerName上,因为它们似乎是由于您提到的有关最大会话的错误,那么键入以下命令应该列出它们:
Get-PSSession -ComputerName MyServerName
如果您想在现有的会话/窗口中重新连接它们,您可以这样做:
Get-PSSession -ComputerName MyServerName | Connect-PSSession
要全部删除它们,您可以创建新的PSSession到MyServerName
Get-PSSession -ComputerName MyServerName | Remove-PSSession
在文档中进一步了解,当您关闭PowerShell窗口时,所有会话都无法无限期地存在。参见:
Get-Help about_Remote_Disconnected_Sessions -ShowWindow
部分摘录(强调我的):
如果您关闭(退出)创建PSSession的会话 Windows PowerShell维护的命令在PSSession中运行 PSSession处于远程计算机上的Disconnected状态。 如果你 关闭(退出)创建PSSession的会话,但不是 命令在PSSession中运行,而Windows PowerShell则没有 尝试维持PSSession。
从我所看到的,当您关闭从PSSessions启动的PowerShell窗口时,将忽略非a)断开连接或b)忙于运行命令的会话。此外,文档似乎确实提到还有超时(这可能取决于服务器上的PSSessionConfigurations,但我自己也不了解这些(除了它们存在)。
这对我来说是一个很好的借口来筛选一些PowerShell远程处理文档,同时看看:
Get-Help *PSSession*
Get-Help *remote*
答案 1 :(得分:0)
从我的实验中,如果会话没有做任何事情,那么他们就会在远程端关闭。为了防止这种情况,要么让他们做某事,例如:
Invoke-Command -Session $s { ... } -AsJob
Invoke-Command server01 { ... } -Disconnected
或另一种选择是断开会话:
Disconnect-PSSession -Id (1..5)
这两种方法都会导致远程会话保持活跃状态。
答案 2 :(得分:-1)
今天遇到同样的问题我从jrich那里遇到了这套很好的功能。 我甚至只是将功能粘贴到我的PS窗口并运行
"<computername>" | Get-RemotePSSession | Remove-RemotePSSession
和瞧!在所述计算机上不再有左开会话。
这是他博客的直接链接。 https://jrich523.wordpress.com/2012/01/19/managing-remote-wsman-sessions-with-powershell/#comment-1079