Her Exchange Adminin Bilmesi Gereken 5 PowerShell Tekniği

Bumerang - Yazarkafe

Exchange Server’i etkili bir şekilde yönetmek için PowerShell’i güçlü bir şekilde yönetmek önemlidir. Burada her exchange adminin bilmesi gereken 5 powershell teknikleri, ipuçları bunun kaçınılmaz olduğunu kanıtlayacaktır.

Powershell Microsoft Server ürünlerinin yönetimi için tercih edilen bir araç oldu. Exchange yönetiminde usta olmak isteyen her admin için PowerShell öğrenmek çok önemlidir. Çok sayıda yönetimsel işlemler Exchange Server management grafik arayüzüyle yapılamamakta ya da çok basit bir şekilde uygulanamamaktadır. Burada her exchange admininin bilmesi gereken 5 powershell yönetim tekniğini bulacaksınız.

  • Uzak Oturum Sağlamak

Windows Server 2012, bir server’a powershell ile uzaktan bağlanmayı mümkün kılar. Bunun anlamı önce, powershell komutlarını yönetmek istediğiniz sunucuya bağlanıp sonra powershell açıp yazmanıza gerek kalmadan bilgisayarınızdan uzak bir powershell oturumu başlatarak yönetebilirsiniz, bunun için Enter-PSSession komutunu kullanabilirsiniz.

Örneğin EXC1 isimli bir sunucuya uzak bir powershell bağlantısı yapmak istiyorsunuz. Bunun için aşağıdaki komutu powershell’e yazın

Enter-PSSession Exch3

Bir kez sunucuya uzak bağlantı sağladığınızda bundan sonra yazağınız her komut bağlantı yaptığınız uzak sunucu üzerinde çalışacaktır. Çalışmanızı tamamlayığ bağlantığınızı kapatmak istediğinizde aşağıdaki komutu giriniz.

Exit-PSSession

  • Aynı anda birden çok Exchange Server üzerinde aksiyon alma

Yapınızda birden fazla exchange serverınız olabilir ve bir Powershell komutunu birden fazla exchange server üzerinde aynı anda çalıştırmak isteyebilirsiniz. Neyseki bunu yapabilmeniz için basit bir komutumuz var Invoke-Command. Bu komut, aynı anda hangi sunucularınız üzerinde çalışmasını istiyorsanız ilgili sunucuların isimlerini bildirmenizi gerektirir.

Örneğin, diyelim ki Get-Mailbox komutunu Exc1, Exc2 ve Exc3 isimli sunucularınızda çalıştırmak istiyorsunuz. Bunun için aşağıdaki şekilde komutu yazmanız gerekir.

Invoke-Command –ComputerName Exch1,Exch2,Exch3 {Get-Mailbox}

Gördüğünüz gibi ilk olarak çalıştırmak istediğiniz hedef sunucu isimlerini girmelisiniz. Daha sonra Çift parantez içerisinde bu sunucularda çalıştırmak istediğiniz komutu. Bu da bize başka bir önemli ip ucunu getiriyor 🙂

  • Bir komut içerisinde bir başka komut çalıştırmak

Bazen Powershell ile bir işi başarı ile yönetmek için komut içerisinde başka bir komut çalıştırmak tek yoldur. Bu teknikte, ikinci komut parentez içerisine alınmalıdır ({}). Örnek olarak, diyelim ki yeni bir exchange server için storage pool hazırlamak istiyorsunuz ve yeni bir windows storage pool’a ihtiyacınız var. Bunun için New-StoragePool komutuna ihtiyacınız var.

New-StoragePool komutuna 3 parça bilgi girmeniz gerekiyor; bu friendly name, storage subsystem’in adı ve eklemek istediğiniz fizikler diskler. Ancak storage pool’a dahil etmek için storage subsytem’in adını ya da fiziksel disklerini adını bilmiyorsunuz. Aşağıdaki komut ile yeni bir storage pool oluşturabilirsiniz;

New-StoragePool –FriendlyName “My Storage Pool” -StorageSubSystemFriendlyName {Get-StorageSubsystem –FriendlyName *space*} –PhysicalDisks {Get-PhysicalDisk –CanPool $True}

