我正在编写这个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"}