PowerShell ConvertFrom-CSV水平

时间:2014-09-24 07:09:42

标签: powershell csv

这可能听起来像是一个愚蠢的问题,但我想知道如何将一些邮件地址导入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。

2 个答案:

答案 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可以很容易地解决这个问题。