如何在Powershell的Windows计划程序中发送包含计划任务状态的电子邮件

如何在Powershell的Windows计划程序中发送包含计划任务状态的电子邮件,powershell,Powershell,我想发送一封电子邮件,其中包含在Power Shell的Windows计划程序中设置的计划任务的更新状态 我可以通过以下命令获取Powershell中计划任务的更新状态: Get-ScheduledTask -TaskPath "\" | Get-ScheduledTaskInfo | Export-Csv -NoTypeInformation -Path C:\Lakshmen\schedu ledTasksResults.csv 这会将数据导出到csv中。相反,我希望这些信息在电子邮件中。

我想发送一封电子邮件,其中包含在Power Shell的Windows计划程序中设置的计划任务的更新状态

我可以通过以下命令获取Powershell中计划任务的更新状态:

Get-ScheduledTask -TaskPath "\" | Get-ScheduledTaskInfo | Export-Csv -NoTypeInformation -Path C:\Lakshmen\schedu
ledTasksResults.csv
这会将数据导出到csv中。相反,我希望这些信息在电子邮件中。但我不知道如何通过电子邮件发送

我试过这个:

Get-ScheduledTask -TaskPath "\" | Get-ScheduledTaskInfo | Send-MailMessage -To "lakesh@outlook.com" -From "lakesh@outlook.com" -Subject "ScheduledTasks" -SmtpServer "smtp.mail.outlook.com"
出现如下错误:

Send-MailMessage : Illegal characters in path.
At line:1 char:59
+ ... dTaskInfo | Send-MailMessage -To "lakesh@outlook.com" -From  ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Send-MailMessage], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.SendMailMessage

需要一些指导。

首先创建凭证对象。然后确保将对象转换为字符串,以便能够发送。我个人会将CSV作为附件发送,但以下是一个示例:

$emailAddress = "lakesh@outlook.com"
$secpasswd = ConvertTo-SecureString "yourPassword" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("$emailAddress", $secpasswd)
$tasks = Get-ScheduledTask -TaskPath "\" | Get-ScheduledTaskInfo | Out-String

Send-MailMessage -To $emailAddress -From $emailAddress -Subject "ScheduledTasks" -SmtpServer "smtp.mail.outlook.com" -Credential $mycreds -Body $tasks

一种方法是附上以下结果:

 Get-ScheduledTask -TaskPath "\" | Get-ScheduledTaskInfo | Export-Csv -NoTypeInformation -Path C:\Lakshmen\scheduledTasksResults.csv
编辑由于@LotPing的正确评论,应该使用(少即是多)而不是变量(谢谢)

然后发送邮件:

$Arguments = @{
    From = "lakesh@outlook.com"
    To = "lakesh@outlook.com"
    Attachment = "C:\Lakshmen\scheduledTasksResults.csv"
    Subject = "Here are my scheduled tasks"
    Body = "See the attachments for the tasks results"
    SMTPServer = "smtp.mail.outlook.com"
    SMTPPort = "587"
}

Send-MailMessage @Arguments -UseSsl -Credential (Get-Credential) –DeliveryNotificationOption OnSuccess
或者你可以简单地把它放进体内:

$Arguments = @{
    From = "lakesh@outlook.com"
    To = "lakesh@outlook.com"
    Subject = "Here are my scheduled tasks"
    Body = Get-ScheduledTask -TaskPath "\" | Get-ScheduledTaskInfo | Out-String
    SMTPServer = "smtp.mail.outlook.com"
    SMTPPort = "587"
}

Send-MailMessage @Arguments -UseSsl -Credential (Get-Credential) –DeliveryNotificationOption OnSuccess

注意:由于
Get Credential
的原因,它将提示您输入密码。如果您希望它没有用户交互,您需要将密码存储为
SecureString

您似乎在谈论任务和电子邮件,我不明白您为什么同时提到这两件事。是否可以从您的问题中删除对任务的引用并使其更加集中?引用自
Get Help Send MailMessage-sh
您可以通过管道将附件的路径和文件名发送到MailMessage。无法将通过管道传送到cmdlet的内容解释为路径/文件名,因此会出现错误。