2011-02-09 17 views
5

Sto cercando di scrivere uno script PowerShell per Exchange Management Shell, importando un elenco di contatti da un file csv in un gruppo di distribuzione.Scripting di Powershell tramite oggetto-oggetto

ho iniziare con

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

Questo metodo funziona bene, tranne che alcune voci nel mio file CSV hanno un indirizzo e-mail vuota, e il creare nuove teh craps contatto fuori perché ExternalEmailAddress è vuoto. Quindi, ho provato:

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

Ma quello non sembra funzionare - non ha filtrato le voci con indirizzi email vuoti.

Cosa sto sbagliando?

risposta

9

penso che si potrebbe desiderare di utilizzare Where-Object prima ForEach-Object perché sarà filtrare gli oggetti passati lungo la pipeline.

A seconda di ciò che supporta il cmdlet New-MailContact, è possibile collegare direttamente i risultati o potrebbe essere necessario passarli uno alla volta.

Tutto in una volta (se non utilizzano ForEach-Object):

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

Uno a uno (utilizzando ForEach-Object):

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

No, ho provato, e ottenuto un errore -Nuovo-MailContact: Impossibile associare l'argomento al parametro 'Nome' perché è null. Alla riga: 1 carattere: 106 + Import-csv c: \ FloridaBarTest.csv | Where-Object {$ _. ExternalEmailAddress -ne ""} | New-MailContact -Nome <<<< $ _. Nome -FirstName $ _. FirstName -LastName $ _. FirstName -ExternalEmailAddress $ _. ExternalEmailAddress -OrganizationalUnit "FloridaBarContacts" sembra che il contenuto csv non venga passato attraverso la pipeline . –

+0

Quali errori stai ricevendo? Puoi aggiornare la domanda con un po 'più di informazioni? –

+0

Potrebbe essere utile convalidare i membri del PSObject che vengono passati attraverso la pipeline per assicurarsi di accedervi. Per fare ciò, reindirizzare i risultati di Import-Csv a Get-Member –

1

Potrebbe esserci effettivamente uno spazio o qualche altro carattere di spazio bianco lì, e non sono actully nulli. Forse qualcosa di simile:

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