PowerShell新版本调用外部脚本时路径识别报错如何修复?
问题根因
- 新服务器未配置
AuxDrive系统环境变量:旧服务器上该环境变量值为E:,脚本执行时$env:AuxDrive可以正常解析出盘符,拼接为完整路径E:\myFolder\Get-CValue.ps1;新服务器该变量为空,拼接后路径变为\myFolder\Get-CValue.ps1,系统无法识别,对应首次执行的报错信息。 - 手动修改路径时语法错误:
$env:E:\myFolder\Get-CValue.ps1的写法错误,$env:是PowerShell取环境变量的固定前缀,E不是合法的环境变量名,因此无法解析出正确路径。 - 注释点源代码后函数报错是正常现象:
Get-CValue函数定义在Get-CValue.ps1中,没有加载该脚本自然无法识别函数。
修复方案
方案1:直接使用绝对路径(临时快速修复)
直接去掉错误的$env:前缀,写完整的实际路径即可,修改点源加载代码为:
. "E:\myFolder\Get-CValue.ps1"
方案2:给新服务器配置AuxDrive环境变量(兼容旧代码逻辑)
如果需要保持原有代码不变,在新服务器添加系统环境变量即可:
- 按下
Win+R输入sysdm.cpl打开系统属性,切换到「高级」选项卡,点击「环境变量」 - 在「系统变量」区域点击「新建」,变量名填
AuxDrive,变量值填E: - 保存后重启PowerShell终端,重新执行脚本即可正常识别路径
方案3:使用相对主脚本的路径(通用推荐,不依赖环境变量和盘符配置)
因为两个脚本都存放在同一个myFolder目录下,可以用PowerShell自动获取的主脚本所在目录变量$PSScriptRoot拼接路径,兼容性更强:
. "$PSScriptRoot\Get-CValue.ps1"
这种写法不管脚本放在哪个盘符、哪个目录,只要两个脚本的相对位置不变,就可以正常加载。
内容的提问来源于stack exchange,提问作者faujong
相关产品推荐
相关产品推荐

