2017-10-11 2 views
0

J'ai un petit script Powershell qui est censé déployer des applications de tissu de services sur place:Pourquoi le script PowerShell passe-t-il à la fin?

Je tente de l'exécuter comme ceci:

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

Pour une raison quelconque, il passe au dernier ligne du script!

enter image description here

Qu'est-ce que je fais mal? Comment puis-je obtenir toutes les lignes à exécuter?

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" 
+1

Déboguer? Est quelque chose dans la variable $ ApplicationPackageFiles? – guiwhatsthat

Répondre

1

Qu'est-ce que je fais mal? Comment puis-je obtenir toutes les lignes à exécuter?

Il semble qu'il n'y ait aucun problème avec votre code. Je suppose qu'il n'y a rien dans la variable $ApplicationPackageFiles, donc la clause foreach n'est pas exécutée.

débogage avec l'une des façons suivantes:

1.Imprimer la variable $ ApplicationPackageFiles pour consoler directement

Write-Host "ApplicationPackageFiles value: $ApplicationPackageFiles" 

2.Ajoutez les informations de sortie avant et après foreach pour le vérifier.

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

Je ne vois rien de mal à cela. Si vous copiez & collé à partir de quelque part, les tirets, les retours à la ligne, etc, pourraient être faux (en particulier si copier/coller à partir de texte enrichi). Ouvrez votre script dans PowerShell ISE ou vscode et définissez un point d'arrêt en haut de la page. Ensuite, vous pouvez parcourir ligne par ligne pour le réduire.

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