我有一个小的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"
答案 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/