为何在自定义脚本中执行.$profile.AllUsersHosts无法重载PowerShell配置?
解决PowerShell脚本中重载配置文件无效的问题
直接在终端输入.$profile.AllUsersHosts能生效,是因为这个命令在当前PowerShell会话里执行,配置变更直接作用于当前环境。但把命令放进脚本后,默认情况下脚本会启动一个独立的子PowerShell进程运行,子进程里加载配置的改动只会局限在这个子进程里,执行完子进程就退出了,父终端完全感知不到变化。
解决办法很简单,要让脚本在当前会话的上下文中执行,而不是启动子进程:
不要直接双击脚本或者输入
.\profile.ps1运行,而是在终端里用点源方式调用:. .\profile.ps1注意两个点之间有空格,第一个点表示“在当前会话中执行指定脚本”,这样脚本里的
.$profile.AllUsersHosts就会在当前终端会话里生效,配置重载的效果能直接体现出来。如果你的脚本需要接受参数,点源调用时直接把参数跟在后面就行:
. .\profile.ps1 -YourParameter Value
另外也可以在脚本里加个判断,提示用户必须用点源方式运行,避免误用:
# 在脚本开头添加 if ($MyInvocation.InvocationName -ne '.') { Write-Warning "请用点源方式运行本脚本:. $($MyInvocation.MyCommand.Path)" exit 1 } # 后续执行重载命令 .$profile.AllUsersHosts
内容的提问来源于stack exchange,提问作者BorisBe
相关产品推荐
相关产品推荐

