нужно искать таблицу HTML (msnormaltable) - PullRequest
1 голос
/ 07 июня 2019

Каждый день мы получаем электронное письмо с информацией о том, что прошло или не удалось создать резервную копию. То, что я сделал, это извлеките HTML-текст письма и поместил его в собственный HTML-файл body.html.

body.html похож на следующий 11 рубрик
Сервер, Клиент, Состояние, Группа, Задание, Размер отсканированного (ТБ), Запущено, Завершено, Продолжительность (час), Срок хранения (неделя), Срок действия истекает

Под каждым заголовком есть данные. enter image description here

Я хочу иметь возможность искать в html body.html слово «fail» (которое будет находиться только под столбцом Status и возвращать всю строку.

Я попытался захватить его в переменную и затем выполнить поиск по нему. Но он возвращает весь код.

Есть идеи?

$Outlook = New-Object -ComObject Outlook.Application
$OutlookFolders = $Outlook.Session.Folders.Item(1).Folders

$OutlookInbox = $Outlook.session.GetDefaultFolder(6)

$latestmail=$OutlookInbox.items | select -last 1
$emailhtmlbody=$latestmail.HTMLBody

$emailhtmlbody | out-file d:\delme\test\body.html

1 Ответ

0 голосов
/ 07 июня 2019

Вы можете перебирать тело тела построчно, сопоставлять строки с регулярным выражением и захватывать интересующие вас блоки. Вот пример:

foreach ($line in $emailhtmlbody) { 
    if ($line -match "<td>(?<Server>.+)</td><td>(?<Client>.+)</td><td>(?<Status>.+)</td>...") {
        [PSCustomObject] @{
            Server = $Match.Server
            Client = $Match.Client
            Status = $Match.Status
        }
    }
}

В HTML, безусловно, есть некоторые идентификаторы идентификаторов или дескрипторов классов, которые можно использовать только для соответствия интересующим вас строкам.

Сначала я бы создал рабочее регулярное выражение в таком инструменте, как RegexCoach. Они могут стать довольно сложными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...