我有一个具有两列的excel列表,如下所示:
+--------+------------+
| File | Email |
+--------+------------+
| 0001 | A@mail.com |
| 0004 | B@mail.com |
| 0005 | C@mail.com |
| 0008 | B@mail.com |
+--------+------------+
我想使用PowerShell脚本向每个用户发送电子邮件,并附加与特定用户相关的所有文件。例如,userA将仅获得一个文件(c:\ temp \ 0001.pdf),而userB将获得两个附加至其电子邮件的文件(c:\ temp \ 0004.pdf和c:\ temp \ 0008.pdf),依此类推上。
我可以使用Powershell模块ImportExcel读取我的excel文件,然后按电子邮件地址对内容进行分组。而且我还可以使用其他Powershell脚本发送一封电子邮件。但是我是Powershell的新手,所以我不知道如何链接这两个代码段。任何帮助将不胜感激。
$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}} |
+-------+------------+------------------------------------------------------------------+
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脚本的初学者,所以任何帮助将不胜感激。
答案 0 :(得分:0)
考虑使用类似的方法使代码正常工作。我嘲笑了您的一些数据,但是您可以看到$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
}