【错误记录】PowerShell 超级无语的语法错误(令人怀疑人生)

曾经做过测试,本文是本章优秀测试人员的精神,必须定位到原因,不然吃不下饭。其实可以很容易绕过这种问题。

环境:

  PowerShell 5.1.16299.64

  Windows 10

 

现有代码如下:

# 备份代码
Function backup_code()
{

    # 异常处理块, 覆盖命令的 ErrorAction, 所以如果 $ErrorActionPreference 为 Continue, 单行命令的 ErrorAction 为 Stop 并不会阻止脚本执行
    Trap {

        Write-Host "Backup code occurred error: $($_.Exception.Message)"
        Set-Location $CurrentPath -ErrorAction "SilentlyContinue"
        return $False
    }
    return 2
}

运行脚本一直报一个错误:

说是 Function backup_code 中最后的一个" } "有问题, 意外标记,这是语法错误,但是我查了好久,每条语句执行都没有问题。

最终,我发现删除函数里面的第一行注释,就可以。但是我觉得肯定不是简单的说 Trap 必须函数首行或者注释不能在首行,我不行。所以,我尝试过很多方法:

  • 删除注释: 错误消失
  • 将注释分解为几行:错误仍在
  • 将注释后面一部分删除:错误消失
  • 将注释移到Trap中:错误消失

 这简直不可理喻有没有??????????

为了更精确的定位那个问题,我将注释后面的一部分 "单行命令的 ErrorAction 为 Stop 并不会阻止脚本执行" 从后往前各种组合删除和打乱顺序,以及进行逐个字删除。

最后发现:

  当把"并"字删除后,错误消失!!!!!!!!

 

总结:

  此情况仅在函数中定义 Trap 异常处理块,且在 Trap 块上有""字注释, 才会出现这种问题,俩个条件缺一不可。如果是Try-Catch-Finally等不会出现。

 

Update:

      不是因为并的原因, 而是因为中文字符导致换行符被破坏了,所以,造成了这种问题

 

至此,我想说:我对此表示无语,"并" 保留对微软追究精神损失费的权利。

 

posted @ 2017-11-22 17:10  彭玉松  阅读(584)  评论(0编辑  收藏  举报