缺少语句块开关导致脚本出错



我正在编写这个powershell脚本,用于自动化TFS部署。下面是在switch语句子句中抛出错误Missing statement block的脚本部分。语法对我来说是正确的,但我似乎无法解决这个错误。什么好主意吗?

function core ([string]$EnVar)
    {
# Set the build parameters
    $params="environment="+$EnVar+";SQLServer="+$SQLServer+";IISServer="+$IISServer+";DBName="+$DBName
    write-output $params >> $OutputFile
    C:WINDOWSMicrosoft.NETFrameworkv4.0.30319MSBuild.exe $DeploymentScript /p:$params >> $OutputFile 2>&1
    write-output $params >> $OutputFile
    write-output $LastExitCode >> $OutputFile
if ($LastExitCode -ne 0)
{
    write-output "An error has occured." >> $OutputFile
    $outline = "Updating build quality to Failed " + $Environment + " Deployment." 
    write-output $outline >> $OutputFile
    switch ($EnVar)
    {
        "Test" {$build.Quality = "Failed Test Deployment"}
        "Stage" {$build.Quality = "Failed Stage Deployment"}
        "Prod" {$build.Quality = "Failed Production Deployment"}
        default {$build.Quality = "Rejected"} 
    }
    $build.Save()
     $cmdLine = "/ID 2 /L ""Operation Logs"" /T ERROR /SO $tfsProject.DeployTo$EnVar /D ""($buildNumber) deployed by ($requestedby) FAILED! Deployment log file: $OutputFile """
    invoke-expression "$tool $cmdline"
    write-output "Sending failure email." >> $OutputFile
    $to = $emailRequestedBy
    $body = "<html>Deployment log file: """+ $OutputFile + """</html>"
    $subject = $tfsProject + " " + $EnVar + " Deployment failed"
    send-SMTPmail -to $to -from "tfsservice@vistex.com" -subject $subject -html -body $body
    exit(1)
}
else 
{
    $outline = "Successfully deployed to " + $EnVar + "."
    write-output $outline >> $OutputFile
    $outline = "Updating build quality to Deployed to " + $EnVar + "."
    write-output $outline >> $OutputFile
    switch ($EnVar)
    {   
        "Test" ($build.Quality = "Deployed to Test"}
        "Stage" {$build.Quality = "Deployed to Stage"}
        "Prod" {$build.Quality = "Deployed to Production"}
        default {$build.Quality = "Rejected"} 
    }
    $build.Save()
    $cmdLine = "/ID 1 /L ""Operation Logs"" /T SUCCESS /SO $tfsProject.DeployTo$EnVar /D ""($buildNumber) deployed by $requestedby successfully finish. Deployment log file: $OutputFile """
    invoke-expression "$tool $cmdline"
    write-output "Sending success email." >> $OutputFile
    $to = $emailRequestedBy
    $body = "<html>Deployment log file: """+ $OutputFile + """</html>"
    $subject = $tfsProject + " " + $EnVar + " Deployment successfully completed"
    send-SMTPmail -to $to -from "tfsservice@vistex.com" -subject $subject -html -body $body
} 
}

找到问题。这是个错别字……在"测试"用例中,您有(而不是{:

else 
{
    $outline = "Successfully deployed to " + $EnVar + "."
    write-output $outline >> $OutputFile
    $outline = "Updating build quality to Deployed to " + $EnVar + "."
    write-output $outline >> $OutputFile
    switch ($EnVar)
    {   
        "Test" ($build.Quality = "Deployed to Test"}
        "Stage" {$build.Quality = "Deployed to Stage"}
        "Prod" {$build.Quality = "Deployed to Production"}
        default {$build.Quality = "Rejected"} 
    }

将行更新为:

        "Test" {$build.Quality = "Deployed to Test"}

最新更新