Senaryo Örnekleri

  • "Genel Müdürün asistanı tüm yönetim takvimini Editor olarak yönetsin"
  • "Tüm çalışanlar birbirinin takviminde meşgul/boş görsün ama detay görmesin"
  • "Pazarlama ekibi birbirinin takvim detayını görsün"
  • "Yeni çalışan otomatik olarak manager'ının takvimini Reviewer alsın"

Manuel her kullanıcı için Outlook'ta ayarlamak imkansız. PowerShell tek çözüm.

Permission Türleri — Hangi Hangisi?

AccessRightsGörürOluştururDüzenlerSiler
NoneHiçbir şey
FreeBusyTimeOnlySadece meşgul/boş
FreeBusyTimeAndSubjectAndLocationMeşgul + konu + konum
ReviewerTüm detaylar (read-only)
AuthorDetaylar✓ kendi etkinliklerinikendikendi
EditorDetaylar✓ tüm✓ tüm
PublishingEditor+ alt klasör oluşturabilir
OwnerTam kontrol + permission yönetimi

Delegate vs Permission Farkı

  • Permission: Kullanıcı görür/yazar ama meeting davetleri kendi adına gider.
  • Delegate: Davetler gönderene "kim adına" göndererildi notu çıkar; kabul/red davetleri otomatik olarak delegate'e gelir.

"Asistan yöneticinin adına davet kabul etsin" senaryosu için Delegate gerekli.

1) Tek Kullanıcı için Permission Verme

Connect-ExchangeOnline

# Yönetici takvimini sekretere ver (Editor)
Add-MailboxFolderPermission -Identity "yonetici@firmaniz.com:\Calendar" `
  -User asistan@firmaniz.com -AccessRights Editor

# Sadece meşgul/boş + konu görsün
Add-MailboxFolderPermission -Identity "yonetici@firmaniz.com:\Calendar" `
  -User tumcalisanlar@firmaniz.com -AccessRights LimitedDetails

2) Mevcut Permission'ları Görüntüle

Get-MailboxFolderPermission -Identity "yonetici@firmaniz.com:\Calendar" |
  Where User -ne "Default" -and User -ne "Anonymous" |
  Select User, AccessRights, IsValid

3) Permission Değiştirme / Silme

# Değiştir
Set-MailboxFolderPermission -Identity "yonetici@firmaniz.com:\Calendar" `
  -User asistan@firmaniz.com -AccessRights Reviewer

# Sil
Remove-MailboxFolderPermission -Identity "yonetici@firmaniz.com:\Calendar" `
  -User asistan@firmaniz.com -Confirm:$false

4) Default ("herkes") Permission Değiştir

Tüm tenant kullanıcılarının default takvim görünürlüğü:

# Default = AvailabilityOnly (sadece meşgul/boş) — Microsoft'un default'u
# Tüm şirket konu+lokasyon görsün:
Set-MailboxFolderPermission -Identity "ahmet@firmaniz.com:\Calendar" `
  -User Default -AccessRights LimitedDetails

# Tüm çalışanlar için toplu
Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited | ForEach-Object {
  Set-MailboxFolderPermission -Identity "$($_.PrimarySmtpAddress):\Calendar" `
    -User Default -AccessRights LimitedDetails -ErrorAction SilentlyContinue
}

5) Türkçe Klasör Adı Sorunu (KRİTİK)

Outlook Türkçe profile'da takvim klasörünün kullanıcı dilinde adı olur (Calendar / Takvim / Calendrier...). PowerShell genelde "Calendar" olarak çalışır ama bazen "Takvim" gerekir.

# Kullanıcının takvim klasörünün gerçek adını öğren
Get-MailboxFolderStatistics -Identity ahmet@firmaniz.com -FolderScope Calendar |
  Select Name, FolderPath

Çıktı: Name: Takvim, FolderPath: /Takvim ise:

