Exchange 2007 terjesztési lista CSV fájlból

Az Exchange 2007-hez csupán egy 2%-ban kész GUI-t mellékelnek azért a pár millió Forintért, a többit meg kell oldani PowerShell-ben, vagy .NET-ben le kell fejleszteni magunknak. Ahhoz, hogy az AD varázslása nélkül terjesztési listát tudjunk létrehozni, egy NEM Microsoft formátumú CSV-re van szükségünk, az Exchange Management Shell-re és persze kitartásra és türelemre.

Hogy miért “NEM Microsoft” formátumú CSV? Azért mert a CSV ügye az egész világ szerint Comma Separated Values – azaz VESSZŐVEL elválasztott értékek. A Microsoft CSV-ben – amit mondjuk Excelben is mentünk – pontosvesszővel van elválasztva, azaz SSV-nek kellene lennie: Semicolon Separated Values. Mert a Microsoftnak és a Cisco-nak mindenből kell egy világtól eltérő saját szabvány. De láss csodát, az Exchange-nek a CSV, VESSZŐVEL elválasztott.

Hogyan is nézzen ki egy ilyen CSV? Tulandonképpen 2 mindenképpen kitöltendő mező van, a többi automatikusan létrejön, vagy opcionális: az e-mail cím (SMTP address) és a név (Name). Például:

No,Name,MailAddr
1,Gipsz Jakab,gipsz.jakab@teszt.com
2,Teszt Elek,teszt.elek@teszt.com

Amire nagyon oda kell figyelni:

  • vesszővel és ne pontosvesszővel legyenek az adatok elválasztva
  • az elválasztó vesszőknél nem lehet szóköz
  • az első sor mindig az oszlopneveket kell hogy tartalmazza
  • a CSV file valami könnyen elérhető helyen kell legyen, pl.: c:cimek.csv

A kontaktok importálása:

  1. Hozzuk létre a CSV fájlt, ügyelve a megfelelő formátumra (feljebb)
  2. Másoljuk egy könnyen elérhető helyre a szerveren (nekem problémásan ment az UNC), pl. c:cimek.csv
  3. Indítsuk el az Exchange Management Shell-t
    Importáljuk egy változóba a CSV tartalmát:

    [PS] C:Documents and Settingsadmin2>$csv = Import-Csv "C:cimek.csv"
  4. Egyenként adjuk hozzá a bejegyzéseket, megjelölve, hogy melyik mező melyik:
    [PS] C:Documents and Settingsadmin2>foreach($line in $csv) { New-MailContact -ExternalEmailAddress $line.MailAddr -OrganizationalUnit "Contacts" -Name $line.Name }
  5. Ha minden jól alakul, megússzuk egy rakás piros sor nélkül, ellenenőrizzük az Exchange Management Console-ban (F5-el nem árt frissíteni)

A terjesztési lista létrehozása:

A terjesztési lista automatikus feltöltéséhez, ugyancsak erre a CSV-re lesz szükségük. A legkönnyebb, ha megvarázsoljuk az Exchange Management Console-on a terjesztési listát (pl.:TesztCsoport) és PowerShell-ben adjuk hozzá a sok-sok kontatot, az alábbi módon:

[PS] C:Documents and Settingsadmin2>foreach($line in $csv) { Add-DistributionGroupMember -id TesztCsoport -Member $line.MailAddr }

Megjegyzés: Persze ami nálam nem működött, az lehet hogy más valakinél simán fog menni. Ilyen lehet a vessző-pontosvessző kérdés is, vagy a szóköz problémája. Naracs színnel a változókat jelöltem. Lehetőség van arra, hogy egy lépésben oldjuk meg, a $csv változó nélkül is, például így:

Import-csv C:cimek.csv | foreach {add-distributiongroupmember -id TesztCsoport -Member $_.MailAddr }

Google barátunk is ilyen eredményeket fog adni, de engem valamiért ez nem szeretett, mindig azt mondta, hogy $null az érték. Ha kiechoztam, akkor meg ott volt… Ha sorszámozni szeretnénk a listát, mert mondjuk nincsenek nevek, csak e-mail címek a listában, akkor azt az alábbi módon kell:

[PS] C:Documents and Settingsadmin2>foreach($line in $csv) { New-MailContact -ExternalEmailAddress $line.MailAddr -OrganizationalUnit "Contacts" -Name "Kontakt$($line.No)" }

Ahol a No a CSV-ben szereplő sorszám mező, így ennek eredménye Kontakt1, Kontakt2, stb. lesz.

Ha szeretnénk informálódni az eltárolt/eltárolható adatokról, akkor kiexportálhatjuk CSV-be:

[PS] C:Documents and Settingsadmin2>Get-DistributionGroupMember -Identity TesztCsoport | Export-Csv c:lista.csv