PowerShell - Toplu modu kullanarak E-posta adresleri ekleme | Ofis 365 | Bölüm 4#13


Mevcut makale, PowerShell kullanarak Exchange Online alıcılarına E-posta adresi ekleme görevini incelediğimiz önceki makalenin çekişmesidir. Bu makalenin odak noktası, Toplu modda ek bir E-posta adresi ekleme görevinin nasıl gerçekleştirileceğidir.

Toplu modu kullanarak E-posta adresleri ekleme

"Toplu işlemin" dikkate değer avantajı, "tek tıklamayla", Exchange Online alıcısı gibi birçok "nesneyi", her alıcıya ayrı ayrı hitap etmeye gerek kalmadan aynı anda güncelleyebilmemizdir.

Aynı zamanda, bu "dikkate değer avantaj" çok kolaylıkla "dikkate değer dezavantaja" dönüşebilir.

Üretim ortamımızda çalıştırmadan önce “Toplu işlem” test edilip doğrulanmazsa, PowerShell toplu komutunun Yanlış uygulanması durumunda organizasyon ortamımıza ciddi zararlar verebilir!

Sorun, Toplu işlemler gibi "ağır araçlar" kullandığımızda, PowerShell Toplu komutunun "ne yaptığını" tam olarak anlamamızın önerilmesidir.

Benim tavsiyem, Toplu işlemleri yürütmeden önce, "Toplu işlemi" bir "Lab" ortamında test etmeye çalışmanız veya Toplu işlemi "test kullanıcıları" üzerinde uygulamak için kullanmanızdır.

PowerShell toplu komutunun işlemi doğru şekilde gerçekleştirdiğinden emin olduktan ve gerekli toplu komutu çalıştırdıktan sonra, etkilenen "nesnelerin" (örneğin, Exchange Online posta kutuları) ve orada doğru şekilde yapılandırılmıştır.

Yararlı araç - Whatif

“Bulk command” ile çalışırken kullanabileceğimiz çok kullanışlı ve güçlü bir PowerShell seçeneği (parametre) - Whatif seçeneğidir.

Whatif seçeneğini kullanarak, ortamımızda herhangi bir değişiklik uygulamadan "Toplu PowerShell komutunu" çalıştırırsak "ne olurdu" senaryosunu simüle etmemizi sağlayın.

Benim tavsiyem, aynı anda on yüzlerce, hatta binlerce posta kutusunu etkileyebilecek Bulk PowerShell komutunu çalıştıracak tuşa "basmadan" önce Whatif seçeneği seçeneğini mümkün olduğu kadar kullanmanızdır. Aynı zaman.

Aşağıdaki örneklerde, her Exchange alıcısına ek bir E-posta adresi ekleyerek mevcut tüm Exchange Online posta kutularını "etkileyecek" bir "Toplu komut" çalıştırıyoruz.

Toplu PowerShell komutunun "ne yapacağını" "tahmin edebilmek" için Whatif PowerShell parametresini ekliyoruz.

Örneğimizde, "toplu işlemin" "Angelina", "Aretha" ve "Beyonce" gibi belirli bir Exchange posta kutusunda başarıyla çalışacağını görebiliriz. .”

Aynı zamanda Toplu işlemin bazı Exchange alıcılarını güncellemede başarısız olduğunu da görebiliyoruz.

Whatif sonuçlarına baktığımızda, Toplu işleminin Adele posta kutusu gibi belirli Exchange posta kutularını güncelleyemediğini görebiliriz.

PS C:\> $AllMailboxes = Get-Mailbox -ResultSize Unlimited
Foreach ($Mailbox in $AllMailboxes)
{
$NewAddress = $Mailbox. UserPrincipalName + "@o365pilot.com" # Create a new string that add a NEW E-mail address with the NEW domain suffix
$Mailbox.UserPrincipalName += $NewAddress # “Collect” all existing E-mail addresses + add the NEW E-mail address as an additional E-mail address (existing E-mail address will not be removed).
Set-Mailbox -Identity $Mailbox.Alias -EmailAddresses $Mailbox.EmailAddresses -whatif
}
The operation on mailbox "Adele" failed because it's out of the current user's write scope. The action 'Set-Mailbox', 'EmailAddresses', can't be performed on the object 'Adele' because the object is being
synchronized from your on-premises organization. This action should be performed on the object in your on-premises organization.

