Меня слегка смущает то, что вы разместили здесь.
- Вы создаете коллекцию под названием $ test, которую вы не используете нигде в оставшейся части кода, которую вы опубликовали.
- Вы создаете коллекцию вещей, вызываете $ Barr ie, затем проверяете, существует ли $ Barr ie, затем передаете эту коллекцию в al oop, затем запрашиваете переменную с именем $ Barrie_Tb, которая не установлен нигде в коде, опубликованном до l oop.
- Каковы значения $ test / $ Barrie / $ SH_report / $ Barr ie -Tb?
Я удивлен, что это работает вообще. Сделайте шаг назад и подходите к этому одному шагу за раз, чтобы убедиться, что вы получаете то, что ожидаете, прежде чем переходить к следующему пункту.
Удаление этого образца, поскольку это был только я риффинг на том, что вы первоначально показали, вынуждая меня в письменной форме принять эту часть
Обновление на основе нашего обмена ниже
Анализ
# Use the $SH_report collection to extract only the $Barrie incident from $SH_report
$Barrie = $SH_report |
Where-Object { $_.incident_updates -match "Barrie" }
# Use the $Barrie collection info to look for the incident_updates.body from $SH_report collection
Тем не менее, $ Barr ie уже заполнен данными из $ SH_report, поэтому, почему вы делаете это снова?
if ($Barrie)
{ $Barrie += Where-Object { $SH_report.incident_updates.body -match 'INC(\d+)' |
Select-String -Pattern "INC(\d+)" -AllMatches |
foreach { ($_.matches).value } |
Select-Object -Unique }
Где это $ Barrie_Tb откуда? Это нигде не показывается и не заполняется, ну, вы не показываете, где и почему. Тем не менее, мы знаем, что мы будем делать такие вещи ...
$Barrie_Tb +=
... для увеличения значения переменной на указанное значение, добавления в коллекцию, объекта и т. Д. c., но опять же, данные уже есть, и это, то, что вы опубликовали, не определено, тааак ....
# Use the modified $Barrie collection to output an HTML table
$Barrie |
foreach { $Barrie_Tb += "<tr><td>$($_.title)</td> <td>$($_.start_time)</td> <td>Barrie Pocock</td> <td>$($_.matches)</td></tr>rn" } }
Идентификатор этого .incident_updates.body уже находится в $ SH_report, затем почему вы вообще заполняете $ Barr ie и читаете его в $ Barr ie здесь:
{ $Barrie += Where-Object { $SH_report.incident_updates.body -match 'INC(\d+)'
На основании моего прочтения того, что вы представили, все данные, которые вам нужны, уже находятся в этом $ SH_report, так что используйте только это напрямую.
$SH_report |
ForEach {$PSItem.incident_updates.body -match 'Barrie' -and 'INC(\d+)'}