Kohtuullisen usein tulee vastaan kysymys siitä, miten Exchange 2007:ssä tai Exchange 2010:ssä voidaan luoda vastaanottajaobjekteja bulkkina erityisesti CSV-tiedostossa olevaan informaatioon perustuen. Ohessa muutamia esimerkkejä joista kukin voi sitten tarpeensa mukaan säveltää eteenpäin:
Pipeline joka lukee käyttäjien tiedot CSV:stä ja luo sen perusteella uusia käyttöjäobjekteja postilaatikoineen:
import-csv "C:\temp\users.csv" | foreach-object {$temp = ConvertTo-SecureString $_.Password asPlainText -force;New-Mailbox -name $_.name UserPrincipalName $_.UPN -OrganizationalUnit $_.OU Database "Tietokannan nimi" -password $Temp}
Eli tässä esimerkissä tuo Import-CSV -komento lukee CSV-tiedostoa rivi kerrallaan. Jotta AD:yyn saadaan muodostettua yksi käyttäjäobjekti + postilaatikko per yksi rivi CSV:ssä (ja koska käyttäjän ja postilaatikon luonti vaatii useita peräkkäisiä operaatioita), käytetään toistamiseen PowerShellin Foreach-Object -rakennetta. Komentorakenteessa konvertoidaan ensin CSV:stä yksittäiseltä riviltä luettu salasanatieto (sarakkeesta jonka otsikko on Password) salasana selväkielisenä ja muutetaan se normaalista merkkijonosta SecureString-tyyppiseksi (PowerShell ei yleensä salli salasanan välittämistä komennoille sellaisenaan selväkielisessä muodossa, siksi tässäkin tuo konversio tarvitaan). Sen jälkeen luodaan uusi käyttäjä ja postilaatikko NEW-MAILBOX CDMletilla, ja asetetaan luotavan käyttäjätunnuksen ja postilaatikon perusattribuuttien arvot paikalleen CSV:stä luetun sarakeinformaation perusteella. Eli nuo lauseen kohdat $_.name $_.UPN viittaavat arvoihin joita käsittelyssä olevalla rivillä on merkitty ko. otsakkeella varustettuun sarakkeeseen.
Tämän mallin kanssa toimisi siis CSV joka olisi sisällöltään muotoa:
Name,UPN,OU,Password
Jorma Bergius,Jorma.bergius@test.local,"ou=test,dc=domain,dc=com",Salasana1
Kaisa Testi,kaisa.test@test.local,"ou=test,dc=domain,dc=com",Salasana1
Kas näin:
Tokihan tuolla määrällä informaatiota CSV:ssä, objektit ovat varsin niukkoja:
Mutta lisäämällä CSV:hen lisää sarakkeita, esim. Etunimi,Sukunimi jne. ja asettamalla näiden sarakkeiden arvot luontivaiheessa paikalleen NEW-MAILBOX CMDletin parametrien arvoksi:
New-Mailbox -name $_.name UserPrincipalName $_.UPN -Firstname $_.Etunimi -Lastname $_.Sukunimi -OrganizationalUnit $_.OU Database "Tietokannan nimi" -password $Temp
Tilanne onkin jo tyystin toinen. Kaikki NEW-MAILBOX CMDletin tukemat parametrit näet listattuna täältä (mitä kaikkea voit suoraan luontivaiheessa määritellä): http://technet.microsoft.com/en-us/library/aa997663.aspx
Joskus CSV josta tietoa pitää kaivaa objektit luodakseen on liiankin yksinkertainen (tietoa on liian vähän). Esimerkiksi vain sähköpostiosoitteet. Tällöin voi hyödyntöö PowerShellin erinomaisia ohjelmointiominaisuuksia ja käsitellä sisään tulevaa dataa hieman ennen käyttöä. Oheisessa esimerkissä tehdään kontakteja sähköpostiosoitteiden perusteella niin, että nimitiedot puretaan sähköpostiosoitteesta erotinmerkkiin (@) perustuen.
import-csv c:\temp\users.csv | foreach-object {$osat=$_.smtpaddress.split("@");new-mailcontact –Name ($_.smtpaddress) –OrganizationaUnit "Espoo" –alias $osat[0] –externalemailaddress ($_.smtpaddress) –displayname ($_.smtpaddress)}
Tuo siis vaatii CSV:n olevan muotoa, jossa sarakenimenä käytetään merkkijonoa SMTPADDRESS ja vastaavasti että AD:ssa on OU Espoo johon kontaktit luodaan(noita voi toki tarvittessa muuttaa). Mutta demoaa hyvin että minimaalisella muutoksella koodiin saadaan postilaatikoiden sijasta aikaan mail-enabloituja kontakteja.
Vastaavaa tarinaa löytyy netistä kyllä yllin kyllin jos kaipaat lisää esimerkkejä:
http://www.exchangepedia.com/2006/11/exchange-server-2007-bulk-creation-of-mailboxes-using-exchange-management-shell.html
Kyseisessä esimerkissä kannattaa huomioida erityisesti Template-postilaatikon käyttö (josta tiettyjä attribuuttien arvoja voidaan luontivaiheessa kopioida)
Jos käytät paljon testiympäristöjä joihin täytyy populoida haluttu määrä arbitraarisiä postilaatikoita, lukaise tämä: http://www.mikepfeiffer.net/2010/03/populating-exchange-labs-with-mailboxes-using-powershell/
Mutta tämä tässä tällä kertaa…