代码之家  ›  专栏  ›  技术社区  ›  Alex Gordon

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

  •  0
  • Alex Gordon  · 技术社区  · 8 年前

    我有一个小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 回复  |  直到 8 年前
        1
  •  1
  •   Tom Sun    8 年前

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

    你的代码似乎没有问题。我假设在 $ApplicationPackageFiles foreach 未执行第条。

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

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

     Write-Host "ApplicationPackageFiles value: $ApplicationPackageFiles" 
    

    2、添加前后输出信息 foreach公司 检查一下。

    Write-Host "Before loop..." 
    foreach($ApplicationPackageFile in $ApplicationPackageFiles)
    {
       xxxxx
    }
    Write-Host "After loop..." 
    
        2
  •  1
  •   Mike Veazie - MSFT    8 年前

    我看不出有什么问题。如果复制(&W);从某个地方粘贴,破折号、换行符等可能是错误的(尤其是从富文本复制/粘贴时)。

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

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

    推荐文章