Powershell 退出与退出PSSession的行为不同
报告说: 示例3:使用Exit关键字停止会话Powershell 退出与退出PSSession的行为不同,powershell,powershell-4.0,Powershell,Powershell 4.0,报告说: 示例3:使用Exit关键字停止会话 PS C:\>输入PSSession-computername Server01 Server01\PS>退出 PS C:\> 本例使用Exit关键字停止交互式 使用Enter-PSSession启动会话。Exit关键字具有 与使用退出PSSession的效果相同 这意味着Exit相当于Exit PSSession 但是,Exit的行为与Exit PSSession的行为不同 例如,以下输出“废话”: 但这并不是: Exit Write-Host "
PS C:\>输入PSSession-computername Server01
Server01\PS>退出
PS C:\>
本例使用Exit关键字停止交互式
使用Enter-PSSession启动会话。Exit关键字具有
与使用退出PSSession的效果相同
这意味着Exit
相当于Exit PSSession
但是,Exit
的行为与Exit PSSession
的行为不同
例如,以下输出“废话”:
但这并不是:
Exit
Write-Host "blah"
我做错什么了吗?如果您的PowerShell会话不是通过
输入PSSession
进入的远程会话,退出PSSession
是一个安静的无操作,即安静地什么也不做
相比之下,exit
在本地和远程会话中都有效
换言之:
- 仅在远程会话[1]中使用退出PSSession,并且
- 只有
它的等价项退出
似乎主要是为了与Exit PSSession
对称而存在的Enter PSSession
- 您可以选择只使用
,这也有在本地会话中工作的优点退出
至于远程计算机上的PS会话本身是否继续存在(请注意,多达PSv2远程会话仅在客户端计算机上存在): 这取决于它最初是如何创建的:
- 如果会话是通过将计算机名称传递给
(Enter PSSession
)隐式创建的,则在退出会话时它将自动关闭并丢弃(无论您使用的是Enter PSSession-ComputerName…
还是exit
)exit PSSession
- 相比之下,如果您首先显式创建了一个会话,并将其传递给
(Enter-PSSession
),它将继续存在并在您退出交互式会话后保持打开状态(同样,无论退出方法如何),以便以后可以重新输入(例如,也可以与Enter-PSSession-session…
一起重用)调用命令
Get-PSSession
列出本地显式创建的会话;Get-PSSession-ComputerName…
列出给定远程计算机的会话
[1] 正如陈述所暗示的那样(强调部分加上):“结束与远程计算机的交互会话。”“退出PSSessioncmdlet结束您使用
进入PSSession
cmdlet启动的交互式会话。退出做了退出PSSession
可以做的事…但这并不意味着相反的情况成立。[grin]我已经更新了您的问题,包括您使用的参考资料中附带的示例代码。谢谢大家,我的印象是,Exit
是Exit PSSession
的别名,但是我刚刚意识到有一个cmdletGet alias
,它没有列在那里。@FiretopWarlock:一般来说,您可以告诉我们eGet Command
使用任何命令名查看其定义(该名称是指可执行文件、cmdlet、别名、函数还是*.ps1
文件);但是,这不适用于语言关键字,如exit
。非常好,感谢您的进一步澄清。我想再次强调这一点。exit会终止远程会话。状态-关闭;可用性-无
@it3xl:请查看我的更新(在WinPS v5.1和PS Core v7.0-preview 5中验证的行为)。但是,我不确定您想说的是什么:是的,退出隐式创建的会话-无论是使用exit
还是exit PSSession
-都会自动关闭并丢弃它,但这是意料之中的;显式创建的会话应该在打开状态下继续存在-您使用的是旧的PS版本吗,如果是,which、 你知道这种行为是什么时候改变的吗?附言:为什么还要一次?我习惯用Exit
在shell和CMD中大声中断。我在PowerShell远程处理中遇到了这个习惯。看起来我不得不改用Throw
。
Exit
Write-Host "blah"