Можно ли использовать несколько условий IN в цикле PowerShell ForEach? - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть следующий пример кода в функции:

[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 цикла foreach для других $ fileTable. [Properties], где '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, но я ищу аналогичное решение для уменьшения количества строк кода. Любая помощь будет оценена :)

Спасибо!

1 Ответ

2 голосов
/ 13 апреля 2019

Объединение ваших и PetSerAl с подходов.

Редактировать: включено @ mklement0 s подсказка

$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'
    }
  }
}
...