gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:28:21 34 4
gpt4 key购买 nike

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

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

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

    以下代码是我所拥有的,但是尝试附加说Send-MailMessage的文件时出错:找不到驱动器。名称为“
    $ValidFiles = Get-ChildItem -Path C:\Results -Recurse |
    Select-String -Pattern "Test" |
    Select-Object -Unique Path

    foreach ($ValidFile in $ValidFiles)
    {

    $From = 'test <test@test.com>'
    $To = 'me <me@test.com>'
    $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
    }

    任何帮助是极大的赞赏。

    最佳答案

    首先,确保$ValidFiles仅包含字符串(文件路径):

    $ValidFiles = Get-ChildItem -Path C:\Results -Recurse | 
    Select-String -List -Pattern "Test" |
    ForEach-Object Path
  • -List 中添加Select-String会使搜索在给定文件中找到的第一个匹配项处停止,从而消除了对Select-Object -Unique的需求。
  • Select-Object 即使指定了一个属性[pscustomobject],也会输出具有指定属性的Path实例;尽管您可以使用-ExpandProperty Path来获取.Path属性值,但使用 ForEach-Object 和属性名来代替更为简单。

  • 然后,直接使用 $ValidFile(现在是路径字符串)作为 -Attachments参数(已输入 [string[]],但也接受标量 [string]实例(单个字符串))。
  • 通常,不要使用 Out-String ,除非您想要格式化输入对象的显示形式。
  • 关于powershell - 如何在Powershell中使用Get-ChildItem将文件附加到电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60481382/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com