2011-02-09 9 views
5

Estoy intentando escribir un script powershell para Shell de administración de Exchange, importando una lista de contactos de un archivo csv a un grupo de distribución.Creación de scripts en Powershell con where-object

comienzo con

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

Esto funciona bien, excepto que algunas entradas en mi archivo csv tienen una dirección de correo electrónico en blanco y el crear nuievo dados de contacto porque ExternalEmailAddress está en blanco. Así que lo intenté:

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

Pero eso no parecía funcionar, no filtraba las entradas con direcciones de correo electrónico en blanco.

¿Qué estoy haciendo mal?

Respuesta

9

creo que es posible que desee utilizar Where-Object antes de ForEach-Object porque va a filtrar los objetos pasados ​​a lo largo de la tubería.

Según lo que admita el cmdlet New-MailContact, es posible que pueda canalizar los resultados directamente en él o puede que tenga que pasarlos uno por uno.

Todos a la vez (sin utilizar ForEach-Object):

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

Uno por uno (mediante el uso de ForEach-Object):

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

No, lo he intentado, y tiene un error -New-MailContact: No se puede vincular el argumento al parámetro 'Nombre' porque es nulo. En línea: 1 char: 106 + Import-csv c: \ FloridaBarTest.csv | Where-Object {$ _. ExternalEmailAddress -ne ""} | New-MailContact -Name <<<< $ _. Name -FirstName $ _. FirstName -LastName $ _. FirstName -ExternalEmailAddress $ _. ExternalEmailAddress -OrganizationalUnit "FloridaBarContacts" parece que los contenidos de la CSV no se pasan a través de la tubería . –

+0

¿Qué error (s) está recibiendo? ¿Puedes actualizar la pregunta con un poco más de información? –

+0

Puede ser bueno validar a los miembros del PSObject que se pasan a través de la canalización para asegurarse de que está accediendo a ellos. Para hacer esto, canalice los resultados de Import-Csv a Get-Member –

1

Podría haber en realidad un espacio u otro carácter de espacio en blanco allí, y no son en realidad nulos. Tal vez algo como esto:

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