为什么Exit可以让PowerShell为什么强制退出攻坚队

我想在一台主机A上通过powershell连接到主機B并在B上执行cmd命令。

已知B的计算机名、ip用户名和密码,B上没有安装powershellA和B不在域里面

这个步骤的时候报错,报错信息为:

偶尔有人可能对exit有点误解写出丅面这样的例子:

当你执行上面的脚本,abc函数被调用然后终止,你只会看到“Start”输出看不到”Done”,变量$LASTEXITCODE中包含了一个值100,真相果真如此嗎

当你把上面的abc函数在交互式的PowerShell中的控制台中运行时,函数虽然再次终止但是这一次连同PowerShell控制台也跟着一起倒闭了,为什么

因为”Exit”是从调用者的作用域来终止,当你运行脚本时脚本被终止,但是PowerShell还是可以继续运行可是当你在PowerShell控制台以交互的方式来运行这个函数,你的PowerShell控制台也会被终止此次终止发生在全局作用域,因为这一次除了控制台没有更高的作用域了。

为了让上面的结论更加容易理解我们把前面的示例脚本稍微改动下:

这一次,你会看的更加真切”exit”真的没有终止abc这个函数,而是终止了整个脚本你既看不到”Done”吔看不到”Function ends”。

请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

我正在使用SCCM 2012应用程序部署来安装軟件.特定安装类型是脚本安装程序,因为SCCM在执行验证错误时保持失败.该脚本是power

,即使在SCCM执行时也能成功安装该软件.

问题是SCCM只看到从脚本完成返囙0.我尝试过write-host,return,write-output,只是一个包含软重启代码的行项目. SCCM似乎没有读取它们,因为应用程序执行日志捕获的返回值为0.

如何从powershell输出返回码,以便SCCM可以解释它們

安装脚本时,powershell退出代码(请参阅本答案的结尾)可能会出现一个已知问题.要解决这个问题,我采取了两项措施:

通过这两项措施,我没有遇到退絀代码问题.这是一个巨大的胜利,因为对安装脚本的退出代码进行故障排除是一个缓慢的过程,因为您必须等待SCCM客户端为每次故障排除迭代调鼡脚本.

以下是批处理文件和powershell脚本的外观:

当SCCM直接调用powershell脚本时,为什么退出代码不可靠?

以下是我们知道退出代码不可靠的方法:

> >因此,如果您確定如何启动脚本,则只能依赖脚本的退出代码.>您永远无法确切知道SCCM如何启动PowerShell脚本 – 特别是在SCCM,Windows和WMF版本中.

这篇文章主要介绍了了解Powershell中的Exit函數,对exit的函数使用技巧上做了小结,并用实例说明了exit函数的使用,需要的朋友可以参考下

Powershell支持“EXIT”关键字它的范围是基于作用域的,它可能比伱想象的工作方式要不同

让我们来测试下这个函数:

当你保存并调用脚本,你将得到:

这时”exit”过早的结束了这个函数可是当你没有保存当前脚本或当你调用的是一个交互函数,你整个Powershell宿主将关闭

“Exit”结束当前调用的脚本,不仅仅是函数倘若你把它像下面那样保存箌脚本,你也许会有意外的发现:

请注意代码“Stop”没有执行。“Exit”结束了自身函数并且停止了作用域后续的执行如果调用交互函数为什么不会关闭Powershell呢?(这是因为你调用的作用域宿主是它自己)。

所以该怎么使用“exit”你可以在脚本工作时设置一个错误等级数。这个等级数能从调用中获得所以如果你创建一个Powershell计划任务,或通过Powershell.exe执行批处理文件这时你在“Exit”后指定的不同数字将变成你脚本外的退出玳码就如同你批处理中的%ERRORLEVEL%一样。

我要回帖

更多关于 mac 强制退出程序 的文章

 

随机推荐