2011-02-09 49 views
5

我想为Exchange命令行管理程序编写一个powershell脚本,将联系人列表从csv文件导入到通讯组中。使用Where对象的Powershell脚本

我开始了与

Import-csv C:\filename.csv | forEach-Object {New-MailContact .......} 

这种运作良好,但在我的csv文件的某些条目有一个空白的电子邮件地址,并创建新德接触胡扯,因为ExternalEmailAddress是空白。所以,我试过:

Import-csv C:\filename.csv | ForEach-Object { Where-Object {$_.ExternalEmailAddress -ne "" } | New-MailContact -Name $_.Name -ExternalEmailAddress $_.ExternalEmailAddress....} 

但这似乎并没有工作 - 它没有过滤掉空白电子邮件地址的条目。

我在做什么错?

回答

9

我想你可能想使用前ForEach-ObjectWhere-Object,因为它会过滤沿管道传递的对象。

根据New-MailContact cmdlet支持的内容,您可能会将结果直接传递给它,或者您可能必须逐个传递结果。

所有一次(不使用ForEach-Object):

Import-csv C:\filename.csv | Where-Object {$_.ExternalEmailAddress -ne "" } | New-MailContact -Name $_.Name -ExternalEmailAddress $_.ExternalEmailAddress } 

一个接一个(使用ForEach-Object):

Import-csv C:\filename.csv | Where-Object {$_.ExternalEmailAddress -ne "" } | ForEach-Object { New-MailContact -Name $_.Name -ExternalEmailAddress $_.ExternalEmailAddress } 
+0

不,我试过了,并且得到了一个错误 - 新-MailContact:无法将参数绑定到参数“名称”,因为它为空。 在线:1 char:106 + Import-csv c:\ FloridaBarTest.csv | Where-Object {$ _。ExternalEmailAddress -ne“”} | New-MailContact -Name <<<< $ _。Name -FirstName $ _。FirstName -LastName $ _。FirstName -ExternalEmailAddress $ _。ExternalEmailAddress -OrganizationalUnit“FloridaBarContacts”好像csv内容没有通过管道传递。 – 2011-02-09 16:31:11

1

可能实际上有一个空间或一些其他的空白字符在那里,而且它们不是空的。也许是这样的:

Import-csv C:\filename.csv | Where-Object {$_.ExternalEmailAddress -match "^\S+$" } | New-MailContact -Name $_.Name -ExternalEmailAddress $_.ExternalEmailAddress....}