Powershell: список отдельных результатов регулярных выражений в таблицу HTML - PullRequest
1 голос
/ 16 марта 2020

Я работаю с StatusHub API, чтобы получить результат инцидентов, который включает в себя номер IN C, который встроен в элемент incidents.body.

Мне удалось использовать Regex, чтобы получить уникальный c IN C номер, уникальный:

$test = $INC_updates | Select-String -Pattern 'INC(\d+)' -AllMatches | ForEach-Object { $_.matches } | ForEach-Object { $_.value } | Select-Object -Unique

Однако сейчас я пытаюсь скомпилировать эти результаты в HTML таблица, в которой эти INC соответствуют другим описаниям инцидентов, например name et c ...

$Barrie = $SH_report | Where-Object { ($_.incident_updates -match "Barrie") -and ($_.incident_updates.body -match 'INC(\d+)' | Select-String -Pattern "INC(\d+)" -AllMatches | foreach { ($_.matches).value } | Select-Object -Unique) }
if ($Barrie) {
    write-host "High Sev Incidents found for Barrie" -ForegroundColor Green
    $Barrie | foreach {
        $Barrie_Tb += "<tr><td>$($_.title)</td> <td>$($_.start_time)</td> <td>Barrie Pocock</td> <td>$($_.incident_updates.body)</td></tr>`r`n"
    }
}
else {
    write-host "No High Sev Incidents found for Barrie" -ForegroundColor Red
}

Я получаю результат, однако он помещает только один инцидент в таблицу html и повторяет его через все клетки и не уникальные, как это должно быть.

Надеюсь, я что-то понял.

Спасибо!

1 Ответ

0 голосов
/ 16 марта 2020

Меня слегка смущает то, что вы разместили здесь.

  1. Вы создаете коллекцию под названием $ test, которую вы не используете нигде в оставшейся части кода, которую вы опубликовали.
  2. Вы создаете коллекцию вещей, вызываете $ Barr ie, затем проверяете, существует ли $ Barr ie, затем передаете эту коллекцию в al oop, затем запрашиваете переменную с именем $ Barrie_Tb, которая не установлен нигде в коде, опубликованном до l oop.
  3. Каковы значения $ 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+)'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...