+ CategoryInfo : InvalidOperation: (Adele:ADObjectId) [Set-Mailbox], InvalidOperationException

+ FullyQualifiedErrorId : [Server=DB6PR0501MB2069,RequestId=25c4f399-2412-41c2-9a77-41af5911613e,TimeStamp=1/9/2017 11:43:30 AM] [FailureCategory=Cmdlet-InvalidOperationException] 4728449,Microsoft.Ex
change.Management.RecipientTasks.SetMailbox

+ PSComputerName : outlook.office365.com
The operation couldn't be performed because 'Alicia Keys' matches multiple entries.

+ CategoryInfo : NotSpecified: (:) [Set-Mailbox], ManagementObjectAmbiguousException

+ FullyQualifiedErrorId : [Server=DB6PR0501MB2069,RequestId=25c4f399-2412-41c2-9a77-41af5911613e,TimeStamp=1/9/2017 11:43:31 AM] [FailureCategory=Cmdlet-ManagementObjectAmbiguousException] 6E7A870C,Mi
crosoft.Exchange.Management.RecipientTasks.SetMailbox

+ PSComputerName : outlook.office365.com

What if: Setting mailbox "Angelina".
What if: Setting mailbox "Aretha".
What if: Setting mailbox "Beatles".
What if: Setting mailbox "Beyonce".

Özel senaryomuzda, PowerShell komutu Adele'in posta kutusunu güncelleyemiyor çünkü Adele kullanıcı hesabı Şirket İçi Etkin'den Exchange Online altyapısıyla senkronize edilmiş "Senkronize kullanıcı hesabı" olarak kabul ediliyor Dizin.

Bu tip bir senaryoda gerekli “toplu işlemi” Office 365 altyapısı yerine Şirket İçi ortamda (On-Premise Active Directory veya Exchange on-premise) çalıştırmamız gerekecek.

Dizin senkronizasyon ortamı hakkında daha fazla bilgiyi PowerShell kullanarak E-posta adresleri ekleme | Ofis 365 | Bölüm 3#13.

Test posta kutularıyla çalışma (Lab Posta Kutuları)

Bir "toplu işlem" uyguladığımızda, işlem Exchange Online posta kutuları gibi bir "nesne grubu" tarafından çalıştırılır.

Aşağıdaki bölümde, belirli bir Toplu işlemi test etmek için "test posta kutuları olarak kullanabileceğimiz pilot Exchange Online posta kutuları" oluşturmaya yönelik önemli ihtiyacı gözden geçirmek istiyorum.

Toplu komutun etkisini test edebilmek için, gerçek üretim nesnelerini temsil eden "Dizi" görevi görecek bir "Exchange Online posta kutularını Test Et" oluşturulması önerilir.

Teknik olarak Array oluşturabileceğimiz birçok yöntem vardır.

Örneğimizde, "Test posta kutuları" olarak hizmet verecek belirli Exchange Online posta kutularını özel karakter kullanarak işaretleyerek "ayırt ediyoruz".

Bu Exchange Online posta kutularını diğer posta kutularından ayırmak için, "test posta kutularının" her birine, CustomAttribute1 adlı alanı kullanarak özel bir özellik ekliyoruz.

Örneğimizde kullandığımız metin dizesi TestMailbox'tur.

Adım 1 - Diziyi oluşturma

CustomAttribute1'lerinde belirli bir değere sahip tüm "test Exchange Online posta kutularını" içeren bir dizi oluşturmak için, yalnızca görüntülemeyi istediğimiz Nerede ifadesini kullanırız CustomAttribute1 alanlarının TestMailbox değerine sahip olduğu Exchange Online posta kutuları.

PowerShell komutunun bir örneği:

Get-Mailbox | Where {$_.CustomAttribute1 -eq 'TestMailbox'}

Adım 2 - Dizi üyelerini “depolayan” bir değişken tanımlayın.

Dizideki "üyeleri" yönetebilmek için, Dizi üyelerini saklayan "mantıksal kap" görevi gören bir değişken tanımlarız.

Örneğimizde, PowerShell filtre arama sorgusunun sonuçlarını depolayan - $AllMailboxes adlı bir değişken tanımladık.

PowerShell komutunun bir örneği:

$AllMailboxes = Get-Mailbox | Where {$_.CustomAttribute1 -eq 'TestMailbox'}

Daha sonra, oluşturulan değişkende depolanan bilgilere "erişecek" ve Dizideki her üye için "bir şeyler yapacak" bir PowerShell toplu komutunu kullanacağız.

