带有Name.Contains的Powershell switch语句

时间:2016-07-19 14:03:14

标签: powershell

我有一系列文件需要在添加到作业队列之前进行过滤。该作业队列使用文件类型作为函数的参数。我目前正在使用的是:

 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 个答案:

答案 0 :(得分:3)

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

跟踪了Microsoft示例

答案 1 :(得分:0)

您可以执行以下操作:

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

}