Loc*_*eds 13 powershell remote-access powershell-3.0
我可以在远程服务器上启动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]
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,当我尝试打开第6次会议,我得到的错误说,这是一个没有没有(5个并发远程PSSession中由于PoswerShells默认限制).但是运行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
Run Code Online (Sandbox Code Playgroud)
然而,当我关闭控制台,并打开一个新的,运行Get-PSSession中(有或没有定义的"-ComputerName"参数)显示根本没有打开的会话.
PS C:\> Get-PSSession
PS C:\>
Run Code Online (Sandbox Code Playgroud)
我知道这些会议仍然是开放的,因为当我尝试打开我的新的控制台一个新的我得到关于超过5个并发会话相同的错误:
PS C:\> New-PSSession -ComputerName MyServerName
New-PSSession : [......maximum number of 5 concurrent shells]
Run Code Online (Sandbox Code Playgroud)
根据'Get-PSSession Get-Help -full'运行'Get-PSSession -ComputerName MyServerName应该获取特定服务器上的所有远程PS会话,无论他们从哪个会话或计算机启动(至少我理解它):
"该命令返回[远程服务器]上的所有会话,即使它们是在不同的会话中或在不同的计算机上创建的."
那么,有没有办法在远程服务器上查找和/或删除任何打开的PS会话 - 而无需在一个控制台会话中完成所有操作?
Jos*_*non 12
据我所知......
您在"MyServerName"上创建的PSSession,在您首次创建它们的会话期间,也将由Get-PSSession返回(没有参数,在您正在远程处理的框中的PowerShell窗口中).当您关闭创建的会话时,会话不再在您的计算机上.这就是当您关闭并打开一个新的PowerShell窗口时Get-PSSession不返回任何内容的原因.它们永远不会"存在"您的计算机上,它们是远程会话,但是,它们位于原始PowerShell窗口的范围内,因为这是您创建它们的本地范围.
如果您的会话仍在MyServerName上,因为它们似乎是由于您提到的有关最大会话的错误,那么键入以下命令应该列出它们:
Get-PSSession -ComputerName MyServerName
Run Code Online (Sandbox Code Playgroud)
如果要在现有会话/窗口中重新连接它们,可以执行以下操作:
Get-PSSession -ComputerName MyServerName | Connect-PSSession
Run Code Online (Sandbox Code Playgroud)
要全部删除它们,您可以创建到MyServerName的新PSSession
Get-PSSession -ComputerName MyServerName | Remove-PSSession
Run Code Online (Sandbox Code Playgroud)
在文档中进一步了解,当您关闭PowerShell窗口时,所有会话都无法无限期地存在.看到:
Get-Help about_Remote_Disconnected_Sessions -ShowWindow部分摘录(强调我的):
如果在PSSession中运行命令时关闭(退出)创建PSSession的会话,则Windows PowerShell会将PSSession维持在远程计算机上的"已断开连接"状态.如果关闭(退出)创建PSSession的会话,但PSSession中没有运行任何命令,则Windows PowerShell不会尝试维护PSSession.
从我所看到的,当您关闭启动PSSession的PowerShell窗口时,将忽略非a)断开连接或b)忙于运行命令的会话.此外,文档似乎确实提到还有超时(这可能取决于服务器上的PSSessionConfigurations,但我自己也不知道这些(除了它们存在).
这是我筛选一些PowerShell Remoting文档的一个很好的借口,同时看看:
Get-Help *PSSession*
Get-Help *remote*
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50457 次 |
| 最近记录: |