Send As yetkilerini daha hızlı nasıl raporlayabilirim?

closeBu yazı 2 yıl 9 ay 4 gün önce yayınlanmış olduğundan güncelliğini yitirmiş veya içeriğindeki bilgilerin geçerliliği kaybolmuş olabilir. Herhangi bir yanlış anlaşılmadan bu site sorumlu değildir.

Exchange üzerinde send as yetkisi başka bir kullanıcı adına mail gönderebilme yetkisidir. Çok fazla sayıda mailbox’ın bulunduğu Exchange altyapılarında Send as yetkisi verilmiş olan kullanıcıları raporlamak genellikle çok uzun sürebilir. Exchange organizasyonunda verilmiş olan bütün Sendas yetkilerini bulmak için en sık kullanılan komut çoğu durumda şu komut olarak karşımıza çıkıyor:

Get-Mailbox –resultsize unlimited | Get-ADPermission | where { ($_.ExtendedRights -like “*Send-As*”) -and ($_.IsInherited -eq $false) -and -not ($_.User -like “NT AUTHORITY\SELF”) }

Bu komut size hangi mailboxlara direk sendas yetkisi verilmiş olduğunu bulacaktır. Ancak yüksek sayıda mailbox bulunan ortamlarda genelde her bir database/OU/Server için ayrı ayrı çalıştırarak sonucu hızlandırabilirsiniz.
Ne kadar bölerseniz bölün pipeline ve Get-Adpermission komutunun işlevinden dolayı bu sonuç yeterince hızlı olmayacaktır.
Send As yetkisini raporlamanın en hızlı direk olarak active directory’e sormak olacaktır. Bunun için oluşturduğum function’ı kullanarak kendi ortamınızda test edebilirsiniz.

function Get-SendAsPermissionsfromAD
{
    Param
    (
        [Parameter(Mandatory = $false)] $Recipients
    )
    if (!$Recipients)
    {
        $Recipients = Get-Mailbox -ResultSize Unlimited
    }
    $Count = 0
    $TotalItems = $Recipients.Count
    import-module activedirectory
    $Domain = Get-Addomain | select -expand distinguishedname
    $Sendas = Get-ADObject -Properties rightsguid "CN=Send-As,CN=Extended-Rights,CN=Configuration,$($Domain)" | Select -expand RightsGuid
    $AllSendAsPermissions = @()
    foreach ($Recipient in $Recipients)
    {
        $Count++
        [int]$percentComplete = [int](($Count/$TotalItems * 100))
        Write-Progress -Activity "Checking Send-As Permissions" -PercentComplete "$percentComplete" -Status ("Processing Mailbox: $($Recipient.DisplayName) - $($Count) of $($TotalItems)")
        $SendasMemberValues = $Null
        $DistinguishedName = $Recipient.DistinguishedName
        $Permissions = (Get-Acl "ad:$($DistinguishedName)").access | where { ($_.IsInherited -eq $false) -and ($_.objecttype -eq $sendas) -and ($_.IdentityReference -notlike "NT AUTHORITY\SELF") -and ($_.AccessControlType -eq "Allow") } | Select -expand IdentityReference
        $Permissions = $Permissions | Select -expand Value
        if ($Permissions)
        {
            foreach ($Permission in $Permissions)
            {
                $Values = new-object psobject
                $Values | Add-Member -membertype noteproperty -name "Name" -Value $Recipient.Name
                $Values | Add-Member -membertype noteproperty -name "Permission" -Value $Permission
                $AllSendAsPermissions += $Values
            }
        }
    }
    $AllSendAsPermissions
}

Örnek olarak her iki yöntem ile 1400’e yakın sayıda mailbox’ın bulunduğu bir ortamda aldığımız sonuçları ayrı ayrı karşılaştırarak süre farkına bakabiliriz.
İlk olarak Get-ADpermission ile aldığımız sonucun süresine bakalım:

$elapsed = [System.Diagnostics.Stopwatch]::StartNew()
$StandardWay = Get-Mailbox -resultsize Unlimited | Get-ADPermission | where {($_.ExtendedRights -like “*Send-As*”) -and ($_.IsInherited -eq $false) -and -not ($_.User -like “NT AUTHORITY\SELF”)}
write-host "Total Elapsed Time: $($elapsed.Elapsed.ToString())"

2

Şimdi aynı sonucu Active Directory’den direk alırsak nasıl bir sonuç oluyor ona bakalım:

$elapsed = [System.Diagnostics.Stopwatch]::StartNew()
$ADway = Get-SendAsPermissionsfromAD
write-host "Total Elapsed Time: $($elapsed.Elapsed.ToString())"

1

Aradaki süre farkını açıklamaya gerek yok sanırım.

Function’ı ihtiyacınıza göre düzenleyerek daha hızlı sonuçlar almak mümkün.

Notlar:

  1. Get-SendAsPermissionsfromAD function’ı kullanabilmeniz için Active Directory Module ve Exchange Session’ın olması gerekiyor.
  2. Ortamınızda birden fazla domain varsa function’ı Exchange sunucularınızın bulunduğu domain için ayarlamanız gerekiyor.

 

Yayınlayan: Serkan Varoğlu

Yıldız Teknik Üniversitesi Elektrik Mühendisliğini bitirdim. Türkiye'de birçok farklı sektör ve firmada Sistem Yöneticiği yaptım. Bermudada 3 yıla yakın danışmanlık yaptıktan sonra şu anda İrlanda'da çalışma hayatıma devam ediyorum.