使用where-object的Powershell脚本

时间:2011-02-09 15:45:54

标签: powershell

我正在尝试为Exchange命令行管理程序编写一个powershell脚本,将csv文件中的联系人列表导入到通讯组中。

我从

开始
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....}

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

我做错了什么?

2 个答案:

答案 0 :(得分:9)

我认为您可能希望在Where-Object之前使用ForEach-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 }

答案 1 :(得分:1)

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

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