Add-MailboxFolderPermission -Identity "ahmet@firmaniz.com:\Takvim" `
  -User asistan@firmaniz.com -AccessRights Editor

Dile bağımsız çözüm — wellknown alias

$user = "ahmet@firmaniz.com"
$cal = Get-MailboxFolderStatistics -Identity $user -FolderScope Calendar |
  Where FolderType -eq "Calendar" |
  Select -First 1
$path = $user + ":" + $cal.FolderPath.Replace("/", "\")

Add-MailboxFolderPermission -Identity $path -User asistan@firmaniz.com -AccessRights Editor

6) Toplu Pattern: "Asistan Tüm Yönetim Takvimini Görür"

$asistan = "asistan@firmaniz.com"
$yoneticilerOU = Get-MgUser -Filter "department eq \u0027Yönetim\u0027" -All

foreach ($mgr in $yoneticilerOU) {
  try {
    $cal = Get-MailboxFolderStatistics -Identity $mgr.UserPrincipalName -FolderScope Calendar |
      Where FolderType -eq "Calendar" | Select -First 1
    $path = $mgr.UserPrincipalName + ":" + $cal.FolderPath.Replace("/", "\")

    # Mevcut izin var mı kontrol
    $existing = Get-MailboxFolderPermission -Identity $path -User $asistan -ErrorAction SilentlyContinue

    if ($existing) {
      Set-MailboxFolderPermission -Identity $path -User $asistan -AccessRights Editor
    } else {
      Add-MailboxFolderPermission -Identity $path -User $asistan -AccessRights Editor
    }

    Write-Host "✓ $($mgr.UserPrincipalName)"
  } catch {
    Write-Warning "$($mgr.UserPrincipalName): $($_.Exception.Message)"
  }
}

7) Delegate Atama (Davetleri Asistana Yönlendir)

Set-MailboxFolderPermission -Identity "yonetici@firmaniz.com:\Calendar" `
  -User asistan@firmaniz.com -AccessRights Editor `
  -SharingPermissionFlags Delegate, CanViewPrivateItems

# Yöneticinin gelen davetleri asistana yönlendir
Set-CalendarProcessing -Identity yonetici@firmaniz.com `
  -ResourceDelegates @{Add="asistan@firmaniz.com"} `
  -ForwardRequestsToDelegates $true

8) Şirket Genelinde "FreeBusy + Konu" — Outlook Yanıtlama Hızlanır

Default Microsoft 365: tüm tenant kullanıcıları birbirinin "AvailabilityOnly" görür. Ama "Konu" görmez — meeting planlamak zor olur. Çözüm: tüm mailbox'lar için Default = LimitedDetails.

$mailboxes = Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited

$count = 0
foreach ($m in $mailboxes) {
  try {
    $cal = Get-MailboxFolderStatistics -Identity $m.PrimarySmtpAddress -FolderScope Calendar |
      Where FolderType -eq "Calendar" | Select -First 1
    $path = $m.PrimarySmtpAddress + ":" + $cal.FolderPath.Replace("/", "\")

    Set-MailboxFolderPermission -Identity $path -User Default -AccessRights LimitedDetails -ErrorAction Stop
    $count++
  } catch {
    Write-Warning "$($m.PrimarySmtpAddress) atlandı: $_"
  }
}
Write-Host "$count mailbox güncellendi."

9) Etiketleri Görme (Categories)

"Toplantı kategorisini görmek istiyorum" — bunun için Reviewer şart, LimitedDetails yetmez.

10) Audit — "Kim Kimin Takvimine Erişti?"

Search-UnifiedAuditLog `
  -StartDate (Get-Date).AddDays(-7) -EndDate (Get-Date) `
  -Operations FolderBind -ResultSize 5000 |
  Where { ($_.AuditData | ConvertFrom-Json).Folder.Path -like "*Calendar*" } |
  Select CreationDate, UserIds,
    @{n="MailboxOwner";e={($_.AuditData | ConvertFrom-Json).MailboxOwnerUPN}}

SSS

Permission değişikliği ne zaman aktif olur?

Anında — ama Outlook client'ında 5-30 dk cache'lenir. OWA'da hemen test edilebilir.

Editor mü, Delegate mi?

Sadece "görüntüleme + düzenleme" için Editor. Davetlerin asistana gelmesi gerekiyorsa Delegate.

"Default" değiştirince eski izinler etkilenir mi?

Hayır — Default sadece "specific user permission verilmemiş herkesi" kapsar. Spesifik izinler ayrı işler.

Konu/lokasyon görsün ama özel etkinlikler değil?

Outlook'ta etkinliği "Private" işaretle. LimitedDetails veren kişi private etkinlikleri görmez (sadece meşgul olarak).

Birden fazla takvim klasörü olan kullanıcı?

Get-MailboxFolderStatistics tüm calendar tipi klasörleri listeler. Her birine ayrı permission ekle.

Calendar permission setup için bize ulaşın → 100+ kullanıcılı şirketlerde 1 saatlik toplu yapılandırma servisi.