Sharepoint AD üzerindeki distribution List'e mail göndermiyor

Merhaba,

Sharepoint üzerinde bir listeye Alert tanımlamama rağmen. Alert içinde tanımladığım Distribution List içindeki kullanıcılara mail gitmiyordu. 
Durumu çözebilmek için bir sürü şey denedim. Ancak sonuca şu şekilde ulaşabildim:

  1. Exchange ManageMent Console açılır
  2. Microsoft Exchange -> Microsoft Exchange on-Premises -> Recipient Configuration -> Distribution adımına ilerle
  3. Mail gönderemediğin Distribution Grubunu bul
  4. Properties'e tıkla
  5. "Mail Flow Settings" Tab'ine tıkla
  6. “Message Delivery Restrictions” a tıkla
  7. “Require that all senders are authenticated” üzerindeki check'i kaldır
  8. OK tıkla
  9. OK tıkla

Sharepoint Backup alırken “Cannot open backup device” hatasının nedeni ve çözümü

Sharepoint backup’ı alırken path’i “C:\backup” şeklinde verirsek “Cannot open backup device”  hatasını alırız. 
Backup alırken path’i “\\intranet\c$\backup” gibi bir network pathi olarak vermeliyiz.

Ayrıca backup dosyalarını sakladığımız makine db sunucusundan farklı bir makine ise izin problemi yaşayabiliriz:

Senaryo 1:

  • Bizim senaryomuzda backup aldığımız makine ayrı bir makine
  • Backup alırken sharepoint tarafında kullandığımız kullanıcı SharePoint sistem yöneticisi
  • Backup folder’ı yaratılıyor, diğer dosyalar da yaratılıyor. Ancak sql backup’ı alırken SQL exception(Cannot open backup device) alıyoruz.

Senaryo 1 Sebebi :

  • SQL server servislerinin kullanıcı “local system” olarak ayarlanmış
  • belirlenen folder’a sharepoint sistem kullanıcısının erişim izni var. Ancak Database sunucusunun izni olmadığı için backup alırken erişim izni hatası veriyor.

Senaryo 1 Çözümü :

  • Belirlediğimiz backup folder’ını gizli bir folder yapıp “everyone” grubuna hak verebiliriz. (Bu basit ama güvenlik zaafiyeti olan bir çözüm)
  • Doğru yöntem ise backup folder’ı için database sunucusuna direkt olarak izin vermek.

Not: Eğer backup alırken yukardaki gibi hatalar oluşmuşsa User Profile Sync servislerini de durdurmuş olabilir. Bu durumda iisreset yapmanız servisleri tekrar ayağa kaldıracaktır.

Powershell komutu ile bir klasörü sıkıştırıp yedeğini almak

##Oncelikle Backup'ini alacagimiz uygulamanin pathini yaziyoruz
$kaynakPath="\\cronus\e$\IIS_APP\ironiccolakoglu"
##Dosya Adini olusturuyoruz
$tarih=Get-Date
$dosyaAdi= $tarih.Year.ToString()+$tarih.Month.ToString()+$tarih.Day.ToString()+"_"+$tarih.Hour.ToString()+$tarih.Minute.ToString()+".zip"
##Yedeklerin gonderilecegi Pathi veriyoruz
$hedefPath="D:\recep\"
##New-Item -ItemType directory -Path $hedefPath

##Pscx modulu ile Backup alinacak klasoru zipliyoruz
Import-Module Pscx
Write-Zip -level 9 -IncludeEmptyDirectories -Path $kaynakPath -OutputPath $kaynakPath$dosyaAdi
##Zip dosyasini HedefPath'e tasiyoruz
Move-Item $kaynakPath$dosyaAdi $hedefPath

Not:Zipleme özelliğini kullanmak için Pscx modülünü yüklemelisiniz. http://pscx.codeplex.com/releases/view/98267

Tabloya sadece belirlediğimiz procedure üzerinden insert yapılmasını sağlamak

SQL server üzerindeki bir tabloya sadece belli bir procedure ile insert yapılmasını, direkt tablo üzerinde insert yapılamamsını sağlamak istiyoruz.

Bunu sağlamak için procedure içinde insert komutundan önce bir iz bırakıyoruz(CONTEXT_INFO). Insert trigger'ı içinde de bu izi arıyoruz. Eğer CONTEXT_INFO içindeki bilgi istediğimiz procedure e ait ise işlemi yapıyoruz. Değilse hata verdirtiyoruz.

Örnek Pocedure:

---************************************
    ---INSERT yaparken Prosedurun ismini CONTEXT_INFO ya ekliyoruz. Triggerda Prosedur ismi kontrol edilecek!
        DECLARE @string VARCHAR(128) ,
            @CONTEXT_INFO VARBINARY(128)
        SET @string = ISNULL(OBJECT_NAME(@@PROCID), 'none')
        SET @CONTEXT_INFO = CAST('Procedure=' + @string + REPLICATE(' ', 128) AS VARBINARY(128))
        SET CONTEXT_INFO @CONTEXT_INFO
    ---***********************************
 
Trigger Örneği:
CREATE TRIGGER dbo.TRIGGER_ADI
   ON  dbo.TABLO_ADI
   INSTEAD OF INSERT
AS 
BEGIN

 DECLARE @string         varchar(128)
       ,@sCONTEXT_INFO  varchar(128)=''
		SELECT @sCONTEXT_INFO=CAST(CONTEXT_INFO() AS VARCHAR) FROM master.dbo.SYSPROCESSES WHERE SPID=@@SPID
        IF @sCONTEXT_INFO IS NULL OR LEFT(@sCONTEXT_INFO,23)<>'Procedure=PROCEDURE_ADI'
			BEGIN
                DECLARE @errorMsg1 VARCHAR(500);

                SET @errorMsg1 = 'TABLO_ADI TABLOSUNA SEDECE PROCEDURE_ADI PROSEDÜRÜ İLE KAYIT EKLENEBİLİR!' ;
               RAISERROR(@errorMsg1,16,1)
			END
				ELSE
			BEGIN
			 INSERT INTO TABLO_ADI
			         SELECT AlanAdi1,AlanAdi2,....
			        FROM INSERTED
			END

END