ForEach deyimini kullanarak E-posta adresini Toplu olarak ekleme

Aşağıdaki bölümlerde, bir PowerShell betiği kullanarak mevcut Exchange Online alıcılarına toplu modda YENİ bir E-posta adresi ekleme sürecini inceliyoruz.

"Toplu işlem", PowerShell ForEach ve Where ifadesinin kullanılması, Array üyesini saklayacak bazı değişkenler oluşturma gibi birkaç "PowerShell bileşenini" dahil ederek uygulanır ve Üyelerin her biri, bir CSV dosyasından bilgi aktaran PowerShell cmdlet'leri, değişkenler oluşturma vb.

Aşağıdaki bölümde kullandığımız PowerShell komut sözdizimi hakkında temel bir açıklama yapıyorum.

ForEach deyimi Döngüsü işleminin konusu ve PowerShell ortamında “değişkenlerin” kullanımı hakkında daha detaylı bilgi almak isterseniz aşağıdaki yazıları okuyabilirsiniz:

  • Dizi aracılığıyla döngü oluşturma “ForEach” PowerShell komutunu kullanma | Temel giriş | Bölüm 1#2
  • Dizi Üzerinden Döngü Oluşturma “ForEach” ifadesini ve değişkenlerini kullanma | PowerShell ortamı| Bölüm 2#2

PowerShell Nerede filtresinin nasıl kullanılacağı hakkında daha fazla bilgi edinmek isterseniz, filtrelenmiş bir arama sorgusu oluşturmak için aşağıdaki makaleleri okuyabilirsiniz:

  • Exchange Online nesnelerini görüntülemek için PowerShell'i kullanın | Bölüm 3#3
  • Office 365 nesnelerini görüntülemek için PowerShell'i kullanın | Bölüm 2#3

Tüm Posta Kutusu alıcılarına YENİ Etki Alanı adı son ekini kullanarak ek E-posta adresi (Takma ad) ekleyin | Toplu Mod

Aşağıdaki bölümde, Exchange Online alıcılarımızın her biri için YENİ alan adı son ekini kullanan YENİ bir Takma Ad E-posta adresi ekleme görevini gerçekleştirecek PowerShell toplu komut dosyasını kullanma sürecini inceliyoruz.

  • Şirketimiz genel alan adını kullanıyor - o365info.com
  • Şirketimiz ek bir alan adı satın aldı - o365pilot.com

Şu anda tüm şirket kullanıcılarının alan
ad son ekini kullanan bir E-posta adresi vardır - “o365info.com ”.

Aşağıdaki görevleri uygulamamız istendi:

  • Tüm şirket kullanıcılarına (Exchange Online alıcıları), “YENİ alan adı” son ekini - “o365pilot.com<” içeren bir ek E-posta adresi (proxy E-posta adresi) ekleyin.“.
  • YENİ E-posta adreslerinin “Takma ad kısmı” (sol kısım), Exchange Online alıcılarının her biri tarafından Birincil E-posta adresi için kullanılan mevcut Takma Adla aynı olmalıdır.
  • YENİ E-posta adresi, mevcut birincil E-posta adresinin yerine geçmeyecek ancak bunun yerine ek bir E-posta adresi (Takma Ad, Proxy E-posta adresi) olarak eklenecektir.
  • Exchange Online alıcılarının mevcut tüm Takma Ad E-posta adresleri ve SIP adresi gibi diğer adresleri saklanacaktır.

Aşağıdaki diyagramda kuruluşun E-posta adresinin yapısını ve gerekli sonuçları görebiliriz:

Örneğin,

  • John adlı kullanıcının mevcut Birincil E-posta adresi: John@o365info.com
  • John adlı
    alıcıya ek bir E-posta adresi (Proxy E-posta adresi) eklemek istiyoruz.
  • Ek E-posta adresi şu E-posta adresi olacaktır - “John@o365pilot.com ”.

Aşağıdaki şemada, John adlı belirli bir Exchange Online alıcısı için istenen sonucun bir örneğini görebiliriz.

PowerShell komut yapısı

Tüm Exchange Online alıcıları için gerekli güncellemeyi çalıştırabilmek amacıyla, mevcut tüm Exchange Online posta kutuları üzerinden döngü oluşturacak bir PowerShell ForEach deyimi (değişkenlerin birleşimiyle) kullanacağız ve gerekli görev: Exchange Online posta kutularının her biri için yeni bir E-posta Takma Adı eklemek.

