这可能听起来像是一个愚蠢的问题,但我想知道如何将一些邮件地址导入PowerShell,以便向所有邮件发送一封邮件,例如Send-MailMessage -To $MailTo
。
我已设法删除该行开头的文字MailTo:
。这个例子会更清楚:
输入文件:
# Comment
MailTo: User1@domain.com, User2@domain.com, User3@domain.com
MailTo: User4@domain.com, User5@domain.com, User6@domain.com, User7@domain.com, User8@domain.com
代码:
$File = (Get-Content -Path $ImportFile) -notlike '#*' | Foreach {$_.TrimEnd()} | Where {$_ -ne ""}
$MailTo = $File | where { $_ -like "MailTo:*" } | Foreach {$_ -replace "^MailTo: "}
解决方案:
$MailTo = ($File | where { $_ -like "MailTo:*" } | Foreach {$_ -replace "^MailTo: "}) -split ',\s*' | Foreach {$_.Trim()} | Where {$_}
感谢下面的Joey。
答案 0 :(得分:1)
您还可以使用此变体,更强大:
$data = cat file
[regex] $re = "(?:\G(?!\A)|^MailTo:[ ]*)(?:[ ]*,[ ]*)?(?'mail'[^,\s]+)"
$address = $data |
select-string $re -all |
foreach {$_.matches}|foreach {$_.groups['mail'].value}
Write-output $address
例如,如果您的$数据包含:
# comment foo@bar.com, boo@domain.com
Mailto: mail@d.com, mail2@.col.col ...etc
Mailto: mailto@do.com
Dummy@mail.com, mail3@goo.com
Data other data
返回确切数据
答案 1 :(得分:0)
所以你基本上只想要该文件中的所有邮件地址?或者只是从特定的一行?
在前一种情况下,如
$addresses = ((Get-Content $ImportFile) -replace '#.*|^MailTo:\s+') -split ',\s*'
应该足够了。您可以将该数组传递给-To
的{{1}}参数。也许之后仍有一些流浪的空白,但通过将上面的内容加到Send-MailMesssage
可以很容易地解决这个问题。