Использование объекта конвейера для заполнения mail -to и -attachment - PullRequest
0 голосов
/ 22 декабря 2018

Первый скрипт Powershell, поэтому любые советы или рекомендации приветствуются.Я анализирую .csv в меньшие .csv для отправки информации о серверах получателям, и я столкнулся с проблемой в моем foreach.Как мне заставить это работать?

Одна интересная вещь заключается в том, что в Send-MailMessage -to не должен принимать объекты конвейера, он по-прежнему выдает ошибку, но все равно отправляет электронные письма.Однако вложение никогда не отправит.

    #had to set this as a variable because @ was throwing splatting errors
    $Mail = "@Email.com"

    #Import csv and split information, exports UID.csv
    Import-csv C:\path\info.csv | Group-Object UID |    
      ForEach-Object {
        $_.Group | Export-csv "C:\path\$($_.Name).csv" -NoTypeInformation
      }

    #Import file again to get unique list of UID and send mail with 
    #respective UID.csv

    Import-csv C:\path\info.csv | Group-Object UID |    
      ForEach-Object {
        $_.UID | Send-MailMessage -From "<Me@email.com>" -To "<$($_.Name)$Mail>" `
          -Attachments "C:\path\$($_.Name).csv" `
          -Subject "Testing" -Body "Please Ignore This" -Priority High `
          -SmtpServer smtp.server.com   
      }

1 Ответ

0 голосов
/ 22 декабря 2018

in Send-MailMessage, -to не должны принимать объекты конвейера

В принципе это так, а именно, если объекты конвейера имеют свойство .To (что не так)для вас).

Однако, с вашим текущим подходом, вам вообще не нужен конвейерный ввод, учитывая, что вы вводите весь ввод как аргументы .

Кроме того, ваш конвейерный ввод неверен, потому что $_.UID отправляет $null через конвейер, учитывая, что $_ - объект групповой информации, выводимый Group-Object - не имеет свойства .UID.

Используя блоки сценариев с задержкой привязки ({ ... }), вы можете упростить вашу команду следующим образом, устраняя необходимость вызова ForEach-Object:

Import-csv C:\path\info.csv | Group-Object UID |
  Send-MailMessage -From "<Me@email.com>" -To { "<$($_.Name)@Email.com>" } `
      -Attachments { "C:\path\$($_.Name).csv" } `
      -Subject "Testing" -Body "Please Ignore This" -Priority High `
      -SmtpServer smtp.server.com   

Корочеблоки скриптов, переданные в -To и Attachments, оцениваются для каждого входного объекта, и их вывод определяет значение параметра в каждой итерации.В блоке сценария $_ представляет объект конвейера, как обычно.

Обратите внимание, что такие блоки сценария с задержкой могут использоваться только с параметрами, которые предназначены для приема ввода конвейера (независимо от того, является ли это значением (целым объектом) или значением определенного свойства).

...