仅在PowerShell电子邮件中附加最近的文件



Dears我有一个用附件lof文件发送电子邮件的脚本,我的问题是路径包括许多日志文件,我需要知道如何只附加最新的日志文件。

$PSEmailServer = "mail.mail.com"
$SMTPPort = 587
$SMTPUsername = "my.email@mail.com"
$EncryptedPasswordFile = "my.email@mail.com.securestring"
$SecureStringPassword = Get-Content -Path $EncryptedPasswordFile | ConvertTo-SecureString
$EmailCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $SMTPUsername,$SecureStringPassword
$MailTo = "abc@mail.com"
$MailFrom = "my.email@mail.com"
$MailSubject = "my subject"
$MailBody = "kindly check the attached log"
$att = "C:emaillog.txt"
Send-MailMessage -From $MailFrom -To $MailTo -Subject $MailSubject -Body $MailBody -Attachments 
$att -Port $SMTPPort -Credential $EmailCredential

要只从路径中获取最新的日志文件,可以执行以下操作:

Get-ChildItem -Path 'C:email' -Filter '*.txt' -File | Sort-Object LastWriteTime | Select-Object -Last 1

接下来,我建议您对像Send-MailMessage这样需要大量参数的cmdlet使用Splatting
这样可以避免创建许多变量,并使代码更具可读性/可维护性。

$att = Get-ChildItem -Path 'C:email' -Filter '*.txt' -File | Sort-Object LastWriteTime | Select-Object -Last 1
$mailParams = @{
To          = "abc@mail.com"
From        = "my.email@mail.com"
Subject     = "my subject"
Body        = "kindly check the attached log"
Port        = 587
Credential  = $EmailCredential  # get this from file or use the Get-Credential cmdlet
Attachments = $att.FullName     # needs an (aray of) full path and filename
}
# now send the email
Send-MailMessage @mailParams

最新更新