2013-08-28 55 views
18

我正在使用我的第一個PowerShell腳本,無法找出循環。 我有以下,這將重複$ ActiveCampaigns次數:循環X次數

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

有人可以幫忙嗎?

回答

20

這是你在找什麼?

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 
} 
+0

工程就像一個魅力,謝謝! – user2725402

+0

很難相信* PowerShell中的*任何*都可以輕鬆地理解爲...... – Bowi

1

See此鏈接。它向您展示瞭如何在PowerShell中動態創建變量。

這裏的基本思想是: 使用新的變量和獲取變量

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

(從提供的鏈接兩者,我不邀功的代碼。)

+1

感謝。我會玩這個 - 但我不認爲這解決了我的問題。我的變量已經存在,我只想改變在每個循環中被調用的變量... – user2725402

15

這是一個老問題,但這裏是一個在PowerShell中循環多次的簡單方法。我在尋找其他東西時遇到了這個帖子,但它可能會在未來幫助其他人。它與上面的for循環相同,但對於較新的程序員和腳本編寫者來說更容易理解。它使用範圍和foreach。的範圍被定義爲:

範圍= lower..upper

$range = 1..10 

範圍可以直接在用於循環爲好,雖然不是最優化的方法中,任何性能丟失或額外的處理指令將是不明顯的。解決的辦法是如下:

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 
    } 
} 
55
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