Active Directory'de oluşturulan kullanıcı için posta kutusunun otomatik olarak açılmasını sağlamak (Exchange)

    Bu çalışmamızda Active Directory'de oluşturulan bir kullanıcının posta kutusunu powershell scripti ile otomatik olarak açacağız. Hazırladığımız bu scripti Task Scheduler üzerinden istenilen zaman sıklığı ve koşulları ile otomatize edebilirsiniz.

1. İlk olarak Exchange komutalarını çalıştırabilmek için Exchange PSSnapin'ini ekliyoruz. Eğer uzak makineden scriptimizi çalıştıracaksak bağlanacağımız Exchange sunucusuna yeni bir PSSession açıyoruz.

PSSnapin eklemek için kullandığımız komut;

Add-PSSnapin *Exchange*

PSSession oluşturmak için kullandığımız komut;
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://Exch01/PowerShell/ -Authentication Kerberos -Credential $UserCredential
Import-PSSession $Session -DisableNameChecking
2.Get-User komutu ile e-postası aktif olmayan kullanıcıları belirli bir OU parametresi ile çekiyoruz. "RecepientTypeDetails" özelliği ile gelen kullanıcı verisinin posta kutusu olup olmadığını anlayabiliriz. "User" olanlar sadece kullanıcı, "UserMailbox" tipinde olanlar ise posta kutusu açılmış kullanıcıları ifade etmektedir. 
$users = Get-User -OrganizationalUnit "test.com/TEST/Users" -RecipientTypeDetails User | ?{$_.AccountDisabled -like "False"}
3.$users dizisindeki tüm kullanıcılar için mail enable komutunu gönderiyoruz.Posta kutusu açılan ve açılamayan kullanıcıları ayrı ayrı değişkenlerde tutuyoruz.

foreach ($user in $users)
{                                                                    
    try                                                            
    {
        Enable-Mailbox $user
        Write-Host $user.SamAccountName " :Posta kutusu açıldı."
        $acilanlar += $user.SamAccountName+","
    }
    catch 
    {
        Write-Host $user.SamAccountName " :Posta kutusu açılamadı!"
        $acilamayanlar += $user.SamAccountName+","
    }
}

4. Son olarak bilgilendirme maili göndermek için aşağıdaki kod bloğunu tanımlayabilirsiniz. 

if ($users)
{
 Send-MailMessage -SmtpServer mail.test.com -From     "bilgilendirme@test.com" -To "okuru@test.com" -Body "Posta kutusu     açılan hesaplar: $acilanlar `n Posta kutusu açılamayanlar:       $acilamayanlar" -Subject "posta kutusu durumu" -Encoding UTF8
  

5. Hazırladığım Scriptin hergün otomatik olarak çalışmasını istiyorum. Bunun için Task Schedular'ı açıyoruz."Task Scheduler Library" üzerinden sağ tıklayarak "Create Task" seçeneğini seçiyoruz.

"General" sekmesinde Task'ımıza bir isim veriyoruz. "Run whether user is logged on or not" seçeneğini seçerek scripti çalıştıracak kullanıcının makinede oturum açıp açmadığına bakmadan çalışmasını sağlıyoruz. "Run with highest privileges" seçeneğini de işatliyoruz.


Triggers sekmesinde "New" butonuna tıklayarak bir tetikleyici ekleyeceğiz. Ben günlük olarak sabah 09:00'da çalışmasını istediğim için aşağıdaki ayarları uyguladım.



Action sekmesinde çalıştıracağımız scripti seçeneğiz. Bunun için "New" butonuna tıklıyoruz. Açılan ekranda Action olarak "Start a program" seçerek "Program/Script" alanına powershell uygulamasının yolunu gösteriyoruz.

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

"Add argument" alanına çalıştırmak istiğimiz scriptin yolunu veriyoruz ve kaydediyoruz.

-command "C:\Tools\otomail.ps1" 


"Conditions" ve "Setting" sekmelerinde herhangi bir değişiklik yapamadan kaydediyoruz. Task'ımız hazır.



6.Script çalıştığından gelen bilgilendirme maili aşağıdaki gibidir;


Tüm kodlar:
Add-PSSnapin *Exchange*
$users = Get-User -OrganizationalUnit "test.com/TEST/Users" -RecipientTypeDetails User | ?{$_.AccountDisabled -like "False"}
foreach ($user in $users)
{
    try
    {
        Enable-Mailbox $user
        Write-Host $user.SamAccountName " :Posta kutusu açıldı."
        $acilanlar += $user.SamAccountName+","
    }
    catch 
    {
        Write-Host $user.SamAccountName " :Posta kutusu açılamadı!"
        $acilamayanlar += $user.SamAccountName+","
    }
}

if ($users)
{
   Send-MailMessage -SmtpServer mail.test.com -From "bilgilendirme@test.com" -To "okuru@test.com" -Body "Posta kutusu açılan hesaplar: $acilanlar `n Posta kutusu açılamayanlar: $acilamayanlar" -Subject "posta kutusu durumu" -Encoding UTF8 
}

Teşekkürler.

Yorumlar

Bu blogdaki popüler yayınlar

Reporting Exchange Mail Traffic and Login Statistics with PowerShell

Exchange Server 2016/2019 Sertifika Yenileme

Bulk Resetting Active Directory User Passwords