Yukarıdaki komutta, 2 instance var ayraç içine alınan. Bunlar subcommand’lardır. Gördüğünüz gibi PhysicalDisks parametresinin olduğu son bölümde ayraç içerisinde Get-PhysicalDisk komutu ile kullanmak istediğimiz fiziksel disklerin listesini getirebiliriz.

  • Exchange PowerShell komutu çıktısını filtrelemek

Exchange Server adminleri farklı bilgi tiplerini görüntülemek için Get komutlarını sıklıkla kullanır. Get Komutları sıklıkla gerçekten ihtiyaç duyulan kayda değer ölçüde bilgi getirir. Gelecek sonuçların listesini daraltmak için böyle bir seçeneğin olması gerçekten güzel, sonuçları listelemek için genellikle başka powershell komutlarını kullanabilmek için piping (|) yer alır. Powershell sizin baştan sona filtering yapmanıza olanak verir.

Diyelim ki bir kullanıcının ait olduğu RBAC role gruplarının listesini bulup çıkarmak istiyorsunuz. Eğer Get-RoleGroup komutunu yalnız başına kullanırsanız Exchange organizasyonunuzdaki tüm role gruplarını listelersiniz.

Listeyi daraltmak için Get-RoleGroup komutundan sonra role grup adıyla birlikte yazarsanız sadece ilgili role grup listelendiğini görürsünüz. Örneğin, diyelim ki Organization Management adındaki grubu listeleyeceksiniz ve bir liste formatında çıktıyı almak isterseniz o halde komutu aşağıdaki gibi yazmalısınız;

Get-RoleGroup ‘Organization Management’ | FL

Bu komutta ilgili grup üyeliklerini ve hakkında bilgi veren liste halinde çıktı alabilirsiniz. Bu durumda sadece bir kullanıcının üye olduğu role gruplarının listelenmesini isterseniz aşağıdaki komutu kullanabilirsiniz;

Get-RoleGroup | Where-Object {$_.Members –EQ ‘Contoso/Users/User1’}

Yukarıdaki komutta Members parametresi değişken gibi davranır. Bu yüzden önüne dolar işareti ($), altçizgi  (_) ve nokta işareti (.) yer alır. –EQ Equals operator kısaltmasıdır ve bu örnek için ardından istenilen kullanıcı adı yazılır.

Eğer bu filtreleme metodu karışık gibi görünüyorsa bu konuda iyi haberler var. Windows Server 2012 de, Microsoft PowerShell syntax kolaylaştırıp parametrenin değişken gibi davranması için gerekli attribute’leri kaldırıyor. Bu nedenle yukarıdaki komutu Windows Server 2012 de daha kolay ve hızlı aşağıdaki şekilde ifade edebilirsiniz;

Get-RoleGroup | Where Members –EQ ‘Contoso/Users/User1’

  • What-if Parametresi

Hiç şüphesiz hatalı olarak yazılan komutlarla Exchange Server da yalnış sonuçlar doğuracak girişler yapılabilir. Bu durumlarla karşılaşmamak için yazdığınız komutu test etmek isteyebilirsiniz. PowerShell yazdığınız komutu çalıştırmadan önce sadece sonucunun nasıl olacağını sizlere test etme imkanı sağlar. Yazdığınız komutun sonucunun ne olacağını çalıştırmadan görmeniz içib What-if parametresini kullanabilirsiniz.

Örneğin, diyelim ki Update-GlobalAddressList komutunun sonucu hakkında merak ediyorsunuz, ancak ortamınıza sonuçları nasıl etki edecek emin değilsiniz. Yazacağınız komutun sonuna -WhatIf parametresini ekleyerek sonuçlarının ne olacağını aslında komutu çalıştırmadan görebilirsiniz.

Not: -WhatIf parametresinin her powershell komutyla çalışmadığını bilmeniz önemli. -WhatIf parametresinin hangi powershell komutlarıyla çalıştığının listesini görmek için aşağıdaki komutu kullanabilirsiniz.

Get-Command | Where Definition –Like *whatif*

Exchange adminlerinin bilmesi gereken 5 powershell tekniğinden bahsetmeye çalıştım. Umarım size yeni bir şeyler öğretme konusunda yardımcı olabilmişimdir. Diğer yandan katıldığınız veya katılmadığınız görüşler ile sorularınızı da yorum kısmından belirtirseniz elimden geldiğince yanıtlamaya çalışırım.