1. Anasayfa
  2. Sanallaştırma

Office 365 ve Windows Azure Entegrasyonu Bölüm 1 – Exchange Management Shell


0

Önceki makalelerde Windows Azure üzerinde bir bulut uygulamasının en basit haliyle nasıl yapılandırıldığını (“Windows Azure: Yönetim Paneli ve İlk Bulut Uygulaması”), bu uygulamanın SQL Azure altyapısını kullanan bir bulut veritabanı ile nasıl ilişkilendirildiğini (“SQL Azure: Yapılandırma ve İlk Bulut Veritabanı”) gördük. Diğer yandan da Office 365‘in temel ayarlarını ve özelliklerini inceledik (“Office 365’i Yapılandırmak ve Özelliklerine Hızlı Bir Bakış”). Şimdi ise, Windows Azure-Office 365 entegrasyonu konusunu inceleyen ilk makalemize başlayalım.

Bugün itibariyle Microsoft’un Windows Live, Bing, Windows Intune gibi bulut bilişim çözümleri Microsoft verimerkezlerinde kendi platformlarını kullanarak hizmet vermektedir. Office 365 (O365) ve Dynamics CRM Online da keza aynı durumda. Ancak, Microsoft’un kurum içi kullandığı uygulamaları yavaş yavaş Windows Azure Platformu’na aktardığı bilinmektedir. İleriki zamanlarda yukarıda sayılan diğer bulut çözümlerinin de Azure Platformu’nu kullanacak şekilde yenilenmesi söz konusu olabilir. Fakat Aralık 2011 itibariyle Windows Azure ve O365 farklı altyapılarda çalışan farklı platformları temsil ediyorlar (her ne kadar bazı verimerkezlerinde her ikisinin sunucu konteynerleri yan yana durabiliyor olsa da). İhtiyacınız olur da satın aldığınız O365 hizmetini Azure’da barındırdığınız uygulamanızla bir şekilde uyumlu hale getirmek ve ilişkilendirmek istediniz, imdadınıza yetişen çözümler elbette yok değil!

Windows PowerShell komut satırı aracı, ortaya çıktığı 2007 yılından bu yana sürekli gelişim göstermiş ve otomasyon, uzaktan yönetim, hızlı ve katılımsız kurulum konularında sistem yöneticilerinin vazgeçilmezlerinden olmayı başarmıştır. Windows 8 ve System Center 2012 dalgasıyla beraber konumu daha da güçlenecek ve özellikle otomasyon işlemleri gibi bulut kavramının olmazsa olmazı için kullanılan en önemli araçlardan biri olacaktır. O365 için de 2011 başlarındaki beta sürecinden bu yana gittikçe zenginleşen PowerShell cmdlet setleri yayınlanmakta. Öncelikle Haziran 2011 sonunda betadan çıkıp ticari olarak son kullanıcıya açılmadan önce PowerShell ile O365 üzerinde neler yapabildiğimize bakalım. Aslında bunları hala da yapabiliyoruz ancak daha sonra yayınlanan özel PowerShell modülleri ile işler çok çok kolaylaştığı için tavsiye etmem açıkçası.

Windows Server Active Directory domain yapısına aşina iseniz, Exchange Server kurulu bir domaininiz varsa Exchange üzerinde yaratılan bir User Mailbox (Kullanıcı Mailkutusu)’ına karşılık Active Directory Users and Computers tarafında otomatik olarak o kullanıcının objesinin yaratıldığını biliyorsunuzdur. Ancak eğer ortamınızda SharePoint Server varsa, portale erişim için muhtemelen özel izinler tanımlandığından fazladan birkaç adımla bu kullanıcıya portalde izin vermeniz gerekiyor. Aynı şey Lync Server için de geçerli, yaratılan yeni kullanıcının Lync üzerinde Enable edilmesi gerekiyor. Benzer bir mantık O365’te de mevcut.

Yazının gidişatından tahmin edeceğiniz gibi, O365’te Exchange Server’ın karşılığı olan Exchange Online üzerinde bir kullanıcıyı uzaktan yönetim ile yaratacağız. Normal şartlarda Exchange Server kurulu olan bir Windows Server işletim sistemine Exchange Server Management Tools ile birlikte PowerShell için Exchange Management Shell yüklenmektedir. Bu Shell sayesinde, Exchange için genişletilmiş ve özelleştirilmiş PowerShell cmdlet’lerine kavuşuyoruz. Amacımız bu Shell aktive edilmiş PowerShell komutlarını Azure’da barındırılan ASP.NET tabanlı ve arkasında C# olan bir uygulamadan çalıştırmak.