Adım 1: Mevcut tüm Exchange Online posta kutuları hakkındaki bilgileri depolamak için $AllMailboxes adlı değişkeni kullanırız.

Adım 2: YENİ E-posta adresini saklamak için oluşturulan $NewAddress adında bir değişken tanımlarız. YENİ E-posta adresi, mevcut Exchange alıcısı Takma Adı ($Mailbox.Alias) + “YENİ alan adı son eki @o365pilot.com” dizesinin birleşimi kullanılarak oluşturulur.

3. Adım: Tüm alıcının mevcut E-posta adresini + Yeni E-posta adresini aşağıdaki şekilde saklayacak bir “Dizi” oluşturuyoruz - $Mailbox.EmailAddresses += $NewAddress
Bu adımı, mevcut E-posta adresinin silinip YENİ E-posta adresiyle değiştirileceği bir senaryoyu önlemek için kullanıyoruz.

4. Adım: PowerShell'den, Yeni E-posta adresini (YENİ E-posta) ekleyerek her alıcı için YENİ bir E-posta adresi (Takma Ad E-posta adresi) "ayarlamasını" istiyoruz. Alan adı son eki o365pilot.com olan adres) mevcut E-posta adresleri dizisine ekleyin.

$Domainsuffix = Read-Host "Type the name of the Domain name suffix"
$AllMailboxes = Get-Mailbox -ResultSize Unlimited
Foreach ($Mailbox in $AllMailboxes)
{
# Creating NEW E-mail address that contracted in the following way: Take the existing recipient Alias name + use the NEW Domain name as a domain suffix + “Bind” the Alias name + the NEW Domain name suffix.
$NewAddress = $Mailbox.Alias + "@$Domainsuffix"
# “Store” all existing E-mail addresses + add the NEW E-mail address as an additional E-mail address.
$Mailbox.EmailAddresses += $NewAddress
# Assign the NEW E-mail address to the existing Exchange Online recipient
Set-Mailbox -Identity $Mailbox.Alias -EmailAddresses $Mailbox.EmailAddresses #-whatif
}

Alıcıları “Array” olarak tanımlayan değişkenle oynamak

Exchange Online "alıcı Dizisini" tanımlayan değişken $AllMailboxes oldukça "esnektir"

Pek çok farklı türde Exchange Online alıcısını üye veya “Dizi” olarak tanımlayabiliriz.

1. Seçenek

Toplu komutunun tüm "Exchange Online posta kutularına" ek bir E-posta adresi eklemesini istediğimiz bir senaryo tanımlayın. ”

Bu durumda, Toplu komutu, ek E-posta adresini Oda posta kutusu, paylaşılan Posta Kutusu ve Kullanıcı posta kutusu gibi çeşitli Exchange Online Posta Kutusu alıcı türlerine ekler.

$AllMailboxes = Get-Mailbox -ResultSize Unlimited

2. Seçenek

Toplu komutunun yalnızca "Exchange Online kullanıcı posta kutularına" ek E-posta adresi eklemesini istediğimiz bir senaryo tanımlayın. ”

$AllMailboxes = Get-MailBox -Filter '(RecipientTypeDetails -eq "UserMailbox")'

3. Seçenek

Toplu komutunun yalnızca mevcut tüm Exchange Online alıcılarına ek bir E-posta adresi eklemesini istediğimiz bir senaryo tanımlayın.

Bu senaryoda Toplu komutu, Gruplar, posta kişileri, Posta kutusu alıcısı vb. gibi çeşitli Exchange Online alıcı türlerine ek bir E-posta adresi ekler.

$AllMailboxes = Get-recipient -ResultSize Unlimited

4. Seçenek

Toplu komutun, Exchange Şirket içi ortamından eşitlenen alıcıların yanı sıra Exchange Online alıcılarına ek bir E-posta adresi eklemesini istediğimiz bir senaryo tanımlayın.

$AllMailboxes = Get-recipient -ResultSize Unlimited | Where {$_.Capabilities -nq "MasteredOnPremise"}

5. Seçenek

Toplu komutunun, Exchange Online alıcılarının Exchange Online posta kutularına "Test posta kutusu" olarak tanımlanan ek bir E-posta adresi eklemesini istediğimiz bir senaryo tanımlayın. ”

