为什么powershell脚本跳到最后?

时间:2017-10-11 02:50:55

标签: powershell azure azure-service-fabric

我有一个小的Powershell脚本应该在本地部署一些服务结构应用程序:

我试图像这样执行它:

.\Deploy.ps1 -ArtifactPath C:\packages\EnterpriseAPIPackages201710109749b

由于某种原因,它会跳到脚本的最后一行!

enter image description here

我做错了什么?如何执行所有行?

Param
(
    [String]
    $ArtifactPath
)

$LocalFolder = Split-Path -parent $MyInvocation.MyCommand.Path

$DeployScriptFile = "$LocalFolder\Scripts\Deploy-FabricApplication.ps1"

$ConfigFilePath = "$LocalFolder\config.xml"

$ConfigFilePath = Resolve-Path $ConfigFilePath

[Xml]$configParameters =  (Get-Content $ConfigFilePath)

$services = $configParameters.DeploymentConfiguration.Microservices

if (!$ArtifactPath)
{
    $ArtifactPath = $LocalFolder
}

$ApplicationPackageFiles = Get-ChildItem -Path $ArtifactPath -Filter ApplicationManifest.xml -Recurse -Force -ErrorAction SilentlyContinue

foreach($ApplicationPackageFile in $ApplicationPackageFiles)
{
    $ApplicationPackagePath = Split-Path -Parent -Path $($ApplicationPackageFile.FullName)
    $ProjectName = Split-Path $ApplicationPackagePath -Leaf
    Write-Host "Start PowerShell script to deploy Microservice to Service Fabric: ApplicationPackageName: $($ProjectName)"

    $ScriptBlock = [ScriptBlock]::Create("$DeployScriptFile -ApplicationPackagePath '$ApplicationPackagePath'")

    Invoke-Command -ScriptBlock $ScriptBlock
}

Read-Host -Prompt "Press Enter to exit"

2 个答案:

答案 0 :(得分:1)

  

我做错了什么?如何让所有行执行?

您的代码似乎没有任何问题。我假设$ApplicationPackageFiles变量中没有任何内容,因此不会执行foreach子句。

您可以使用以下方法之一调试它:

1.将$ ApplicationPackageFiles变量直接打印到控制台

 Write-Host "ApplicationPackageFiles value: $ApplicationPackageFiles" 

2.在foreach之前和之后添加输出信息以进行检查。

Write-Host "Before loop..." 
foreach($ApplicationPackageFile in $ApplicationPackageFiles)
{
   xxxxx
}
Write-Host "After loop..." 

答案 1 :(得分:1)

我没有看到任何直接的错误。如果你复制&从某个地方粘贴它,破折号,换行符等可能是错误的(特别是如果从富文本复制/粘贴)。

在PowerShell ISE或vscode中打开脚本,并在顶部设置断点。然后你可以逐行逐步缩小范围。

https://blogs.technet.microsoft.com/heyscriptingguy/2014/12/05/use-the-powershell-debugger/