如何使用Powershell中的Get-ChildItem将文件附加到电子邮件中

问题描述 投票:0回答:2

我正在尝试编写执行以下操作的Powershell脚本:

  1. 检查目录中的所有文件以获取有效字符串
  2. 获取包含该有效字符串的每个文件,然后将其作为电子邮件附件发送

我不在乎是否发送一封包含所有有效文件的电子邮件,或者是否为每个有效文件发送一封电子邮件。

以下代码是我所拥有的,但是尝试附加文件时出错,提示Send-MailMessage:找不到驱动器。名称为“

的驱动器
$ValidFiles = Get-ChildItem -Path C:\Results -Recurse |
                Select-String -Pattern "Test" |
                  Select-Object -Unique Path

foreach ($ValidFile in $ValidFiles)
{

    $From = 'test <[email protected]>'
    $To = 'me <[email protected]>'
    $Subject = "Valid File Found"
    $Username = "Test-Domain\test"
    $Password = ConvertTo-SecureString "notrealpassword" -AsPlainText -Force
    $Creds = New-Object System.Management.Automation.PSCredential($username, $password)
    $Body = "Please review the attached files"
    $Attachment = $ValidFile | Out-String
    $SMTPServer = "test-com.mail.protection.outlook.com"

    Send-MailMessage -From $From -To $To -Subject $Subject -Credential ($Creds) -Attachments $Attachment -UseSsl -Body $Body -DeliveryNotificationOption OnSuccess, OnFailure -SmtpServer $SMTPServer
}

非常感谢您的帮助。

powershell email-attachments
2个回答
1
投票
首先,请确保$ValidFiles仅包含

字符串(文件路径):

$ValidFiles = Get-ChildItem -Path C:\Results -Recurse | Select-String -List -Pattern "Test" | ForEach-Object Path
  • -List添加到Select-String使搜索在给定文件中找到的

    first

匹配处停止,从而消除了对Select-String的需要。即使仅指定了[[one属性Select-Object -Unique
  • Select-Object也会输出具有指定属性的Select-Object实例;虽然您可以使用[pscustomobject]来仅获取Path属性

    value

  • ,但使用-ExpandProperty Path和属性名称来代替更为简单。然后,使用.Path-现在是路径string-

    直接

    作为ForEach-Object参数。通常,除非您想要输入对象的
      用于显示的格式
    表示,否则请不要使用ForEach-Object。”>
  • 输出字符串阻止填充$ Attachment。

  • 0
    投票
    © www.soinside.com 2019 - 2024. All rights reserved.