为什么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/
我有一个小的 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/