Outlook’ta bir kontak eklemeye çalıştığınızda "There is not enough memory to perform the operation" hata mesajı

 

Bu durum için asagidaki senaryoyu gözden geçirmek yararli olacaktir.

Kullanicilar AutoEnrollment vasitasiyla Otomatik olarak sertifika aliyorlar.
Bazi kullanicilar birden fazla makinede log on olduklari için her makinede bu islem olusuyor.
Bu islem sonunda Kullanicinin Active Directory objesinde Published Certificates tabinda sertifika adedi çogalinca Exchange & Outlook tarafinda baslikta olan sorunu yasamaya baslayabilirsiniz.
Error message when you try to add a contact in Outlook 2003: "There is not enough memory to perform the operation"
https://support.microsoft.com/kb/948077/en-us
Sonrasinda bu sertifikalari Published Certificates tabindan silerek sorunu geçici olarak düzeltiyorsunuz fakat zamanla ayni durum tekrar olusuyor.

Burada nedenler ve uygulanilsabilecek çözüm yöntemleri asagidaki gibidir.

Öncelikli olarak Autoenrollment için gereken CA Template’’leri kontrol edildmelidir. Template özelliklerinde bulunan Do Not Automatically Re-Enroll If a Duplicate Certificate Exists in Active Directory seçenegi seçilerek Userlarin belirli sertifika template’inden alinan sertifikanin AD tarafinda birden fazla enroll edilmesini engelleyebilirsiniz. Islemin etkili olmasi için Template versiyonu ayrica yükseltilmelidir. template versiyonu yükseltmek için CA console --> Certificate Templates klasörü üzeri sag klik manage --> Template üzeri sag Klik --> Reenroll All Certificate Holders seçilmelidir.

image

Publish Certificate in Active Directory : Bir user account objesinin userCertificate attribute’ü içerisine sertifikayi publish etmenizi saglar. Bu seçenek genellikle userlarin encryption sertifikalarinin public key’ine ulasmalari için yapilandirilabilir.

Do Not Automatically Re-Enroll If a Duplicate Certificate Exists in Active Directory : Userlarin belirli sertifika template’inden alinan sertifikanin birden fazla enroll edilmesini engeller. Eger bir versiyon zaten AD de publish edilmis ise , re-enrollment autoenrolment process’inde engellenir.

image

Bu islem sonrasinda daha fazla publish edilen sertifika olmadigi ama halihazirda publish edilmis sertifikalarin soruna yol açmasi dolayisiyla nasil bir yol izleyecegimiz açisindan asagidaki çalismayi yapmak gerekecektir.

Published Certificates alaninda kullanilan sertifikalari belirli kriterlere göre silecek sekilde asagidaki script’i modifiye edemiyoruz. Ya bu script kullanilarak  tüm userlarin publish edilmis sertifikalari silinecek ya da siz manuel olarak bu sorunu yasadigini bildiren kullanicilarin AD account’u üzerinden  Published Certificates tabindan gereksiz sertifikalari sileceksiniz.

Bu sertifikalar silinirken alindigi computer’ün local store’undan silinmez. Sadece AD ‘de obje üzerinde olan publish durumu silinir. Dolayisiyla bu sertifikalardan biri kullaniliyor ise o sertifika hangi system üzerinde oldugu bulunarak tekrar kullanilabilir.

Bu Published Certificates alaninda bulunan sertifikalar kullanicinin userCertificate Attribute’ünde görünürler.

image

Edit ettiginizde attribute altindaki  sertifikalari görecek 

image

Bu alani seçip edit ettiginizde ise sertifikalar ile ilgili hashlenmis içerigini göreceksiniz.

image

Örnek olarak ben kullanicima yeni bir user sertifikasi aldim 

image

Sonrasinda sertifikanin serial numarasini not ettim

image

Sertifikayi buradan sildim

image

image

Fakat sertifika halen alindigi sistemin üzerindeki Local Store da durmakta 

image

Dolayisiyla komutlar ile Publish sertifikalarin silinmesinin bir sikinti yaratmayacagini keza bu sertifikalarin alindigi sistemin local store’unda duracagini söyleyebiliriz.

Ben adimlari kendi ortamimda uyguladim ve basarili oldu. Fakat siz uygulamadan önce mutlaka bir AD tarafinda gerekli backup larin alinmasini saglamalisiniz.

Eger gerekli görürseniz uygulamaniz gereken asagidaki gibidir :

****************************************************************************************************************************************************************************

1. Domain Controller üzerinde C sürücüsünde certdelete isimli bir klasör olusturunuz

2. Bu klasör içerisindeki ilk dosya BulkCertDelete.cmd olacak ve AD ‘de olan tüm user objelerinin bir listesini alacak. Sonrasinda bu bilgiyi %temp%\user.txt dosyasina yazacak. Sonra , CMD içerisinden loop ederek usercertificate attribute’unu silmek için LDIFDE kullanarak AD objesini modify edecek 

3. Bu dosyanin içerigi asagidaki gibi olacaktir. Bu içerigi notepad ‘e kopyalayip c:\certdelete\bulkcertdelete.cmd olarak kaydediniz

REM ############## Start of Script ##############

dsquery user -limit 0 > %temp%\user.txt

FOR /F "tokens=*" %%i IN (%temp%\user.txt) DO ldifde -i -f publishcertdelete.ldf -c "CN=X" %%i

REM ############## End of Script ##############

4. Ikinci dosya ise publishcertdelete.ldf dosyasidir .Bu dosya user certificate’leri silecek bir ldf dosyasidir ve %temp%\user.txt dosyasinda olusan her bir distinguished name ‘in “cn=x” degiskenini degistirir.  

5. Bu dosyanin içerigi asagidaki gibi olacaktir. Bu içerigi notepad ‘e kopyalayip c:\certdelete\publishcertdelete.ldf olarak kaydediniz

############## PublishcertDelete.LDF ##############

dn: CN=X

changetype: modify

delete:UserCertificate

-

############## PublishcertDelete..LDF ##############

6. Bu asamadan sonra Administrative CMD açilip c:\certdelete klasörüne erisilir ve bulkcertdelete.cmd dosyasi çalistirilir. 

****************************************************************************************************************************************************************************