【问题标题】:TFS 2017 Build: Cannot Run PowerShellTFS 2017 构建:无法运行 PowerShell
【发布时间】:2018-12-07 23:42:11
【问题描述】:

我们使用的是 TFS 2017,它配置了多个构建版本。不久前,我们开始在第二步中遇到错误,即运行 PowerShell 脚本(第一步是获取源代码):

2018-06-28T19:58:59.4326443Z ##[command]. 'K:\_work\3\s\BuildScripts\MainPre.ps1' -env "test"
2018-06-28T19:58:59.6236482Z ##[error]Access is denied
2018-06-28T19:58:59.6266488Z ##[section]Finishing: PowerShell Script

4 小时前的构建运行良好。没有对文件或文件系统进行任何更改。我正在等待网络团队的消息,看看他们是否对构建帐户做了任何事情。

什么可能导致这个错误突然发生,我该如何解决?注意:我还没有尝试将其关闭再打开。

【问题讨论】:

    标签: powershell tfs tfsbuild


    【解决方案1】:

    根据错误消息“##[error]Access is denied”,似乎是权限问题。

    请尝试以下项目来缩小问题范围:

    • 在Get sources步骤中启用Clean选项:将Clean设置为 True 并在 Clean options. 下选择 Sources Directory
    • 检查代理服务账号是否有正确的权限 访问脚本。

    • 尝试更改另一个具有正确权限的帐户
      以服务帐户访问代理 _work 文件夹,然后进行队列构建 再次。

    • 部署一个新代理,再试一次。

    如果这仍然不起作用,只需在变量选项卡中打开system.debug(设置为 true)以捕获日志并在此处分享以进行进一步的故障排除。

    【讨论】:

    • 是的,这似乎是一些奇怪的新权限,尤其是时间安排。事件查看器说 Symantec SONAR 正在阻止它。有什么我可以提供给网络人员以解决您知道的问题吗?
    • @DaveJohnson 似乎 Symantec SONAR 阻止它运行。只需尝试为 PowerShell.exe 创建一个例外,然后再试一次。您也可以尝试在 TFS 服务器本身上部署新代理,然后检查是否可行。
    【解决方案2】:

    Powershell 任务在执行脚本时似乎在运行某种安全检查?

    我在 DEBUG 中运行了 powershell 任务,您可以看到该任务在此处隐式运行了一些安全工作。

    这确实让我在运行时拒绝访问:

    ##[debug]C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 
    
    -NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command "try { $null = [System.Security.Cryptography.ProtectedData] } catch { Write-Verbose 'Adding assemly: System.Security' ; Add-Type -AssemblyName 'System.Security' ; $null = [System.Security.Cryptography.ProtectedData] ; $Error.Clear() } ; Invoke-Expression -Command ([System.Text.Encoding]::UTF8.GetString([System.Security.Cryptography.ProtectedData]::Unprotect([System.Convert]::FromBase64String('AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAARs9EULLEBU+ppaGEeISmGgAAAAACAAAAAAADZgAAwAAAABAAAABLYbw0iUTABtaCw2PJ5KrrAAAAAASAAACgAAAAEAAAAOg6VMmANxZJSRmKjPWauqRYAAAAqDSQVtB4LtvBaujeTs1GKn4CPFrW484weBNwtJ7aujcJLWV4wBLHD9n+IEVZ6z13oyIpyxUEceTtiMKnfuO8irwX9l5DoHqlMGU6mx1Q5kou2V6ITEcl0BQAAAD1h7qvkyE8+PcdKmVKLHVpqYO4mA=='), [System.Convert]::FromBase64String('8yTvn1ZlLZGC7M3ewDzbLw=='), [System.Security.Cryptography.DataProtectionScope]::CurrentUser))) ; if (!(Test-Path -LiteralPath variable:\LastExitCode)) { Write-Verbose 'Last exit code is not set.' } else { Write-Verbose ('$LastExitCode: {0}' -f $LastExitCode) ; exit $LastExitCode }"
    2018-06-30T12:44:57.8488275Z ##
    

    【讨论】:

      【解决方案3】:

      在检查服务器时,我注意到事件查看器显示 Symantec SONAR 阻止了 power shell 脚本。在我们的网络团队为构建过程添加异常后,我们的构建再次按预期工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 2017-11-15
        • 2018-11-21
        • 2017-07-04
        • 2017-12-17
        • 2018-06-16
        • 2019-10-17
        • 1970-01-01
        相关资源
        最近更新 更多