Показать значения переменной внутри другой переменной в теле письма - PullRequest
0 голосов
/ 20 февраля 2020
--Connect and open MYSQL Connection to the database
$strUser = "X"
$strPW = "Y"
$strDB = "Z"
$strserver = "dataserver"

[void][System.Reflection.ASsembly]::LoadWithPartialName("MySql.Data")
$conn = New-Object MySql.Data.MySqlClient.MySqlConnection
$cs = "server=$($strserver);port=3306;database=$($strdb);uid=$($struser);pwd=$($strPW)"
$conn.connectionstring = $cs
$conn.Open()

$query = "select * from users"


$cmd = new-object MySql.Data.MySqlClient.MySqlCommand($StoresNotPolledToday,$conn)
$da = new-object MySql.Data.MySqlClient.MySqlDataAdapter($cmd)
$ds = New-Object System.Data.DataSet
$recordcount = $da.Fill($ds, "users")

--Display the values from the query
$ds.Tables



-- Compile the e-mail
$From = "test@gmail.com"
[string[]]$To = "Me@gmail.com"
$Subject = "Test Subject"
$Body = "Test Body and text
$ds.Tables "

$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
$password = "Password1" | ConvertTo-SecureString -asPlainText -Force
$username = "test@gmail.com"
$credential = New-Object System.Management.Automation.PSCredential($username,$password)
Send-MailMessage -From $From -to $To -Subject $Subject `
-Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
-Credential $credential 

Окончательный результат в теле письма, которое я получаю: «System.Data.DataSet» Как я могу заставить его отображать значения из $ ds.Tables внутри тела письма? -mail?

Я попытался с помощью:

$var = $ds.Tables

и затем поместить этот $ var в текст $ электронной почты

$Body = "Test Body and text
    $var "

Результат что я получил в теле: "пользователи" как тело

1 Ответ

1 голос
/ 20 февраля 2020

У меня нет mysql db для проверки, но вам нужно преобразовать $ ds.tables в объект, который можно преобразовать, по крайней мере, во фрагмент HTML, если нет, просто в целую страницу HTML :

$ds.tables | Convertto-HTML 

или

$ds.tables | Convertto-Html -Fragment

, если это не дает правильного отображения данных (PowerShell будет выполнять много преобразований данных от вашего имени, если это так), вам нужно взять объект .Tables Collection и преобразовать его в объект, который можно преобразовать во фрагмент HTML:

Обычно я выполняю этот тип работы, сначала преобразовывая базовый объект Collection в массив, а затем выполняю преобразование

@($ds.tables) | Covnertto-Html

Изменить 1:

Кроме того, в командлете Send-MailMessage вы захотите использовать свойство -BodyAs Html $ true

Редактировать 2:

Вот более ясные правки, которые я предлагал:

$arr = @($ds.Tables)  ## Have PowerShell change the type from a probably SqlDataTable to an Array



-- Compile the e-mail
$From = "test@gmail.com"
[string[]]$To = "Me@gmail.com"
$Subject = "Test Subject"
$Body = ($arr | ConvertTo-Html)  ## Convert to the array to an HTML page
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"
$password = "Password1" | ConvertTo-SecureString -asPlainText -Force
$username = "test@gmail.com"
$credential = New-Object System.Management.Automation.PSCredential($username,$password)
Send-MailMessage -From $From -to $To -Subject $Subject -BodyAsHtml $true ` ## Added the flag to allow the email to be sent in HTML format
-Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
-Credential $credential 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...