Как прикрепить файлы к электронной почте, используя Get-ChildItem в Powershell - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь написать сценарий 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 <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
}

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

Сначала убедитесь, что $ValidFiles содержит только строки (пути к файлам):

$ValidFiles = Get-ChildItem -Path C:\Results -Recurse | 
                Select-String -List -Pattern "Test" | 
                  ForEach-Object Path
  • Добавление -List к Select-String останавливает поиск при совпадении first , найденном в данном файле, что устраняет необходимость в Select-Object -Unique.

  • Select-Object выводит [pscustomobject] экземпляров с указанным свойством / свойствами, даже если указано только одно свойство Path; в то время как вы могли бы использовать -ExpandProperty Path вместо этого, чтобы получить только свойство .Path значение , проще использовать ForEach-Object с именем свойства вместо этого.

Затем используйте $ValidFile - который теперь является путем string - напрямую в качестве аргумента -Attachments (который является [string[]] -типированным, но также принимает скалярный [string] экземпляр (одна строка)).

  • Как правило, не используйте Out-String, если вы не хотите отформатированный для отображения представление входных объектов.
0 голосов
/ 02 марта 2020

Вне строки останавливается $ Вложение заполняется.

$Attachment = $ValidFile | Out-String

Попробуйте

 $Attachment = $ValidFile
...