Powershell-提供不包含任何空值的集合

时间:2019-03-30 22:18:41

标签: powershell

我有一个Powershell脚本,该脚本运行SQL Server查询,将其导出到Excel文件,然后应该通过电子邮件将该Excel文件作为附件发送。我正在使用的Excel导出器来自以下位置:https://github.com/dfinke/ImportExcel

这是脚本:

##--Variables Start
$FileName = "C:\Users\user\Documents\Report.xlsx";
$ConnectionString = "OurConnectionString"
$secpasswd = "emailpassword"
$cred = New-Object System.Management.Automation.PSCredential ("emailaddress", $secpasswd)
$SmtpCred = $cred
$ToAddress = 'to@contoso.com'
$FromAddress = 'from@contoso.com'
$SmtpServer = 'smtp.server.com'
$SmtpPort = '587'
$Subject = 'Report'
$Body = "Here is your report"

$mailparam = @{
    To = $ToAddress
    From = $FromAddress
    Subject = $Subject
    Body = $Body
    Attachments = $Attachment
    SmtpServer = $SmtpServer
    Port = $SmtpPort
    Credential = $SmtpCred
}

$SqlQuery = @"
SELECT TOP 10 * FROM dbo.table
"@;

##--Variables End


$SqlConnection = New-Object System.Data.SqlClient.SqlConnection;
$SqlConnection.ConnectionString = $ConnectionString;

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand;
$SqlCmd.CommandText = $SqlQuery;
$SqlCmd.Connection = $SqlConnection;


$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter;
$SqlAdapter.SelectCommand = $SqlCmd;
$DataSet = New-Object System.Data.DataSet;
$SqlAdapter.Fill($DataSet);
$DataSetTable = $DataSet.Tables["Table"];

$xlsFile = @($DataSetTable | Export-Excel $FileName -AutoSize)

$SqlConnection.Close()

$Attachment = $xlsFile

Send-MailMessage @mailparam -UseSsl

运行上述脚本后,Excel文件将正确导出,但是由于$Attachment变量中的空值而导致发送邮件失败-我收到以下错误消息:

  

Send-MailMessage:无法验证参数“附件”上的参数。参数为null,为空,或者参数集合的元素包含空值。提供一个收集       不包含任何空值,然后重试该命令。       在C:\ Users \ Desktop \ Untitled1.ps1:58 char:18       + Send-MailMessage @mailparam -UseSsl       + ~~~~~~~~~~~           + CategoryInfo:InvalidData:(:) [Send-MailMessage],ParameterBindingValidationException           + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SendMailMessage

我的语法有什么问题,使得$Attachment变量为空?

我有另一个与此脚本几乎相同的脚本,但是它没有使用$xlsFile = @($DataSetTable | Export-Excel $FileName -AutoSize)进行Excel导出,而是使用了一个较旧的PowerShell ComObject,其中包含许多代码来执行Excel部分-该其他脚本也以以下结尾:

$Attachment = $xlsFile

Send-MailMessage @mailparam -UseSsl

但是带有附件的电子邮件在运行时可以正常工作。

1 个答案:

答案 0 :(得分:1)

i 最终注意到,在之前定义了您的脚本,将任何值分配给$ Attachment。 [ blush ]表示该脚本不会在该参数中包含任何内容。

fix =将splat移动到标准位置-恰好在使用它的调用之前-因此,在之后分配它使用的所有$ Var。 [咧嘴]