İlk olarak Windows SDK 7
yükleyip “C:\WINDOWS\assembly\GAC_MSIL\System.Management.
Automation\1.0.0.0__31bf3856ad364e35” yolunda bulunan System.Manament.Automation.dll‘i Visual Studio’da oluşturduğumuz tek WebRole’lü Azure projemize Referans olarak ekleyelim. PowerShell’i çalıştırarak şu komutu yazalım ve onay istendiğinde Yes diyelim: Set-ExecutionPolicy RemoteSigned. Uygulama içinden cmdlet çalıştırma izni vermiş olduk. Sonrasında Default.aspx.cs ya da oluşturacağımız yeni bir sayfanın codebehind’ının başına aşağıdaki kütüphaneleri ekleyelim:

using System.IO;
using System.Management;
using System.Management.Automation;
using System.Management.Automation.Host;
using System.Management.Automation.Runspaces;

Önceden alınmış O365 hesabınızın admin yetkisine sahip kullanıcının adını ve şifresini bir yere not edin. Sitenizin tasarımına göre ister textbox’lardan alıp parametre olarak göndererek ister doğrudan kodun içine gömerek bu bilgileri aşağıdaki metotta kullanacağız:

private String getPath(String path)
{
return System.Web.HttpContext.Current.Server.MapPath(“~/” + path);
}

