Powershell: как работать со значениями сгруппированных объектов? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть список Excel с двумя столбцами, как показано ниже:

Excelfile

+--------+------------+
| File   | Email      |
+--------+------------+
| 0001   | A@mail.com |
| 0004   | B@mail.com |
| 0005   | C@mail.com |
| 0008   | B@mail.com |
+--------+------------+

Я хочу использовать сценарий PowerShell, чтобы отправлять электронную почту каждому пользователю и прикреплять все файлы, которыесвязаны с конкретным пользователем.Например, пользователь A получит только один файл (c: \ temp \ 0001.pdf), а пользователь B получит два файла, прикрепленных к его электронной почте (c: \ temp \ 0004.pdf и c: \ temp \ 0008.pdf) и т. Д.на.

Я могу прочитать свой файл Excel с помощью модуля powershell ImportExcel и сгруппировать содержимое по адресу электронной почты.И я также могу отправить одно письмо в другом скрипте PowerShell.Но я не знаю, как связать эти два фрагмента кода, так как я начинающий PowerShell.Буду очень признателен за любую помощь.

Часть кода 1

$exceldata = (Import-Excel -Path "C:\Users\Administrator\Desktop\testdata.xlsx")
$groupeddata = ($exceldata | Group-Object -Property Email)

Я получу следующий набор результатов:

+-------+------------+------------------------------------------------------------------+
| Count | Name       | Group                                                            |
+-------+------------+------------------------------------------------------------------+
| 1     | A@mail.com | {@{File=0001; Email=A@mail.com}}                                 |
| 2     | B@mail.com | {@{File=0004; Email=B@mail.com}, @{File=0008; Email=B@mail.com}} |
| 1     | C@mail.com | {@{File=0005; Email=C@mail.com}}                                 |
+-------+------------+------------------------------------------------------------------+

Часть кода 2

Send-MailMessage -To "B@mail.com" -From "DB Admin <dbadmin@xyx.com>" -SMTPServer smtp1.xyz.com -Subject "Monthly report" -Body "Please check attached files" -Attachments "c:\temp\0004.pdf", "c:\temp\0008.pdf"

также работает.

Но как мне связать эти два фрагмента кода?Буду очень признателен за любую помощь, так как я начинающий сценарий Powershell.

1 Ответ

0 голосов
/ 07 февраля 2019

Попробуйте использовать что-то подобное, чтобы ваш код работал.Я высмеял некоторые ваши данные, но вы можете видеть, что $group похож на ваш $groupeddata.

. Ключ просматривает структуры данных в отладчике и выясняет, как получить доступ к членам, которые выхочу.Использование foreach над каждым позволяет вам работать с каждой записью в группе.

$data = @'
File, Email
0001, A@email.com,
0004, B@email.com,
0005, C@email.com,
0008, B@email.com,
'@

$xls = $data | ConvertFrom-Csv

$group = $xls | Group -Property Email

foreach ($entry in $group)
{
    $email = $entry.Name
    $files = ($entry.Group.File | % {'c:\temp\'+$_+'.pdf'}) -join ', '

    # debugging...look at this in debugger ISE or VSCode
    "$email and $files"

    # uncomment to actually run the command...
    #Send-MailMessage -To $email -From "DB Admin <dbadmin@xyx.com>" -SMTPServer smtp1.xyz.com -Subject "Monthly report" -Body "Please check attached files" -Attachments $files
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...