我有一系列文件需要在添加到作业队列之前进行过滤。该作业队列使用文件类型作为函数的参数。我目前正在使用的是:
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语句减少这种情况?
答案 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 {}
}