powershell 远程执行bat脚本,去启动一个应用,如何让应用一直运行,powershell能正常退出?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了powershell 远程执行bat脚本,去启动一个应用,如何让应用一直运行,powershell能正常退出?相关的知识,希望对你有一定的参考价值。

如图,如何通过powershell 执行bat脚本启动应用,powershell 却一直不能退出,只有把启动的应用关闭了,才能退出。有没有办法让应用一直运行,powershell又能正常退出?

start “.\4511_start.bat"
这样执行就会以新窗口运行bat脚本,而不再占用powershell
参考技术A powershell里不需要echo
"start cmd" >>2.bat
这样就可以了

使用Powershell脚本启动的批处理文件设置环境变量

我有一个名为SET_ENV.bat的批处理脚本,其中包含其他批处理脚本使用的环境变量。目前,此SET_ENV.bat由现有批处理脚本启动。

现在我需要使用Powershell脚本,我想启动相同的SET_ENV.bat。我设法使用:

cmd.exe /c ....SET_ENV.bat

我知道批处理文件已运行,因为它包含一个echo

echo *** Set the environment variables for the processes ***

但在查看环境变量之后,我可以看到它们都没有更新过。是否存在阻止我使用Powershell +批处理文件组合更新环境变量的内容?

我已经从命令行直接尝试了SET_ENV.bat,它可以工作。我也尝试过使用“-Verb runAs”的Start-Process cmdlet,但这没有任何好处。

答案

环境变量是进程的本地变量,并且可以继承(默认情况下至少)新的子进程。在您的情况下,您启动了cmd的新实例,该实例继承了PowerShell的环境变量,但具有自己的环境。批处理文件然后更改该cmd实例的环境,该实例随后关闭并返回到PowerShell脚本。当然,PowerShell的环境中没有任何变化。

它在cmd中工作,因为批处理文件在同一个进程中执行,因此批处理文件可以设置环境变量,然后它们可用,因为批处理文件未在新进程中执行。如果您在交互式cmd /c setenv.cmd会话中使用cmd,您会发现您的环境也没有改变。

您可以尝试其他选项,例如在语言无关的文件中指定环境变量,由cmd或PowerShell读取以相应地设置环境。或者,您可以在首次运行批处理文件后从cmd启动PowerShell脚本。或者,您可以在用户帐户下设置这些环境变量,以便不再需要关心它们。或者你只有一个setenv.cmd和一个setenv.ps1并保持同步更新。

以上是关于powershell 远程执行bat脚本,去启动一个应用,如何让应用一直运行,powershell能正常退出?的主要内容,如果未能解决你的问题,请参考以下文章

如何在powershell 运行bat

powershell中如何执行bat文件

powershell脚本隐藏退出码

使用Powershell脚本启动的批处理文件设置环境变量

如何使用Powershell脚本中的多个参数执行.Bat

MSSQL/WMI/PowerShell结合篇执行PowerShell远程脚本