Loop X количество раз

Я работаю над своей первой Powershell Script и не могу вычислить цикл. У меня есть следующее, которое будет повторяться $ActiveCampaigns:

Write-Host "Creating $PQCampaign1 Pre-Qualified Report"
Invoke-Item "$PQCampaignPath1\PQ REPORT $PQCampaign1.qvw"
Write-Host "Waiting 1 minute for QlikView to update" 
sleep -seconds 60   # Wait 1 minutes for QlikView to Reload, create Report and Save.

DO{
Write-Host "Daily Qlikview Reports"
Write-Host "Wating for QlikView to create the $PQCampaign1 PQ Report"
Get-Date
Write-Host "Checking...."
sleep -seconds 1
Write-Host ""
Write-Host "Not Done Yet" 
Write-Host "Will try again in 5 seconds." 
Write-Host ""
sleep -seconds 5
}

Until (Test-Path "$PQCampaignPath1\$PQCampaign1 $PQReportName $ReportDate.xlsx" -pathType leaf)

Get-Date
Write-Host "Done with $PQCampaign1 PQ Report. Wait 10 seconds." 
sleep -seconds 10

Эти параметры должны увеличиваться с одним для каждого цикла:

  • $PQCampaign1 (должен стать $PQCampaign2, затем 3 и т.д.)
  • $PQCampaignPath1 (должен стать $PQCampaignPath2, затем 3 и т.д.)

Итак, если $ActiveCampaigns установлено на 8 в определенный день, то это необходимо повторить 8 раз, и в последний раз он должен открыть $PQCampaign3, который находится в $PQCampaignPath8.

Кто-нибудь может помочь?

Ответы

Ответ 1

Это то, что вы ищете?

for ($i=1; $i -le $ActiveCampaigns; $i++)
{
  $PQCampaign     = Get-Variable -Name "PQCampaign$i"     -ValueOnly
  $PQCampaignPath = Get-Variable -Name "PQCampaignPath$i" -ValueOnly

  #Do stuff with $PQCampaign and $PQCampaignPath
}

Ответ 2

1..10 | % { write "loop $_" }

выход:

PS D:\temp> 1..10 | % { write "loop $_" }
loop 1
loop 2
loop 3
loop 4
loop 5
loop 6
loop 7
loop 8
loop 9
loop 10

Ответ 3

Это старая проблема, но вот простой способ петли любое количество раз в PowerShell. Я столкнулся с этим сообщением, когда искал что-то еще, но это может помочь другим в будущем. Это то же самое, что и цикл for выше, но гораздо легче понять для новых программистов и сценаристов. Он использует диапазон и foreach. Диапазон определяется как:

range = lower..upper

или

$range = 1..10

Диапазон может использоваться непосредственно в цикле for, хотя и не самый оптимальный подход, любая потеря производительности или дополнительная инструкция для обработки были бы незаметными. Решение находится ниже:

foreach($i in 1..10){
    Write-Host $i
}

Или в вашем случае:

$ActiveCampaigns = 10
foreach($i in 1..$ActiveCampaigns)
{
    Write-Host $i
    If($i==$ActiveCampaigns){
        // do your stuff on the last iteration here
    }
}

Ответ 4

См. эту ссылку. Он показывает вам, как динамически создавать переменные в powershell.

Вот основная идея: Используйте переменную New-Variable и Get-Variable

for ($i=1; $i -le 5; $i++)
{
    New-Variable -Name "var$i" -Value $i
    Get-Variable -Name "var$i" -ValueOnly
}

(Взятый из предоставленной ссылки, я не беру на себя ответственность за код.)