You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本调用循环问题求助:避免Connect.ps1自调用

解决方案

问题根源

  1. 路径错误:原代码中Get-ChildItem "\.Module"的路径写法无效,会指向系统根目录下的.Module文件夹,而非目标Module目录。
  2. 对象类型不匹配:$MyInvocation.MyCommand是CommandInfo对象,直接与文件名(字符串)用-notlike比较会导致匹配失效,无法正确排除当前脚本。
  3. 相对路径风险:使用. .\Module\$_加载脚本时,若当前位置被Set-Location修改,容易出现路径解析错误。

修正后的代码(Connect.ps1)

# 获取当前脚本所在的Module目录绝对路径
$moduleDir = $PSScriptRoot

# 获取当前运行的脚本文件名
$currentScriptName = $MyInvocation.MyCommand.Name

# 遍历Module目录下所有.ps1文件,排除当前脚本
Get-ChildItem -Path $moduleDir -Filter "*.ps1" | Where-Object { $_.Name -ne $currentScriptName } | ForEach-Object {
    Write-Host "加载脚本: $($_.Name)"
    . $_.FullName  # 使用绝对路径加载,避免位置变化导致的错误
}

额外优化建议

  • 若Caller.ps1中也存在相同的加载逻辑,建议将这段代码封装为独立函数,避免重复编写。
  • 尽量避免使用Set-Location修改当前工作位置,优先用绝对路径处理文件操作,减少路径相关的意外问题。

内容的提问来源于stack exchange,提问作者TheRob87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:50:03