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
}
(Взятый из предоставленной ссылки, я не беру на себя ответственность за код.)