2016-07-19 65 views
1

我有一系列需要在添加到作業隊列之前進行過濾的文件。該作業隊列使用文件類型作爲函數的參數。我目前使用的是這樣的:帶有Name.Contains的Powershell switch語句

foreach ($currentFile in $ListOfTestFiles) 
{ 
    if ($currentFile.Name.Contains("Test1")) 
    { 
     $ParameterSet="Type1,$SomeOtherVariable" 
    } 
    if ($currentFile.Name.Contains("Test2")) 
    { 
     $ParameterSet="Type2,$SomeOtherVariable" 
    } 
    if ($currentFile.Name.Contains("Test3")) 
    { 
     $ParameterSet="Type3,$SomeOtherVariable" 
    } 
    if ($currentFile.Name.Contains("Test4")) 
    { 
     $ParameterSet="Type4,$SomeOtherVariable" 
    } 

    $JobArray += Start-Job -ScriptBlock $func -ArgumentList $ParameterSet 
    $JobArray | Receive-Job -Wait 
} 

有沒有一種方法可以用switch語句減少這個問題?

回答

2
foreach($currentFile in $listOfTestFiles) 
{ 
    switch -wildcard ($currentFile.Name) 
    { 
     "*Test1*" {$ParameterSet="Type1,$SomeOtherVariable"} 
     "*Test2*" {$ParameterSet="Type2,$SomeOtherVariable"} 
     "*Test3*" {$ParameterSet="Type3,$SomeOtherVariable"} 
     "*Test4*" {$ParameterSet="Type4,$SomeOtherVariable"} 
     default {"Default Behaviour"} 
    } 
    $JobArray += Start-Job -ScriptBlock $func -ArgumentList $ParameterSet 
    $JobArray | Receive-Job -Wait 
} 

請注意,我沒有測試此代碼,但我跟着微軟例如,從here

0

你可以做到以下幾點:

switch ($currentFile) 
{ 
    {$_.name.contains("Test1")} {$ParameterSet="Type1,$SomeOtherVariable"} 
    {$_.name.contains("Test2")} {$ParameterSet="Type2,$SomeOtherVariable"} 
    Default {} 

}