在 PowerShell ForEach 循环中可以有多个 IN 条件吗?

Can you have multiple IN conditions in a PowerShell ForEach loop?

我在函数中有以下示例代码:

[array]$ARR = $null

foreach ($file in $fileTable.identical)
{
   [hashtable]$HT=@{
       'FileName' = $file.Name
       'AppName' = $file.App
       'GroupName' = $file.Group
       'Valid' = $true
   }
   $ARR += $HT
}
foreach ($file in $fileTable.removed)
{
   [hashtable]$HT=@{
       'FileName' = $file.Name
       'AppName' = $file.App
       'GroupName' = $file.Group
       'Valid' = $false
   }
   $ARR += $HT
}
foreach ($file in $fileTable.modified)
{
   [hashtable]$HT=@{
       'FileName' = $file.Name
       'AppName' = $file.App
       'GroupName' = $file.Group
       'Valid' = $false
   }
   $ARR += $HT
}

return $ARR

+3 个用于其他 $fileTable.[properties] 的 foreach 循环,其中 'Valid' = $false。

我不想多次重复代码块,而是想这样做:

foreach (($file in $fileTable.removed) -and ($file in $fileTable.modified))
{
   [hashtable]$HT=@{
       'FileName' = $file.Name
       'AppName' = $file.App
       'GroupName' = $file.Group
       'Valid' = $false
   }
}

所以只有哈希表中不同的变量才是 $value。 $fileTable 是一个 pscustomobject,具有一些自定义属性,如相同、修改、添加、删除。

我知道我想要的在 foreach 循环中是不可能的,但我正在寻找类似的解决方案来减少代码行数。任何帮助将不胜感激:)

谢谢!

结合您和 PetSerAl 的方法。

编辑:合并了 @mklement0s 提示

$ARR = foreach($Variant in 'identical', 'removed', 'modified'){
  $fileTable.$Variant | ForEach-Object{
    [PSCustomObject]@{
      'FileName'  = $_.Name
      'AppName'   = $_.App
      'GroupName' = $_.Group
    # 'Valid'     = if($Variant -eq 'identical'){$True} else {$False}
      'Valid'     = $Variant -eq 'identical'
    }
  }
}