如何让PowerShell加载脚本后保持REPL交互模式
解决PowerShell点源脚本后保持会话打开的问题
我来帮你搞定这个问题!你之前用管道的方式没达到预期,是因为PowerShell处理管道输入和-noexit参数的逻辑和直接指定命令的方式不一样。下面给你几个可靠的方案:
方案一:直接用-Command参数指定点源命令
这是最直接有效的方法,把点源脚本的命令通过-Command参数传给PowerShell,再配合-noexit让会话保持打开:
powershell -noexit -Command ". .\script.ps1"
执行这条命令后,PowerShell会启动、点源你的脚本(加载里面的方法),然后停留在会话里,你可以直接手动调用脚本里的方法。
方案二:在批处理文件中使用(处理路径问题)
如果是写在批处理文件里,为了确保能找到脚本(不管批处理从哪个目录运行),可以用批处理的%~dp0变量获取脚本所在的绝对路径:
@echo off powershell -noexit -Command ". '%~dp0script.ps1'"
%~dp0会自动替换成批处理文件所在的目录路径,这样脚本的路径就不会出错。
为什么你之前的方法不生效?
你用echo . .\script.ps1 | powershell -noexit的方式,PowerShell虽然会执行管道传过来的点源命令,但管道输入结束后,PowerShell的会话会因为输入流关闭而退出,即使加了-noexit也没法阻止这种情况。而用-Command参数是让PowerShell把指定的命令作为初始执行的内容,执行完后-noexit就能正常让会话保持打开。
额外注意事项
如果你的系统执行策略限制了脚本运行,可以加上-ExecutionPolicy Bypass参数跳过检查:
powershell -noexit -ExecutionPolicy Bypass -Command ". .\script.ps1"
内容的提问来源于stack exchange,提问作者ktx
相关产品推荐
相关产品推荐

