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

PowerShell函数调用问题:仅文件缺失时触发CompleteTask

问题:PowerShell函数总是触发CompleteTask,如何仅在文件缺失时执行?

我编写了如下PowerShell代码:

Function Send-FileWarnings {    
    $missingfileind = 0
    $filesList = @("file_12.txt", "file_2.txt")
    foreach ($pattern in $filesList) {
        if ($file = Get-ChildItem -Path $LOCAL_LOCATION -Filter $pattern -ErrorAction SilentlyContinue){}
         else {
            $missingfileind = 1
            Log-Message "$($pattern): does not exist in $LOCAL_LOCATION"            
        }   
    }    Log-Message "##Send-FileWarnings: [END]"
         if ($missingfileind -eq 1)
         {
         CompleteTask $script:Warning }
         else {} 
}

我在其中调用了另一个会发送邮件的CompleteTask函数,目前每次运行Send-FileWarnings都会触发它。我希望仅在检测到文件缺失时才触发CompleteTask,无文件缺失时则不运行。请问是我遗漏了大括号还是缩进有问题?


问题分析与修正

你的代码没有大括号缺失的语法问题,但缩进混乱导致可读性极差,容易混淆逻辑,同时可以优化写法让逻辑更清晰。以下是修正后的代码:

Function Send-FileWarnings {    
    $missingFileInd = 0
    $filesList = @("file_12.txt", "file_2.txt")

    foreach ($pattern in $filesList) {
        # 直接检查文件是否不存在,无需空if块
        if (-not (Get-ChildItem -Path $LOCAL_LOCATION -Filter $pattern -ErrorAction SilentlyContinue)) {
            $missingFileInd = 1
            Log-Message "$pattern does not exist in $LOCAL_LOCATION"            
        }   
    }

    Log-Message "##Send-FileWarnings: [END]"

    # 仅当存在缺失文件时触发邮件通知
    if ($missingFileInd -eq 1) {
        CompleteTask $script:Warning
    }
    # 无缺失时无需执行操作,可省略空else块
}

关键调整说明:

  1. 规范缩进:将Log-Message和判断if语句单独换行对齐,避免代码挤在一起导致逻辑误解。
  2. 简化逻辑:把原有的空if块改为-not直接判断文件是否不存在,代码更直观。
  3. 删除冗余代码:无文件缺失时不需要执行任何操作,空else块可以直接删除。

关于始终触发CompleteTask的排查方向:

如果修正格式后问题仍存在,和大括号/缩进无关,大概率是以下原因:

  • $LOCAL_LOCATION变量未正确定义,或指向的路径不存在,导致所有文件都被判定为缺失。
  • filesList中的文件确实全部不存在,$missingFileInd始终被设为1。
  • 检查$script:Warning变量的传递逻辑,确认CompleteTask是否因其他条件被误触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:07:29