这是下面的powershell脚本。 我正试图将查询的结果导出到电子邮件正文。 但是,电子邮件除了表格标题外没有其他内容。 任何人都可以帮助解决可能是错误的/不完整的?
# Create a DataTable $table = New-Object system.Data.DataTable "bugs" $col1 = New-Object system.Data.DataColumn bug_id,([string]) $col2 = New-Object system.Data.DataColumn bug_status,([string]) $col3 = New-Object system.Data.DataColumn resolution,([string]) $col4 = New-Object system.Data.DataColumn short_desc,([string]) $col5 = New-Object system.Data.DataColumn deadline,([string]) $table.columns.add($col1) $table.columns.add($col2) $table.columns.add($col3) $table.columns.add($col4) $table.columns.add($col5) # This code defines the search string in the database table $SQLQuery = "SELECT bug_id, bug_status, resolution, short_desc, deadline FROM bugs WHERE ( bug_status IN ( 'RESOLVED', 'VERIFIED', 'INTEST' ) AND deadline BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY) ) OR ( bug_status IN ( 'RESOLVED', 'VERIFIED', 'INTEST' ) AND deadline BETWEEN DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND CURDATE() ) ORDER BY deadline ASC " # This code connects to the SQL server and retrieves the data $MySQLAdminUserName = 'user_name' $MySQLAdminPassword = 'password' $MySQLDatabase = 'mantis' $MySQLHost = '<HOSTNAME>' $ConnectionString = "server=" + $MySQLHost + ";port=3306;uid=" + $MySQLAdminUserName + ";pwd=" + $MySQLAdminPassword + ";database="+$MySQLDatabase [void][system.reflection.Assembly]::LoadFrom("C:\Program Files (x86)\Devolutions\Remote Desktop Manager Free\MySQL.Data.dll") $Connection = New-Object MySql.Data.MySqlClient.MySqlConnection $Connection.ConnectionString = $ConnectionString $Connection.Open() $Command = New-Object MySql.Data.MySqlClient.MySqlCommand($SQLQuery, $Connection) $DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command) $DataSet = New-Object System.Data.DataSet $RecordCount = $dataAdapter.Fill($dataSet, "data") $DataSet.Tables[0] # Create an HTML version of the DataTable $html = "<table><tr><td>bug_id</td><td>bug_status</td><td>resolution</td><td>short_desc</td><td>deadline</td></tr>" foreach ($row in $table.Rows) { $html += "<tr><td>" + $row[0] + "</td><td>" + $row[1] + "</td></tr>" + "</td></tr>" + $row[2] + "</td></tr>" } $html += "</table>" # Send the email $smtpserver = "smtp.server.net" $from = "[email protected]" $to = "[email protected]" $subject = "Hello" $body = $DataSet.Tables[0] | convertto-html ; Send-MailMessage -smtpserver $smtpserver -from $from -to $to -subject $subject -body $body -bodyashtml
运行脚本后出错 –
Send-MailMessage : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Body'. Specified method is not supported. At C:\Users\ai\Desktop\testMail2.ps1:63 char:85 + Send-MailMessage -smtpserver $smtpserver -from $from -to $to -subject $subject -body <<<< $body -bodyashtml + CategoryInfo : InvalidArgument: (:) [Send-MailMessage], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.SendMailMessage
你从来没有填充任何数据的$表。 你正在填充$ dataset。 你回显$ DataSet.Tables [0]来屏幕,但回到使用$表来构造$ body。 现在编辑select所需的列:
$body = $DataSet.Tables[0] | select col1, col2, col3 | convertto-html | out-string
将col1,col2,col3replace为你想要显示的列,省略任何你不感兴趣的列名。
Send-MailMessage需要一个string,$ body似乎是一个对象数组。 通过改变为[string]$body =来消除歧义,定义$body的types。
虽然ConvertTo-Html应该返回一个string,你可以通过pipe道来检查Get-Member,如下所示:
$ DataSet.Tables [0] | ConvertTo-html | 获得会员