PowerShell kullanarak E-posta Adresleri hakkındaki bilgileri görüntüleme | Çıktıyı Karma Tablo ve Özel ifadeler kullanarak özelleştirme | Ofis 365 | Bölüm 7#13
Bu yazımızda şu senaryolarda PowerShell çıktısını optimize etmek ve değiştirmek için kullanabileceğimiz bir “araç” olarak Hash tablosu nasıl oluşturulur + Özel ifadeler konusunu inceliyoruz - Alıcının E-posta adresleri hakkında bilgi alın.
Aşağıdaki görevleri gerçekleştiren bir Hash tablosu + Özel ifadelerin nasıl oluşturulacağını öğreneceğiz:
- Birincil E-posta adresi, Proxy E-posta adresi, x500 E-posta adresi ve SIP E-adresi gibi belirli E-posta adresi türleri hakkında bilgi alın.
- SMTP E-posta adreslerinin görüntülenen sonuçlarından varsayılan SMTP önekini kaldırın.
- Çok değerli bir öznitelikteki değerleri bir "ayırıcı kuralı" kullanarak ayırın. ”
- Bir arama sorgusu tanımlayarak sonuçları filtreleyin. ”
PowerShell Hash tablosunu kullanma temel tanıtımı
Karma tablosunu ve Özel ifadeleri kullanmanın amacı nedir?
- Hash tablosu olarak tanımlanan PowerShell seçeneği, özel ihtiyaçlarımıza göre özelleştirilmiş “YENİ bir özellik” oluşturmamızı sağlayan çok güçlü bir seçenektir.
Özel özellik, hesaplanan alan, arama sorgusu vb. gibi çeşitli şekillerde uygulanabilir.
Örneğin, Get-Mailbox PowerShell komutu, EmailAddresses özelliğinde saklanan bilgileri görüntülemek için kullanılabilir.
EmailAddresses özelliği, belirli Exchange alıcısının sahip olduğu tüm kullanılabilir adreslerin bir listesini içerir.
Varsayılan olarak PowerShell komutu Get-Mailbox, "arama sonuçlarını filtrelememize" olanak tanıyan yerleşik bir parametre içermez ve yalnızca belirli bir E-posta adresi türüyle ilgili bilgi almayı ister Proxy E-posta adresleri gibi.
İyi haber şu ki - PowerShell “Karma tablosu” seçeneğini kullanarak ihtiyacımız olan belirli bilgileri içerecek bir “YENİ alıcı özelliği” oluşturabiliriz.
Bizim durumumuzda, bir alıcının tüm Proxy E-posta adresleri. Bu “YENİ alıcı özelliğinin” oluşturulması “Hash tablosu” tarafından uygulanır.
“Karma tablosunun” yapısı (özel bilgi alanları)
"Karma tablo " (özel özellik) kavramı, iki bölümden oluşan bir sözdizimi kullanılarak uygulanır:
Bölüm 1#2 - Etiket kısmı
Bu, özel özelliğin "Adını " tanımladığımız Karma tablosunun ilk kısmıdır.
“ İsim ” sadece tanımladığımız rastgele bir isimdir.
Bölüm 2#2 - İfade bölümü.
İfade'yi tanımladığımız Hash tablosunun ikinci kısmıdır. İfade terimi, Filtrelenmiş arama sorgusu, hesaplanan değer vb. gibi çeşitli "PowerShell cümleleri" türlerine çevrilebilir.
“Karma tablosu ” | Konveksiyonu adlandırma
Hash tablosu yazmak için kullanabileceğimiz kanaati adlandırmanın iki seçeneği vardır.
Seçenek 1#2
Etiket kısmını tanımlamak için kullandığımız adlandırma kuralı
L (Etiket) harfi kullanılarak uygulanır.
İfade kısmını tanımlamak için kullandığımız adlandırma kuralı E (ifade) harfi kullanılarak uygulanır.
Seçenek 2#2
Etiket parçasını tanımlamak için kullandığımız adlandırma kuralı, Ad terimi kullanılarak uygulanır.
İfade kısmını tanımlamak için kullandığımız adlandırma kuralı, İfade terimi kullanılarak uygulanır.
“Karma tablo” örneğini kullanarak Proxy E-posta adresini “Çıkart”.
Karma tablosunu (özel özellik) nasıl kullandığımızı göstermek için şu örneği kullanalım: alıcının Proxy E-posta adresi hakkındaki bilgileri görüntülemek istiyoruz.
Aşağıdaki diyagramda kullanacağımız PowerShell komutunun yapısını görebiliriz:
Bölüm A: Bu, PowerShell'den Exchange Online alıcı posta kutusuyla ilgili mevcut tüm bilgileri almasını istediğimiz standart bir PowerShell Get-Mailbox komutudur.
Bölüm B: Bu bölümde, alıcıların yalnızca iki özelliğini görüntülemek için PowerShell parametresi "select"i kullanıyoruz: standart DispalyName özelliği + şu şekilde tanımladığımız YENİ özel özelliği: Hash tablosu kullanarak.
Karma tablosunun söz dizimi
Bizim durumumuzda
Proxy E-posta adresleri hakkında bilgi çıkarmak için kullandığımız PowerShell Karma tablosunun sözdizimi şöyledir:
PowerShell komut sözdizimi
@{Name="Email Addresses";Expression={$_.EmailAddresses | Where-Object {$_ -cmatch "smtp:*"}}}Aşağıdaki diyagramda Karma tablosunun farklı bölümlerini görebiliriz:
Numara 1 - Filtrelenmiş arama sorgusu, hesaplanan değer vb. gibi Dizi adı + PowerShell ifadesini içeren özel bir dizi (Karma tablosu) oluşturduğumuzu "bildirmek" için @ karakterini kullanırız.
Karma tablosu - ad
Sayı 2 - Dizi için tanımladığımız “ad”dır. Örneğimizde Dizi adını tanımladık: “Proxy E-posta adresi.”
Ve yine, bu yalnızca özel ihtiyaçlarım için seçtiğim rastgele bir addır.
Karma tablosu - İfade
Numara 3 - örneğimizde PowerShell'den aşağıdaki şekilde uygulanacak bir "filtrelenmiş arama sorgusu" oluşturmasını istiyoruz:
PowerShell'e EmailAddresses adlı bir alıcı özelliğini sorgulaması talimatını veriyoruz. Kısa bir hatırlatma - bu, mevcut tüm E-posta adresleri ve diğer adresler hakkında bilgi depolayan posta kutusu özelliğidir.
Numara 4 - yalnızca Proxy E-posta adresleri hakkında bilgi getirecek bir filtre tanımlarız.
Filtre aşağıdaki yapıya dayanmaktadır:
Mantıksal
cmatch operatörünü kullanan bir koşulu tanımlamak için Where-Object PowerShell ifadesini kullanırız.
Kısa bir hatırlatma-
- Exchange, smtp: önekini kullanarak SMTP E-posta adresiyle ilgili bilgileri saklar.
- Proxy E-posta adresleri, küçük harflerle yazılan smtp: önekiyle temsil edilir.
- Büyük harflerle yazılmış SMTP: önekiyle temsil edilen Birincil E-posta adresi.
Tanımladığımız koşul aslında iki ayrı koşula dayanmaktadır.
PowerShell'den yalnızca smtp: önekiyle başlayan E-posta adresiyle ilgili bilgileri "getirmesini" ve ayrıca smtp önekinin küçük harflerle yazılmasını istiyoruz.
Bu gereksinimi karşılamak için PowerShell mantıksal operatörü cmatch'i kullanıyoruz. PowerShell mantıksal operatörü - cmatch, "mükemmel eşleşme" aramak + büyük/küçük harfe duyarlı bir eşleşme gerçekleştirmek için oluşturuldu.
Alıcı E-posta adresleri hakkında görüntülenen sonuçları Hash tablosunu kullanarak optimize edin
Bu bölümde Karma tablosu ve Özel ifadelerin iki ana amaç için nasıl kullanılacağını inceliyoruz:
- Proxy E-posta adresi, SIP adresi, x500 E-posta vb. gibi belirli E-posta adresi türleri hakkındaki bilgileri görüntülememizi sağlayacak özel/yeni bir alıcı özelliği oluşturma yeteneğimizi geliştirin.
Alıcı E-posta adresinin PowerShell çıktısını optimize etme
- Çıktıdan "gereksiz verileri" kaldırma
- Birden fazla E-posta adresi içeren, çok değerli bir özellik olarak tanımlanan mailbox özelliği ile daha iyi çalışmamızı sağlayacak “ayırma karakteri”nin eklenmesi.
Önceki bölümde, Proxy E-posta adresleri gibi belirli bir karaktere sahip E-posta adresleri hakkındaki bilgileri görüntüleyerek arama sonucunu "filtreleyen" bir PowerShell Karma tablosu oluşturmanın yolunu inceliyoruz.
Bu amaçla aşağıdaki gibi bir PowerShell komutu kullanıyoruz:
Get-Mailbox Christina | Select-Object DisplayName,@{Name="Proxy Email Addresses";Expression={$_.EmailAddresses | Where-Object {$_ -cmatch "smtp:*"}}}Aşağıdaki diyagramda PowerShell komutundan aldığımız “çıktıyı” görebiliriz.
Sonuç "tamam" görünüyor çünkü gerekli bilgiyi aldık: Christina'nın Proxy E-posta
adresleri.
Sorun 1 - Kıvrımlı parantezler
Exchange Online alıcısının birden fazla Proxy E-posta adresi varsa, PowerShell bilgileri küme parantezi kullanarak görüntüler. “E-posta adresi bilgileri” ile “çalışmamız” gereken birçok senaryoda süslü parantez karakterlerini kaldırmamız gerekecektir.
Sayı 2 - Ayırma karakterleri
PowerShell birden fazla E-posta adresini “gördüğünde”, PowerShell değerleri (bizim durumumuzda E-posta adresleri) ayırmak için virgül (,) karakterini kullanacaktır.
Buradaki "şey", bilgileri CSV dosyası gibi bir dosyaya aktardığımızda PowerShell'in virgül (,) karakterini kullanmayacağı, bunun yerine değerleri ayırmak için bir "boşluk" kullanacağıdır.
Bir CSV'de depolanan verileri "manipüle etmemiz" gerektiğinde, her değeri ayrı ayrı ele almamızı sağlayacak bir "ayırma karakteri" kullanmamız gerekir.
Sorun 3 - Smtp öneki
PowerShell, her E-posta adresini, E-posta adresinin türünü tanımlayan bir önek kullanarak görüntüler. Örneğimizde, her proxy E-posta adresi küçük harflerle smtp: öneki kullanılarak görüntülenecektir.
“E-posta adresi” ile ilgili bilgilerle “bir şeyler yapmamız” gerekirse, E-posta adresinden “temiz” olan smtp: önekini kullanmamız gerekir.
Değiştir + Birleştir parametrelerini kullanarak Hash tablosunun çıktısını optimize edin.
Bahsedilen “sorunları” çözebilmek için iki PowerShell parametresi kullanacağız
- Yer değiştirmek
- Katılmak
Bir sonraki bölümde, Hash tablosunun çıktısını iyileştirmemize yardımcı olacak ek parametreyi PowerShell Hash tablosuna ekleyeceğiz.
Aşağıdaki diyagramda Karma tablosunun “orijinal sözdizimine” eklenen ek parametreleri görebiliriz.
SMTP önekini kaldırın | Değiştir parametresini kullanma
Proxy E-posta adresleri hakkında görüntülenen bilgilerden “smtp önekini” kaldırma misyonuyla başlayacağız.
Örneğimizde aşağıdaki sözdizimini kullanıyoruz -replace 'smtp:'.
PowerShell replace komutunun amacı, adından da anlaşılacağı gibi mevcut bir dizeyi "YENİ dize" ile değiştirmektir.
Örneğimizde, bir dizeyi ("smtp öneki") kaldırmak istiyoruz, "smtp önekini" "değiştirmek" istemiyoruz.
Kullandığımız püf noktası, PowerShell'e "smtp önekini" "hiçbir şey" ile değiştirmesini "söylememizdir". Yani PowerShell “replace” parametresinden “smtp önekinin” değiştirilmesini ve bu metin dizesinin “boş alan” ile değiştirilmesini istiyoruz.
E-posta adresinin PowerShell çıktısından “smtp önekinin” kaldırılması gerekliliğini yerine getirebilmek için aşağıdaki PowerShell komut sözdizimini kullanıyoruz:
Get-Mailbox Christina | Select-Object DisplayName,@{Name="EmailAddresses";Expression={ ($_.EmailAddresses | Where-Object {$_ -cmatch "smtp:*"} | ForEach-Object {$_ -replace 'smtp:' }) }}Aşağıdaki kutuda PowerShell çıktısının sonucunu görebiliriz.
Artık her E-posta adresinin smtp öneki olmadan göründüğüne dikkat edin
PowerShell konsolu çıktı örneği:
PS C:\script> Get-Mailbox Christina | Select-Object DisplayName,@{Name="EmailAddresses";Expression={ ($_.EmailAddresses | Where-Object {$_ -cmatch "smtp:*"} | ForEach-Object {$_ -replace 'smtp:' }) }}
DisplayName EmailAddresses
----------- --------------
Christina Aguilera {Christina-Alias02@o365info.com, Christina@o365pilot.com}Birleştirme parametresini kullanma
Yolculuğumuz ek bir görevimiz olduğu için bitmedi: E-posta adresi "dizisini" çevreleyen "küme parantezini" kaldırmak.
Ayrıca verileri CSV dosyası gibi bir dosyaya aktardığımızda her “E-posta adresi değeri”ni ayıracak bir “ayırıcı karakter” eklemek istiyoruz.
Ayırma karakterini çıktıya eklemek için PowerShell parametresi - join'i kullanacağız ve “ayırma karakterini” sağlayacağız. Örneğimizde - (;) karakterini kullanıyoruz.
Gereksinimleri yerine getirebilmek için:
- E-posta adresinin PowerShell çıkışından smtp önekinin kaldırılması.
- E-posta adresi dizisini çevreleyen "küstah parantez" kaldırılıyor.
- Ayırıcı karakter ekleyin - örneğimizde (;) karakterlerini kullanıyoruz
Aşağıdaki PowerShell komut sözdizimini kullanıyoruz:
Get-Mailbox Christina | Select-Object DisplayName,@{Name="EmailAddresses";Expression={ ($_.EmailAddresses | Where-Object {$_ -cmatch "smtp:*"} | ForEach-Object {$_ -replace 'smtp:' }) -join ';' }}Aşağıdaki kutuda PowerShell çıktısının sonucunu görebiliriz.
Şimdi dikkat edin
- Her E-posta adresi smtp öneki olmadan görünür.
- E-posta adresi dizisini çevreleyen "küma parantez" kaldırıldı.
- Her E-posta adresi - (;) karakterleriyle ayrılır.
PowerShell konsolu çıktı örneği:
PS C:\script> Get-Mailbox Christina | Select-Object DisplayName,@{Name="EmailAddresses";Expression={ ($_.EmailAddresses | Where-Object {$_ -cmatch "smtp:*"} | ForEach-Object {$_ -replace 'smtp:' }) -join ';' }}
DisplayName EmailAddresses
----------- --------------
Christina Aguilera Christina-Alias02@o365info.com;Christina@o365pilot.comAlıcı e-posta adresiyle ilgili bilgileri görüntülemek için Hash tablosunu kullanma
Aşağıdaki bölümde, belirli Exchange alıcı E-posta adresleri hakkında bilgi almak için PowerShell Hash tablosunu kullandığımız bir senaryonun birkaç örneğini incelemek istiyorum.
Yalnızca Birincil E-posta adresini görüntüle
PowerShell komutu - Get-Mailbox, - Birincil E-posta adresi olarak tanımlanan belirli bir E-posta adresi hakkındaki bilgileri görüntülememizi sağlayan özel bir parametre içerir.
Başka bir deyişle, Birincil E-posta adresini görüntülemek için Hash tablosunu kullanmak gibi herhangi bir karmaşık PowerShell komut söz dizimini uygulamamıza gerek yok.
Yalnızca Birincil E-posta adresini görüntüleyebilmek için aşağıdaki PowerShell sözdizimini kullanabiliriz:
Get-Mailbox Billy | Select Alias,PrimarySmtpAddressÖzel bir komut konfigürasyonu kullanmamıza gerek olmasa da Birincil E-posta adresi olarak tanımlanan E-postaları görüntülemek için kullandığımız Hash tablosu sözdizimine bir örnek vermek istiyorum.
Bu örnekte, “cmatch” mantıksal operatörünü kullanarak, yalnızca E-posta adresinin önekinin büyük harflerle kullanılan “SMTP:” dizesini içermesi durumunda E-posta adresi hakkındaki bilgileri “getir”ecek bir koşul tanımlıyoruz.
Get-Mailbox | Select-Object DisplayName,@{Name="Primary Email Address";Expression={$_.EmailAddresses |Where-Object {$_ -cmatch "SMTP:*"}}}Yalnızca SIP adresini görüntüle
Mevcut senaryoda, yalnızca "SIP adresi" (Skype kurumsal kullanıcıları tarafından kullanılan adresler) olarak tanımlanan alıcı adresi hakkındaki bilgileri görüntülemek istiyoruz.
SIP adresi “sip:” ön ekiyle başlar
Yalnızca SIP adresleriyle ilgili bilgileri "getirebilmek" için aşağıdaki Hash tablosu İfadesini tanımlarız:
PowerShell komut örneği
Get-Mailbox | Select-Object DisplayName,@{Name="SIP Email Address";Expression={$_.EmailAddresses |Where-Object {$_ -LIKE "sip:*"}}}Yalnızca x500 E- adresini görüntüle
Mevcut senaryoda yalnızca “x500 E-posta adresi” olarak tanımlanan E-posta adresine ilişkin bilgileri görüntülemek istiyoruz.
X500 E-posta adresi “x500:” ön ekiyle başlar
Yalnızca x500 adreslerine ilişkin bilgileri “getirebilmek” için aşağıdaki Hash tablosu İfadesini tanımlıyoruz.
PowerShell komut örneği:
Get-Mailbox | Select-Object DisplayName,@{Name="x500 Email Address";Expression={$_.EmailAddresses |Where-Object {$_ -cmatch "x500:*"}}}Daha "gelişmiş" PowerShell Hash tablosu oluşturma
Bu bölümde PowerShell Hash tablosu için kullanılan daha "gelişmiş" sözdizimini göstermek istiyorum
Senaryomuzda, PowerShell'den her bir E-posta adresi türüyle ilgili - Birincil E-posta adresi, Takma Ad E-posta adresi, SIP adresi vb. bilgileri görüntülemesini istiyoruz.
Ayrıca, her Exchange alıcısının sahip olduğu Proxy E-posta adreslerinin sayısını saydığımız, hesaplama gerçekleştiren "özel sonuç alanları" (YENİ özellik) için yeni bir örnek ekliyorum.
Komutun PowerShell sözdizimi aşağıdaki gibidir:
@{Name="Number of Proxy Email";Expression={($_.EmailAddresses |Where-Object {$_ -cmatch "smtp:*"}).count}}Kullanılan “tam” PowerShell komutunun sözdizimi şöyledir:
Get-Mailbox | Select-Object DisplayName,@{Name="Primary Email Addresses";Expression={$_.EmailAddresses |Where-Object {$_ -cmatch "SMTP:*"}}} ,@{Name="Proxy Email Addresseses";Expression={$_.EmailAddresses |Where-Object {$_ -cmatch "smtp:*"}}} , @{Name=2Number of Proxy Email";Expression={($_.EmailAddresses |Where-Object {$_ -cmatch "smtp:*"}).count}} ,@{Name="SIP Email Addresseses";Expression={$_.EmailAddresses |Where-Object {$_ -LIKE "sip:*"}}} ,@{Name="X500 EmailAddresseses";Expression={$_.EmailAddresses |Where-Object {$_ -LIKE "x500:*"}}}PowerShell konsolu çıktı örneği:
PS C:\script> Get-Mailbox | Select-Object DisplayName,@{Name="Primary Email Addresses";Expression={$_.EmailAddresses |Where-Object {$_ -cmatch "SMTP:*"}}} ,@{Name="Proxy Email Addresseses";Expression={$_.EmailAddresses |Where-Object {$_ -cmatch "smtp:*"}}} , @{Name=2Number of Proxy Email";Expression={($_.EmailAddresses |Where-Object {$_ -cmatch "smtp:*"}).count}} ,@{Name="SIP Email Addresseses";Expression={$_.EmailAddresses |Where-Object {$_ -LIKE "sip:*"}}} ,@{Name="X500 EmailAddresseses";Expression={$_.EmailAddresses |Where-Object {$_ -LIKE "x500:*"}}}
DisplayName : admin
Primary Email Addresses : SMTP:admin@o365info.com
Proxy Email Addresseses : smtp:admin1948@o365info2.onmicrosoft.com
Number of Proxy Email : 1
SIP Email Addresseses : SIP:admin@o365info.com
X500 EmailAddresseses :
DisplayName : Alice Good
Primary Email Addresses : SMTP:Ayelet@o365info.com
Proxy Email Addresseses : smtp:Ayelet@o365info2.onmicrosoft.com
Number of Proxy Email : 1
SIP Email Addresseses : SIP:Ayelet@o365info.com
X500 EmailAddresseses :
DisplayName : Angelina Jolie
Primary Email Addresses : SMTP:Angelina-NEW01@o365info.com
Proxy Email Addresseses : {smtp:Angelina@o365pilot.com, smtp:kk@o365info.com, smtp:Angelina@o365info.com, smtp:Angelina-Alias03@o365info.com...}
Number of Proxy Email : 5
SIP Email Addresseses :
X500 EmailAddresseses :Çok değerli bir öznitelik olan "EmailAddresses"teki değerleri ayırın
Bu bölümde, çok değerli bir öznitelikte görünen değerleri “ayırdığımız” ek “PowerShell yöntemini” incelemek istiyorum.
Belirtildiği gibi, Exchange Online posta kutusu "EmailAddresses" özniteliklerini çok değerli bir öznitelik olarak kabul eder, çünkü birkaç (birden fazla) E-posta adresi anlamına gelen birkaç değeri saklar.
Misyonumuz, her bir Exchange alıcısının E-posta adresini görüntüleyecek özel bir çıktı oluşturmak için özel bir sütun oluşturmaktır.
Aşağıdaki örnekte
Angelina E-posta adresleri hakkında bilgi alan bir PowerShell komutu kullanıyoruz.
Get-Mailbox Angelina | Select-Object DisplayName -ExpandProperty EmailAddressesÇıktıda “EmailAddresses” özelliğinin birçok E-posta adresini içerdiğini görebiliriz.
PS C:\script> Get-Mailbox Angelina | Select-Object DisplayName -ExpandProperty EmailAddresses
smtp:Angelina@o365pilot.com
smtp:kk@o365info.com
SPO:SPO_5b27dc17-68b0-442e-804b-aee5b4df9847@SPO_e95bcc9e-2927-483d-ad36-7311a7152bdd
smtp:Angelina@o365info.com
SMTP:Angelina-NEW01@o365info.com
smtp:Angelina-Alias03@o365info.com
smtp:Angelina-Alias02@o365info.com“EmailAddresses” özelliğini bir “Array” olarak ve her bir E-posta adresini
“Array üyesi” olarak ilişkilendirebiliriz.
Dizinin (dizi üyesi) içerdiği her değer (üye), “0” vb. ile başlayan dizin numarasıyla temsil edilir.
Belirli bir Dizi üyesine (çok değerli "EmailAddresses" özelliğinde saklanan belirli bir E-posta adresi) hitap edebilmek için, üyeyi temsil eden belirli dizin numarasını tanımlayabiliriz.
Belirli dizin numarası aşağıdaki adlandırma kuralı kullanılarak yazılır:
- [0] Dizideki “ilk üyeye” hitap etmek için.
- [1] Dizideki “ikinci üyeye” hitap etmek için.
Ve benzeri.
Senaryomuzda Array üyelerini “getirecek” ve her üyeyi ayrı ayrı görüntüleyecek bir ekran oluşturmak istiyoruz.
Bizim durumumuzda, çok değerli "EmailAddresses" özelliğinde saklanan her "E-posta adresini" alın ve E-posta adresiyle ilgili bilgileri özel bir sütunda görüntüleyin.
Bu gereksinimi uygulamak için, her E-posta adresi için “özel bir sütun” içeren özel bir bilgi alanı (Karma Tablosu) tanımlarız.
Özel bilgi alanının (Karma Tablo) sözdizimi, aşağıdaki PowerShell sözdizimi kullanılarak yazılmıştır:
@{Name= "E-mail address 01"; E={$_.EmailAddresses[0]}}- İlk bölümde (etiket kısmı) sütun başlığı adını tanımlıyoruz. Örneğimizde adı tanımladık - E-posta adresi 01.
- İkinci bölümde (İfade kısmı), PowerShell'den bizim için çok değerli “EmailAddresses” özelliğindeki ilk değeri getirmesini istiyoruz. İlk değer indeks numarası [0] ile temsil edilir.
Diziye dahil edilen her ek değer için bu sözdizimini birkaç kez ekliyoruz.
Dizideki ikinci E-posta adresini "getirmek" için aşağıdaki sözdizimini kullanırız:
@{Name= "E-mail address 02"; E={$_.EmailAddresses[1]}}“EmailAddresses” özelliğindeki “değerlerin” sayısının ne olduğunu bilmediğimize dikkat edin.
Yapabileceğimiz tek şey sadece "spekülasyon yapmak" ve her değer (E-posta adresi) için özel bir özel bilgi alanı (Karma Tablosu) tanımlamaktır.
Aşağıdaki örnekte, ortalama alıcı sayısının maksimum “beş E-posta adresinden” fazla olmayacağını varsayarak beş özel bilgi alanı (Karma Tablolar) oluşturdum. ”
Get-Mailbox | Select-Object DisplayName, @{Name= "E-mail address 01"; E={$_.EmailAddresses[0]}} , @{Name= "E-mail address 02"; E={$_.EmailAddresses[1]}} , @{Name= "E-mail address 03"; E={$_.EmailAddresses[2]}} , @{Name= "E-mail address 04"; E={$_.EmailAddresses[3]}} , @{Name= "E-mail address 05"; E={$_.EmailAddresses[4]}}PowerShell konsolu çıktı örneği
PS C:\script> Get-Mailbox | Select-Object DisplayName, @{Name= "E-mail address 01"; E={$_.EmailAddresses[0]}} , @{Name= "E-mail address 02"; E={$_.EmailAddresses[1]}} , @{Name= "E-mail address 03"; E={$_.EmailAddresses[2]}} , @{Name= "E-mail address 04"; E={$_.EmailAddresses[3]}} , @{Name= "E-mail address 05"; E={$_.EmailAddresses[4]}}
DisplayName : admin
E-mail address 01 : SIP:admin@o365info.com
E-mail address 02 : SMTP:admin@o365info.com
E-mail address 03 : smtp:admin1948@o365info2.onmicrosoft.com
E-mail address 04 :
E-mail address 05 :
DisplayName : Alice Good
E-mail address 01 : SIP:Ayelet@o365info.com
E-mail address 02 : SMTP:Ayelet@o365info.com
E-mail address 03 : smtp:Ayelet@o365info2.onmicrosoft.com
E-mail address 04 :
E-mail address 05 :
DisplayName : Angelina Jolie
E-mail address 01 : smtp:Angelina@o365pilot.com
E-mail address 02 : smtp:kk@o365info.com
E-mail address 03 : SPO:SPO_5b27dc17-68b0-442e-804b-aee5b4df9847@SPO_e95bcc9e-2927-483d-ad36-7311a7152bdd
E-mail address 04 : smtp:Angelina@o365info.com
E-mail address 05 : SMTP:Angelina-NEW01@o365info.comBirincil E-posta adreslerinde belirli bir alan adı son eki bulunan alıcılar hakkında bilgi alın
Sonraki bölümde, PowerShell Karma Tablosunun ve "Özel ifadelerin" PowerShell Where ifadesinin birleşimiyle kullanıldığı senaryolara ilişkin daha fazla örneği incelemek istiyorum.
Bu senaryoda, bir PowerShell arama sorgusu uygulamamız gerekiyor. , aşağıdaki koşulu karşılayan Exchange alıcısı E-posta adresi hakkındaki bilgileri görüntüleyen:
Yalnızca Birincil E-posta adreslerinde belirli bir alan adı son eki bulunan alıcılar hakkında bilgi almak istiyoruz.
Örneğimizde, aradığımız alan adı son eki - o365pilot.com.
Bu Exchange alıcısıyla ilgili bilgiler, alıcının Görünen adını, Birincil E-posta adresini ve onun Proxy E-posta adreslerini içerecektir.
PowerShell söz dizimi biz kullanıyoruz
Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, PrimarySMTPAddress, @{Name="Proxy Email Addresses";Expression={$_.EmailAddresses -cmatch "smtp"}} | Where-Object {($_.PrimarySMTPAddress -like "*o365pilot.com*") };PowerShell konsolu çıktı örneği
PS C:\temp> Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, PrimarySMTPAddress, @{Name="Proxy Email Addresses";Expression={$_.EmailAddresses -cmatch "smtp"}} | Where-Object {($_.PrimarySMTPAddress -like "*o365pilot.com*") }
Creating a new session for implicit remoting of "Get-Mailbox" command...
DisplayName PrimarySmtpAddress Proxy Email Addresses
----------- ------------------ ---------------------
Beatles the Beatles@o365pilot.com smtp:Beatles@o365info2.onmicrosoft.com
Britney spears Britney@o365pilot.com {smtp:Britney@o365info.com, smtp:Britney@o365info2.onmicrosoft.com}
Craig David Craig@o365pilot.com smtp:Craig@o365info2.onmicrosoft.com
Depeche Mode Depeche@o365pilot.com
Elvis Preslay Elvis@o365pilot.com
E-mail attachments Mailbox E-mail-attachments@o365pilot.com smtp:E-mail-attachments@o365info.com
Justin timberlake Justin@o365pilot.com smtp:Justin@o365info2.onmicrosoft.com
Spoof E-mails MailBox Spoof-E-mail-Mailbox@o365pilot.com smtp:Spoof-E-mail-Mailbox@o365info2.onmicrosoft.comBu durumun ek bir varyasyonu, Birincil E-posta adreslerinin belirli bir alan adı son ekini VEYA “diğer” alan adı son ekini içerdiği Exchange Online alıcıları hakkında bilgi almak istediğimiz bir senaryodur.
Örneğimizde, Birincil E-posta adresi alan adı son ekini içeren alıcı için aradığımız alan adı son eki - o365pilot.com veya o365info.com
PowerShell komutu örneği_
Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName,PrimarySMTPAddress, @{Name="EmailAddresses";Expression={$_.EmailAddresses -cmatch "smtp"}} | Where-Object {($_.PrimarySMTPAddress -like "*o365pilot.com*") -or ($_.PrimarySMTPAddress -like "*o365info.com*")};Belirli bir Etki Alanı adı son ekini içeren Proxy E-posta adresi (Takma Ad) hakkındaki bilgileri görüntüleyin
Bu senaryoda aşağıdaki koşulları karşılayan E-posta adresi hakkında bilgi almak istiyoruz:
- Koşul 1#2 - Yalnızca Takma Ad (Proxy) E-posta adresi
- Koşul 2#2 - Yalnızca belirli bir alan adı son ekini kullanan Takma Ad (Proxy) E-posta adresi
Kullandığımız PowerShell sözdizimi:
$Array1 = DisplayName,@{Name="Primary Email Addresses";Expression={$_.EmailAddresses | Where-Object {$_ -cmatch "SMTP:*"}}}, @{Name="Proxy E-mail addresses";Expression={$_.EmailAddresses | Where-Object {$_ -cmatch "smtp:*"}}}, @{Name="Proxy Email addresses number";Expression={($_.EmailAddresses |Where-Object {$_ -cmatch "smtp:*"}).count}}
Get-Mailbox -ResultSize Unlimited | Where-Object {$_.emailaddresses -cmatch "smtp:*" -and $_.emailaddresses -like "smtp:*@o365pilot"} |select $Array1Güncel makale serisinin bir sonraki makalesi
Çeşitli Exchange Online alıcı türlerine giriş | PowerShell cmdlet'leri | Ofis 365 | Bölüm 8#13