public Boolean CreateUserOnExchangeOnline(string userName, string firstName, string lastName, string password,
string phone, string professionTitle)
{
try
{
string alias = firstName + lastName;
string displayName = firstName + ” ” + lastName;
string userPrincipalName = userName + “@pavelslavov.onmicrosoft.com”;
Boolean passExc = false;

string[] remoteScript = { @”$pass = convertto-securestring -asplaintext “”Passw0rd”” -force”,
@”$credential = new-object -typename
ystem.Management.Automation.PSCredential -argumentlist
“admin@pavelslavov.onmicrosoft.com”” , $pass”,
@”$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $credential -Authentication Basic –
allowRedirection”,
@”Import-PSSession $s”,
@”New-Mailbox -Name:””” + userName + @””” -Password (ConvertTo-SecureString -String ‘” + password + @”‘ -AsPlainText -Force) -MicrosoftOnlineServicesID ” + userPrincipalName + @” -displayName:””” + displayName + @””” -PrimarySmtpAddress:””” + userPrincipalName + @””” -Alias:””” + alias + @””” -FirstName:””” + firstName + @””” -lastName:””” + lastName + @””””,
@”Set-User -Identity ” + userPrincipalName + @” -Confirm: $False -MobilePhone ” + phone + @” -Title ” + professionTitle + “”,
@”Remove-PSSession $s”,
“”};

if (File.Exists(getPath(“newUserScript.ps1”)))
File.Delete(getPath(“newUserScript.ps1”));
System.IO.File.WriteAllLines(getPath(“newUserScript.ps1”), remoteScript);
RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
Runspace myRunspace = RunspaceFactory.CreateRunspace(rsConfig);
myRunspace.Open();
Command command = new Command(getPath(“newUserScript.ps1″));
Pipeline pipeline = myRunspace.CreatePipeline();
pipeline.Commands.Add(command);
//powershell erroru olursa yakalamak ve yazdırmak için stringbuilder kullanıyoruz
StringBuilder stringBuilder = new StringBuilder();
Collection<PSObject> results = pipeline.Invoke();

if (pipeline.Error.Count > 0)
{
while (!pipeline.Error.EndOfPipeline)
{
var value = pipeline.Error.Read() as PSObject;
if (value != null)
{
var r = value.BaseObject as ErrorRecord;
if (r != null)
{
stringBuilder.AppendLine(r.InvocationInfo.MyCommand.Name + ” : ” +
.Exception.Message);
stringBuilder.AppendLine(r.InvocationInfo.PositionMessage);
stringBuilder.AppendLine(string.Format(“+ CategoryInfo: {0}”, r.CategoryInfo));
stringBuilder.AppendLine(
string.Format(“+ FullyQualifiedErrorId: {0}”, r.FullyQualifiedErrorId));
}
}
}
//stringBuilder.ToString() ile aldığınız erroru bir yere yazdırabilirsiniz
pipeline.Dispose();
myRunspace.Close();
myRunspace.Dispose();
rsConfig = null;

passExc = true;

if (passExc)
return true;
else
return false;

}
catch (Exception e)
{
return false;
}
}

Bu metot ile, bir string array içine satır satır PowerShell komutları giriyoruz. İlk önce O365 şifremizi SecureString’e çeviriyor ve kullanıcı adımızla beraber credential değişkenine atıyoruz. Sonrasında ise bu değişkeni kullanarak Exchange Online’ın uzaktan erişim için kullanılan adresinden Exchange Management Shell oturumunu (session) kendi üzerimize import ediyoruz. Artık Exchange’e özel cmdlet’leri çalıştırabilir hale geldik. Yeni kullanıcı yaratmak için New-Mailbox cmdlet’ini kullanıyoruz. New-Mailbox parametreleri ile giremediğimiz Phone ve Title gibi bilgileri ise Set-User ile atıyoruz (Tıpkı Exchange Server cmdlet’leriyle atayamadıklarımızı LDAP çekerek otomatik oluşturulan Active Directory User objesine ek bilgi atadığımız gibi). Oturumu kapattıktan sonra bu array’i bir PowerShell script dosyası (.ps1 uzantılı) olarak uygulamanın olduğu dizine kaydediyoruz. Sonrası ise C#’tan PowerShell script çalıştırmanın rutin işlemleri. Runspace oluşturup script’i commad nesnesi olarak gösterip bunu pipeline‘a sokuyorsunuz ve satır satır çalıştırılmasını sağlıyorsunuz. Dikkat ederseniz array’in son elemanı boşluk, bunun sebebi PowerShell komutunu çalıştırmak için komutu yazdıktan sonra Enter’a basmak gerekliliğini simüle etmek.

Her şey yolunda giderse bu komutu çalıştırınca aşağıdaki benzer bir script çalıştırılmış ve Azure uygulamanız üzerinden O365 hesabınızla yeni bir kullanıcı yaratmış olacaksınız:

$pass = convertto-securestring -asplaintext “Passw0rd” –force
$credential = new-object -typename System.Management.Automation.PSCredential -argumentlist “admin@pavelslavov.onmicrosoft.com” , $pass
$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $credential -Authentication Basic –AllowRedirection
Import-PSSession $s
New-Mailbox -Name:”pavel.slavov” -Password (ConvertTo-SecureString -String ‘t3H6Kjw4XB’ -AsPlainText -Force) -MicrosoftOnlineServicesID pavel.slavov@pavelslavov.onmicrosoft.com -displayName:”pavel slavov” -PrimarySmtpAddress:”pavel.slavov@pavelslavov.onmicrosoft.com” -Alias:”pavelslavov” -FirstName:”pavel” -lastName:”slavov”
Set-User -Identity pavel.slavov@pavelslavov.onmicrosoft.com -Confirm: $False -MobilePhone 905355555555 -Title CIO
Remove-PSSession $s

Daha önce bahsettiğim üzere, bu yöntem beta dönemi için kullanabileceğiniz tek seçenek gibiydi. Dolayısıyla işinizi bir yere kadar görüyordu. Örneğin yaratılan bu kullanıcıya O365 tarafında otomatik lisans atayamıyorsunuz. Belki uygulamanız içine O365 yönetim adresinin linkini verip, kullanıcıyı yaratan kişiyi oraya yönlendirip lisans atama işini manüel yapmasını söyleyebilirsiniz (Lisans atama için “Office 365’i Yapılandırmak ve Özelliklerine Hızlı Bir Bakış” yazıma bakabilirsiniz).

İşin güzel tarafı, O365’in tam sürümü çıktığında, beraberinde bütün bu işlemler ve daha fazlası için faydalı araçlarla geldi. Windows Azure ve O365’in entegrasyonunu bu yeni özelliklerle anlatacağım bir sonraki yazım için takipte kalın!

Bu konuyla ilgili sorularınızı Http://forum.mshowto.org alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.technet.com

www.mshowto.org

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

1987 Sofya, Bulgaristan doğumluyum. Boğaziçi Üniversitesi Yönetim Bilişim Sistemleri Bölümü mezunu. Sistem analiz ve tasarım, sanallaştırma ve bulut bilişim teknolojileri, semantik web ve e-öğrenme alanlarına yönelik araştırma-geliştirme yapmakta ve bir eğitim teknoloji çözümleri firmasında çalışmaktadır. Microsoft tarafında MCSA, MCTS, MCP sertifikalarına sahiptir.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir