为什么powershell脚本会跳到最后?

why does powershell script skip to the end?

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

我正在尝试这样执行它:

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

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

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

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"

What am I doing wrong? How do I get all the lines to execute?

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

您可以通过以下方式之一对其进行调试:

1.Print $ApplicationPackageFiles 变量直接控制台

 Write-Host "ApplicationPackageFiles value: $ApplicationPackageFiles" 

2.Add前后输出信息foreach查看

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

我没有立即看出它有什么问题。如果您从某个地方复制并粘贴它,破折号、换行符等可能是错误的(特别是如果 copy/pasting 来自富文本)。

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

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