2015-10-19 67 views
0

我需要一些幫助,或者建議一個更好的方式來處理我正在做的事情。來自foreach的調用腳本

我試圖複製一些事情,所以我有

$tests = @("test1", "test3", "test5") 
$copy_1 = { 
$source = "C:\Source\test1" 
$Destination = "C:\Destination\test1" 

Copy-Item $Source -Recurse -Destination $Destination -Container -Force 
} 

$copy_2 = { 
$source = "C:\Source\test2" 
$Destination = "C:\Destination\test2" 

Copy-Item $Source -Recurse -Destination $Destination -Container -Force 
} 

$copy_3 = { 
$source = "C:\Source\test3" 
$Destination = "C:\Destination\test3" 

Copy-Item $Source -Recurse -Destination $Destination -Container -Force 
} 

$copy_4 = { 
$source = "C:\Source\test4" 
$Destination = "C:\Destination\test4" 

Copy-Item $Source -Recurse -Destination $Destination -Container -Force 
} 

Foreach($i in $Tests) 
{ 
    IF($i -eq "test1) 
     { 
      Start-Job -Name $i -Scriptblock {$($i)} 
     } 
} 

.... 

這不叫我的腳本塊。

 PSJobTypeName State   HasMoreData  Location    Command     

     BackgroundJob Running  True   localhost   ($($i)) 

我該如何調用$ test1塊?

在此先感謝。

回答

2

我不確定你想要做什麼,通過這樣做。這會容易得多。

$tests = @("test1", "test3", "test5") 

Foreach($i in $Tests) 
{ 
    IF($i -eq "test1") 
     { 
      Start-Job -Name $i -Scriptblock { Copy-Item "C:\Source\$($i)" "C:\Destination\$($i)" -Recurse -Container -Force } 
     } 
} 

.... 

編輯:

就像我在下面的評論說,您發佈的代碼是什麼也不做你的copy_1,copy_2,ECT變量。你所做的只是迭代一串字符串。這會起作用,並且更接近你嘗試去做的方式。利用PSObjects

$copy_1 = New-Object -TypeName PSObject 
$copy_1 | Add-Member -MemberType NoteProperty -name Name -value "copy_1" 
$copy_1 | Add-Member -MemberType NoteProperty -name Source -value "C:\Source\test1" 
$copy_1 | Add-Member -MemberType NoteProperty -name Destination -value "C:\Destination\test1" 

$copy_2 = New-Object -TypeName PSObject 
$copy_2 | Add-Member -MemberType NoteProperty -name Name -value "copy_2" 
$copy_2 | Add-Member -MemberType NoteProperty -name Source -value "C:\Source\test2" 
$copy_2 | Add-Member -MemberType NoteProperty -name Destination -value "C:\Destination\test2" 

$copy_3 = New-Object -TypeName PSObject 
$copy_3 | Add-Member -MemberType NoteProperty -name Name -value "copy_3" 
$copy_3 | Add-Member -MemberType NoteProperty -name Source -value "C:\Source\test3" 
$copy_3 | Add-Member -MemberType NoteProperty -name Destination -value "C:\Destination\test3" 

$tests = @($copy_1, $copy_2, $copy_3) 

Foreach($i in $tests) 
{ 
    if($i.Name -eq "copy_1") 
     { 
      Start-Job -Name $i.Name -Scriptblock { Copy-Item $i.Source $i.Destination -recurse -Container -Force }   
     } 
} 
+5

爲什麼'$($ i)'而不是'$ i'? –

+0

我和邁克一樣想着。我認爲只要'$我'會在那裏做到。但爲了使代碼看起來更清晰(我有很多要複製的),我試圖完成我這樣做的方式。我會試試這個,看看會發生什麼。也許在此期間別人可能有一個想法。 – Besiktas

+0

作爲一種習慣,我在$($ i)內引號,這樣整個變量就被評估了。在引號內使用屬性時更方便,比如「$($ server.Name)」。如果你有「$ server.Name」,那麼它的計算結果是不一樣的。 – AutomatedOrder