PS скрипт не отправляет по электронной почте правильно отформатированный вывод - PullRequest
0 голосов
/ 24 октября 2019

У меня есть следующая команда, запускаемая из скрипта powershell, которая дает мне необходимую информацию и все красиво отформатирована в таблице. Команда:

gcloud --project $gcpProject compute snapshots list --format="table[box,title='GCP Project:$gcpProject snapshots for $yesterday'](name,creationTimestamp,diskSizeGb,storageBytes)" --filter="creationTimestamp.date('%Y-%m-%d')=$yesterday"

У меня есть Start-Transcript -path $ Log1 рядом с началом этого скрипта.

Это вывод команды gcloud, которую я получаю в PS:

┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                     GCP snapshots   │
├─────────────────────────────────────────────────────┬───────────────────────────────┬──────────────┬───────────────┤
│                         NAME                        │       CREATION_TIMESTAMP      │ DISK_SIZE_GB │ STORAGE_BYTES │
├─────────────────────────────────────────────────────┼───────────────────────────────┼──────────────┼───────────────┤
│ snapshot1-us-central1-a-20191024022411-1ub96cw9     │ 2019-10-23T19:24:11.743-07:00 │ 500          │ 1104631168    │
│ snapshot2-us-east1-b-20191024020148-iusphq0h        │ 2019-10-23T19:01:49.100-07:00 │ 900          │ 1129102848    │
└─────────────────────────────────────────────────────┴───────────────────────────────┴──────────────┴───────────────┘

Именно так я хочу, чтобы получатель электронной почты видел его, когда он открывает свою электронную почту. Но я не могу понять, что мне нужно сделать, чтобы отправить это как $ тело письма и правильно отформатировать. В Notepad ++ это тоже выглядит идеально, но не в том случае, если я скопирую и вставлю его в новое письмо.

Когда я получаю письмо, таблица становится бессмысленной (строки сделаны с кучей символов ????) и таблицанеправильно отформатирован. Я попробовал ConvertTo-Html и -BodyAsHtml, но ничего из этого не сработало.

Вот мой код для отправки электронного письма:

If (Test-Path $Log1) {
$body = @(Get-Content -Path $Log1).

    Where({ $_.Trim() -notin $pattern2 -and $_ -NotMatch "End time: 20.*|Start time: 20.*" }) # Trimming some things from the Log1 file that I don't want included in the email

    send-MailMessage -SmtpServer $SmtpServer -Port $SmtpPort -Credential $Cred -UseSsl -Verbose -To $to -From $from -Subject $subject -Body ($body | out-string)
        }

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Мне удалось разрешить его, отформатировав вывод из gcloud как csv, а затем преобразовав его в html с помощью:

$body = Import-Csv c:\report.csv | ConverTo-Html -head a$ -Body "<H2>My Header</H2>"

, где $ устанавливает информацию заголовка HTML:

$a = "<style>"
$a = $a + "BODY{background-color:peachpuff;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:red}"
$a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:green}"
$a = $a + "</style>"

Затем для отправки-MailMessage я просто добавил -BodyAsHtml

0 голосов
/ 24 октября 2019

Скорее всего, проблема заключается в том, что при вставке текста из Notepad / Notepad ++ в новое электронное письмо ваш клиент не использует шрифт фиксированной ширины. Вы можете попробовать изменить шрифт электронной почты на что-то с фиксированной шириной, затем вставить (сохраняя только текстовые данные) или перейти от электронной почты в формате HTML к текстовой.

Вы также должны убедиться, что приэлектронная почта отправляется из Powershell, либо она отправляется в виде открытого текста (Outlook и другие клиенты обычно по умолчанию выводят электронные письма в виде шрифта фиксированной ширины по умолчанию), либо вы выбираете хорошо известный шрифт фиксированной ширины для текста в теле HTML. Но в этот момент вы могли бы просто отправить таблицу в формате HTML и подключить данные таким образом.

Если это используется для какой-либо автоматизации, хотя я настоятельно рекомендую просто поместить данные вCSV для простоты разбора.

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