Bu durumda, toplu komut yalnızca özelattribute1 değeri “TestMailbox.xml” olan Exchange Online posta kutularını güncelleyecektir. ”

$AllMailboxes = Get-Mailbox | Where {$_.CustomAttribute1 -eq 'TestMailbox'}

Birincil E-posta adresi Alan adı son ekini YENİ Alan adı son ekiyle değiştirin | Toplu mod

Aşağıdaki bölümde, mevcut Birincil E-posta adresini farklı bir alan adı son eki kullanan YENİ Birincil E-posta adresiyle değiştirme görevini gerçekleştirecek bir PowerShell toplu komut dosyası kullanma sürecini inceliyoruz.

  • Şirketimiz genel alan adını kullanıyor - o365info.com
  • Şirketimiz ek bir alan adı satın aldı - o365pilot.com

Şu anda tüm şirket kullanıcılarının
alan adı son ekini - o365info.com kullanan bir E-posta adresi vardır.

Aşağıdaki görevleri uygulamamız istendi:

  • com alan adını kullanan mevcut birincil E-posta adresini, alan adı son ekini kullanan YENİ birincil E-posta adresiyle değiştirin - o365pilot.com
  • Exchange alıcısının Takma adı (E-posta adresinin sağ kısmı) aynı kalacaktır. Başka bir deyişle, mevcut Birincil E-posta adresinden mevcut Takma Ad adını korumak ve “sol kısım”ı (alan adı son eki) YENİ bir alan adı son ekiyle değiştirmek istiyoruz.
  • Önceki Birincil E-posta adresi silinmeyecek ancak bunun yerine Takma Ad E-posta adresi
    (ek E-posta adresi) olarak kaydedilecektir.
  • Alıcıların mevcut tüm Alias E-posta adresleri ve SIP adresi gibi diğer adresleri saklanacaktır.

Aşağıdaki diyagramda kuruluşun E-posta adresinin yapısını ve gerekli sonuçları görebiliriz:

Aşağıdaki şemada, John adlı belirli bir Exchange Online alıcısı için istenen sonucun bir örneğini görebiliriz.

PowerShell komut yapısı

Bu senaryoda kullandığımız PowerShell komutu, önceki senaryoda kullandığımız PowerShell komutuna benzemektedir.

Temel fark, bu durumda, her alıcının
birincil E-posta adresini YENİ E-posta adresini kullanacak şekilde ayarlayan ek bir PowerShell komutu eklememizdir.

Örneğimizde, mevcut Birincil E-posta adresini
“o365pilot.com ” etki alanı son ekini kullanarak değiştirmek istiyoruz.

Birincil E-posta adresini ayarlayın

Birincil E-posta adresini ayarlamak için WindowsEmailAddres PowerShell parametresini kullanıyoruz.

Senaryomuzda kullandığımız PowerShell sözdizimi şöyledir:

Set-Mailbox -Identity $Mailbox.Alias -WindowsEmailAddress $NewAddress

"YENİ E-posta adresi" yapısının oluşturulması

Yeni E-posta adresinin gerekli adlandırma kuralını oluşturmak için, önceki senaryoda kullanılan aynı “numarayı
kullanıyoruz.

YENİ bir E-posta adresi oluşturan bir değişken oluşturuyoruz.
E-posta adresinin “sol kısmı” (“Takma ad”), her Exchange alıcısının sahip olduğu mevcut Takma Addan alınır.

PowerShell mevcut Takma Adı YENİ alan adı son ekine (E-posta adresinin sağ kısmı) "bağlayacaktır".

Kullandığımız sözdizimi - $NewAddress=$Mailbox.Alias + “@o365pilot.com”

Kullandığımız PowerShell betiği sözdizimi şöyledir:

$AllMailboxes = Get-Mailbox -ResultSize Unlimited
Foreach ($Mailbox in $AllMailboxes)
{
# Creating NEW E-mail address that contracted in the following way: Take the existing recipient Alias name + use the NEW Domain name as a domain suffix + “Bind” the Alias name + the NEW Domain name suffix.
$NewAddress = $Mailbox.Alias + "@o365pilot.com"
Set-Mailbox -Identity $Mailbox.Alias -WindowsEmailAddress $NewAddress #-whatif
}

Güncel makale serisinin bir sonraki makalesi

PowerShell kullanarak E-posta adresleri ekleme - CSV dosyasından içe aktar | Toplu mod | Ofis 365 | Bölüm 5#13

İlgili makaleler