Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 退出与退出PSSession的行为不同_Powershell_Powershell 4.0 - Fatal编程技术网

Powershell 退出与退出PSSession的行为不同

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 "

报告说:

示例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 "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
的别名,但是我刚刚意识到有一个cmdlet
Get alias
,它没有列在那里。@FiretopWarlock:一般来说,您可以告诉我们e
Get 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"