2013-08-28 6 views
18

मैं अपनी पहली पावरहेल स्क्रिप्ट पर काम कर रहा हूं और लूप को समझ नहीं सकता।लूप एक्स समय की संख्या

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 हो जाना चाहिए, तो मैं निम्नलिखित है, जो $ ActiveCampaigns समय की संख्या को दोहराने होगा 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 यह लिंक। यह आपको दिखाता है कि कैसे शक्तियों में गतिशील रूप से चर बनाने के लिए। उपयोग नई चर और जाओ-चर

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

(दिए गए लिंक से लिया, मैं कोड के लिए ऋण नहीं लेते।)

+1

धन्यवाद। मैं थोड़ी देर के साथ खेलूँगा - लेकिन मुझे नहीं लगता कि मेरी समस्या हल हो जाती है। मेरे चर पहले से मौजूद हैं, मैं केवल वेरिएबल को बदलना चाहता हूं जिसे प्रत्येक लूप में बुलाया जा रहा है ... – user2725402

15

यह एक पुराना मुद्दा है लेकिन PowerShell में कई बार लूप करने का एक आसान तरीका है। कुछ और ढूंढते समय मैं इस पोस्ट में आया, लेकिन यह भविष्य में दूसरों की मदद कर सकता है। यह उपरोक्त लूप के समान है, लेकिन नए प्रोग्रामर और स्क्रिप्टर्स के लिए समझना बहुत आसान है। यह एक सीमा का उपयोग करता है, और 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 
संबंधित मुद्दे