Bu makalede Exchange Sunucu üzerinde powershell kullanarak basit bir takım işlemleri gerçekleştireceğiz.
Öncelikle bir komutu veya parametrelerini ezberlemek zorunda olmadığımız hatırlatmak isterim.
Mesela içinde mailbox geçen komutlar aklımıza gelmediyse;
Get-Command -name *mailbox* | more
veya get- ile başlayan komutları görmek istersek:
Get-Command -name get-* | more
get ile başlayıp içinde bir yerde mailbox geçen komutları listelemek içinse:
Get-Command -name get-*mailbox* | more
get-mailbox komutunun örneklerini görmek istersek;
Get-Help Get-Mailbox -Examples
Hangi parametreleri aldığını ve kullanım örneklerini birlikte görmek istersek;
Get-Help Get-Mailbox -Detailed
Komutun çıktısında değişkenlerin adlarını da ezberlemek zorunda değiliz.Komutun ardına fl * eklersek ilgili objeye ait tüm değişkenleri ve aldıkları değerlerin tamamını görürüz:
Get-Mailbox ahmet | fl *
Not: "fl" parametresi liste şeklinde, "ft" parametresi ise tablo halinde (değişkenler en üst sırada, değerleri altlarında) olacak şekilde listelemeyi sağlar.
1) Belirli bir OU altındaki kullanıcıları listelemek:
04_Bilgi_Islem OU'su altındaki mailbox'ları listeliyoruz ve isme göre sıralıyoruz:
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Sort-Object name
Name Alias ServerName ProhibitSendQuota
---- ----- ---------- -----------------
ahmet ahmet xxxxx 3.4 GB (3,650,722,816 bytes)
mehmet mehmet xxxxx 3.4 GB (3,650,722,816 bytes)
Kaç adet olduklarını görmek istersek:
(Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem).count
2
2) Bir OU altındaki kullanıcının belirli değişken değerlerini listelemek
04_Bilgi_Islem OU'su altındaki mailbox'ların sadece "Alias" , "ProhibitSendQuota" ve "ProhibitSendReceiveQuota" değişkenlerine ait değerleri tablo şeklinde (ft) listelemek istiyoruz:
Not: Değişkenlerin adlarını ezberlemek zorunda değiliz. Komut içerisinde ilk önce "fl*" parametresini kullanarak tüm değişken adlarını öğrenebiliriz.
Get-MailboxStatistics ahmet.mehmet | fl *Time*
LastLogoffTime : 11/28/2018 1:36:17 PM
LastLogonTime : 11/28/2018 1:34:38 PM
| ft Alias,ProhibitSendReceiveQuota,ProhibitSendQuota
Alias ProhibitSendReceiveQuota ProhibitSendQuota
----- ------------------------ -----------------
ahmet 3.5 GB (3,758,096,384 bytes) 3.4 GB (3,650,722,816 bytes)
mehmet 3.5 GB (3,758,096,384 bytes) 3.4 GB (3,650,722,816 bytes)
3)Tekil kullanıcının tüm değişkenlerini görmek:
Get-Mailbox ahmet | fl *
PSComputerName : xxxx.xxx.gov.tr
RunspaceId : 175ff331-6c64-43b1-a388-d5b56ce2f507
Database : Personel_db_1
UseDatabaseRetentionDefaults : True
RetainDeletedItemsUntilBackup : False
DeliverToMailboxAndForward : True
LitigationHoldEnabled : False
SingleItemRecoveryEnabled : False
RetentionHoldEnabled : False
(Sorgu sonucu uzun olduğundan tamamı burada gösterilmemiştir)
4) Tekil kullanıcıya ait bir değeri değiştirmek:
Ahmet kullanısının "Office" değişkenini "TAPDK" olarak değiştirmek istediğimizi düşünelim:
Sorgu yaptığımızda bu değer boş geliyor:
Get-Mailbox ahmet | fl office
Office :
Değeri değiştiriyoruz:
Get-Mailbox ahmet | Set-Mailbox -Office "TAPDK"
Tekrar sorguladığımızda "Office" değişkeninin artık "TAPDK" olduğunu göreceğiz:
Get-Mailbox ahmet | fl office
Office : TAPDK
Değeri boş olarak değiştirmek için:
Set-Mailbox ahmet -Office $none
Set-Mailbox ahmet -Office $none
5) OU altındaki tüm mailbox'lara ait belirli bir değişkeni değiştirmek
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Set-Mailbox -Office "TAPDK"
6) OU altında değişken değeri belirli bir değere eşit olan mailbox'ları listelemek
04_Bilgi_Islem OU'su altında "RecipientLimits" değişkeninin değeri 0 (sıfır) olan mailboxları listeleyelim:
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem
| Where-Object {$_.RecipientLimits -eq 0} | ft alias,recipientlimits
Alias RecipientLimits
----- ---------------
ahmet 0
7) OU altında değişken değeri belirli bir değere eşit olan mailbox'ları bulup bu değişken değerini değiştirmek
04_Bilgi_Islem OU'su altında "RecipientLimits" değişkeninin değeri 0 (sıfır) olan mailboxları listeleyip bu değişkenin değerini "unlimited" yapmak istiyoruz:
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem
| Where-Object {$_.RecipientLimits -eq 0} | Set-Mailbox -Recipientlimits unlimited
Where-Object komut örnekleri:
Where-Object {$_.RecipientLimits -ceq 0} :Değer 0'a eşit
Where-Object {$_.RecipientLimits -cne 0} : Değer 0'a eşit değil
Where-Object {$_.RecipientLimits -gt 0} :Değer 0'dan büyük
Where-Object {$_.RecipientLimits -ge 0} : Değer 0'a eşit veya büyük
Where-Object {$_.RecipientLimits -lt 1} : Değer 1'den küçük
Where-Object {$_.RecipientLimits -le 1} :Değer 1'e eşit veya küçük
Where-Object {$_.RecipientLimits -clike "*unlim*"} :Değer "unlim" ifadesi içeriyor.
Where-Object {$_.RecipientLimits -cnotlike "*unlim*"} :Değer "unlim" ifadesi içermiyor.
Alternatif metot (-filter parametresi kullanmak):
8) Csv formatındaki dosya içerisinde listelenen kullanıcıların tamamıyla ilgili işlem yapmak
a) Örnek 1
import.csv adlı bir dosyamızın içeriğini aşağıdaki şekilde belirliyoruz:
Daha sonra bu dosyayı foreach döngüsü içerisinde kullanıyoruz:
Böylece import.csv dosyasındaki kullanıcı hesaplarının "AcceptMessagesOnlyFrom" değişken değerini "Administrator" olarak değiştirdik. Artık bu kullanıcılar administrator dışında hiçbir yerden mail kabul etmeyecekler.
b) Örnek 2
import.csv adlı bir dosyamızın içeriğini aşağıdaki şekilde belirliyoruz:
9) Kullanıcı hesaplarının mailbox kota kullanımı durumlarını listelemek:
Çıktıyı html formatında almak istersek :
10) Kullanıcı hesaplarının 1 dakika içerisinde gönderebileceği mail adedini 1 ile kısıtlamak
Önce politikayı oluşturuyoruz:
New-ThrottlingPolicy -Name MsgRateLimitTo1Policy -MessageRateLimit 1
Get-ThrottlingPolicy MsgRateLimitTo1Policy (mevcut durum)
Tekil bir hesapta işlem yapmak için:
Set-ThrottlingPolicyAssociation -Identity murat.tas -ThrottlingPolicy MsgRateLimitTo1Policy
Tüm hesaplarda işlem yapmak için:
Not: Sistemdeki default throttling policy'nin MessageRateLimit değişkenini de 1 yapmak suretiyle sistemde var olan ve bundan sonra oluşturulacak olan tüm hesaplarda da kısıtlama yapabilirdik.Fakat yukardaki örneklerde farklı hesaplar için farklı politikalar oluşturabilmekteyiz.
Sistemde mevcut olan tüm throttling politikaları listelemek için:
Get-ThrottlingPolicy | Format-List Name
11) Kullanıcı mailbox'larının klasör büyüklüklerini görmek
Tekil kullanıcıda görmek için:
Tüm kullanıcılarda sadece "deleted items" klasör boyutlarını listelemek için:
Get-Mailbox -ResultSize unlimited | Get-MailboxFolderStatistics -FolderScope DeletedItems
| Out-File -FilePath C:\deleted_items.txt
(Yukarıdaki komut çıktısında, -autosize parametresi sayesinde kolon değerleri daha okunaklı olacaktır)
Tekil kullanıcıda "revoverable items" klasörlerini listelemek için:
Not: Get-MailboxStatistics komutunun çıktısında yer alan "DeletedItemCount" değişkeni yukarıdaki "Deletions" klasöründeki maillerin sayısına eşit olup, kullanıcının "Deleted items" klasöründeki mail sayısıyla bir ilgisi yoktur.
Get-MailboxStatistics murat.tas | fl DeletedItemCount
Recoverable Item'ları silmek için:
Öncelikle powershell komutunu çalıştıracak olan kullanıcımızı (administrator) "Discovery Management" ve "Exchange Organization Administrators" gruplarına üye yapıyoruz.
12) Kullanıcıların kota ayarlarını listelemek:
get-mailbox -resultsize unlimited
içinde "quota" geçen tüm değişkenleri listelemek daha mantıklı olabilir:
get-mailbox ahmet.mehmet | fl *quota*
ProhibitSendQuota : 3.4 GB (3,650,722,816 bytes)
ProhibitSendReceiveQuota : 3.5 GB (3,758,096,384 bytes)
RecoverableItemsQuota : 500 MB (524,288,000 bytes)
RecoverableItemsWarningQuota : 400 MB (419,430,400 bytes)
UseDatabaseQuotaDefaults : True
IssueWarningQuota : 3.3 GB (3,543,348,224 bytes)
RulesQuota : 64 KB (65,536 bytes)
ArchiveQuota : unlimited
ArchiveWarningQuota : unlimited
Öncelikle powershell komutunu çalıştıracak olan kullanıcımızı (administrator) "Discovery Management" ve "Exchange Organization Administrators" gruplarına üye yapıyoruz.
a) Tüm mailleri silmek:
Search-Mailbox -Identity "ahmet.mehmet" -DeleteContent -force
b) İçeriğe göre (konu veya gövdede) göre arama yapıp ilgili maili silmek
Not: Komutlar "administrator" kullanıcısı ile çalıştırılmalıdır.
mailincele@deneme.com.tr hesabına girdiğimizde (Inbox klasörüne girelim), 2 adet mailde söz konusu "abuzittin" ifadesi geçtiğini görmekteyiz:
14) "Disconnected" veya "soft deleted" mailbox'ları hemen silmek
a) Önce silinecek mailbox guid no'lar listelenir.
Get-MailboxStatistics -Database "Mailbox Database 1070557743" | Where-Object {$_.DisconnectDate -Notlike $NULL} | FL DisplayName, DisconnectDate, MailboxGuid
b)Daha sonra ise aşağıdaki komutta "mailboxGuid" yazan yere 1. adımda öğrenmiş olduğumuz guid no yazılarak komut çalıştırılır ve silme işlemi tamamlanır:
Remove-Mailbox -Database "Mailbox Database 1070557743" -StoreMailboxIdentity MailboxGuid
15) İçinde belirli bir ifade bulunan tüm değişken değerlerini listelemek
Bu örneğimizde içinde "Time" ifadesi geçen tüm değişkenlerin değerlerini listeleyeceğiz:
Get-MailboxStatistics ahmet.mehmet | fl *Time*
LastLogoffTime : 11/28/2018 1:36:17 PM
LastLogonTime : 11/28/2018 1:34:38 PM
16) Exchange sistemimizin düzgün çalışıp çalışmadığının kontrolü:
Önce aşağıdaki komutla içinde "Test" geçen komutları listeleyelim:
Get-Command -name *test*
# Test-MailFlow
# Test-OutlookWebServices
# Test-ServiceHealth
# Test-SystemHealth (Bu komut biraz uzun sürmekte)
...
Get-Queue (Bu komutun çıktısında 100'den fazla "MessageCount" görmemeliyiz.
Yukarıdaki komutları çalıştırdığımızda hata almıyorsak sistem düzgün çalışmaktadır diyebiliriz.
17) Belirli bir Dağıtım grubu (distribution group) üyelerine ait değişken değerini değiştirmek:
Get-DistributionGroupMember “bilisim” | Set-Mailbox –prohibitSendRecieveQuota 2GB
18) Kullanıcı/kullanıcılar hangi telefonlarla active-sync üzerinden bağlanmışlar
Tekil kullanıcı:
Get-ActiveSyncDeviceStatistics -Mailbox ahmet
| ft LastSuccessSync,DeviceFriendlyName,DeviceUserAgent,DeviceOS -autosize
LastSuccessSync DeviceFriendlyName DeviceUserAgent
--------------- ------------------ ---------------
10/18/2017 4:38:26 PM Siyah iPhone 4S Apple-iPhone4C1/1307.36
Toplu kullanıcı listesi:
Get-ActiveSyncDevice | Get-ActiveSyncDeviceStatistics
|ft FirstSyncTime,LastSuccessSync,DeviceType,DeviceFriendlyName,DeviceUserAgent,
DeviceOS,Identity -autosize | Out-String -Width 4096| Out-File -FilePath C:\ActiveSyncDeviceInfo.csv
Not: Yukarıdaki komutun çıktısı; "Identity" parametresinden dolayı display içerisine sığmadığından ve çıktı dosyası düzgün olmadığından Out-String -Width 4096 koyarak çıktının düzgün olmasını sağladık..
19) Exchange database data ve log dosyası nerede?
Get-MailboxDatabase -Status | fl EdbFilePath,LogFolderPath
EdbFilePath : D:\xxxx\MailboxDatabase_1.edb
LogFolderPath : E:\xxx\MailboxDatabase_1\LogFolder
20)Exchange database ve log dosyalarını yerini değiştirmek
Move-DatabasePath -Identity Database-Name -EdbFilePath X:\Folder\Database\Database-Name.edb
Move-DatabasePath -Identity Database-Name -LogFolderPath X:\Folder\Log-Folder\
21) Kullanıcı mailboxlarının Exchange Database'lerini değiştirmek
Tekil Kullanıcı mailbox taşımak:
New-MoveRequest -Identity "ahmet" -TargetDatabase “Destination-DB”
-BatchName "ahmet"-BadItemLimit “200” -AcceptLargeDataLoss
İlgili DB'deki tüm kullanıcıları taşımak:
Get-Mailbox -Database “Source-DB” ” -ResultSize Unlimited | New-MoveRequest -TargetDatabase “Destination-DB”
22) Hangi DB'de kaçar tane mailbox var?
Get-Mailbox | Group-Object -Property:Database | Select-Object Name,Count | Sort-Object Name | Format-Table -Auto
23) Bir mail hesabı / dağıtım grubu adına birden fazla kişiye mail gönderebilme (send on behalf) yetkisi vermek
Bilisim@test.com.tr adlı hesabımıza user1@test.com.tr ve user2@test.com.tr hesabı kullanıcıları için mail gönderme yetkisi vermek istediğimizi düşünelim:
bilisim@test.com.tr bir mailbox hesabı ise:
Set-Mailbox “bilisim” -GrantSendOnBehalfTo @{add=”User1“,”User2“}
bilisim@test.com.tr bir distribution group (dağıtım grubu) ise (ki mantıklı olan da budur):
Set-DistributionGroup "bilisim" -GrantSendOnBehalfTo @{add=”User1“,”User2“}
Grubun tüm üyelerine otomatik olarak gönderme yetkisi vermek için:
Set-DistributionGroup "bilisim" -GrantSendOnBehalfTo "bilisim"
Kimlerin yetkisi var görmek istersek:
Get-DistributionGroup "bilisim" | fl name,grant*
Name : bilisim
GrantSendOnBehalfTo : {test.com.tr/Bilisim_Grubu/bilisim}
Yetkiyi sıfırlamak için:
Set-DistributionGroup "bilisim" -GrantSendOnBehalfTo "murat.tas"
(Böylece artık sadece "murat.tas" kullanıcısının send on behalf yetkisi var. Eski ayar sıfırlandı)
24) Komut çıktısını "Split" ve "Replace" komutu kullanarak düzenlemek:
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Where-Object {$_.RecipientLimits -eq 0}
| select PrimarySmtpAddress
PrimarySmtpAddress
------------------
test1@test.com.tr
test2@test.com.tr
Komutun sonuna split eklediğimizde ise aşağıdaki sonucu elde edebiliriz:
test1
test2
Örnek 2:
Split komutunu arka arkaya iki kez kullanarak istediğimiz sonucu elde etmeye çalışacağız:
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Where-Object {$_.RecipientLimits -eq 0} | select DistinGuishedName
DistinguishedName
-----------------
CN=test1,OU=Users,OU=04_Bilgi_Islem,DC=tes,DC=com,DC=tr
CN=test2,OU=04_Bilgi_Islem,DC=test,DC=com,DC=tr
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Where-Object {$_.RecipientLimits -eq 0} | select DistinGuishedName
| %{($_.DistinguishedName -split "=")[1] } | %{($_ -split ",")[0] }
test1
test2
Alternatif yazılış: %{($_.DistinguishedName.split("="))[1].Split(",")[0] }
"test" ifadesini silmek istersek "replace" komutunu kullanmalıyız:
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Where-Object {$_.RecipientLimits -eq 0} | select DistinguishedName,PrimarySmtpAddress
| %{($_.DistinguishedName.split(","))[0].Split("=")[1].Replace("test","") }
1
2
Örnek 3:
Örnek 2'de, tek değişkene (DistinguishedName) göre split işlemini gerçekleştirdik. İki farklı değişken değerini split ile düzenleyerek sonucu çıktı şeklinde almak isteseydik:
Komut çıktılarını düzenleyerek değişkenlere array oluşturarak atıyoruz:
$a = Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem
| Where-Object {$_.RecipientLimits -eq 0} | select PrimarySmtpAddress
| %{($_.PrimarySmtpAddress -split "@")[0] }
$b = Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem
| Where-Object {$_.RecipientLimits -eq 0} | select Guid
| %{($_.Guid -split "-")[0] }
Daha sonra her değişkenin satır satır çıktısını almak için "for" döngüsü kullanarak array değerlerini ekrana yazdırıyoruz:
for($i =0; $i -lt $a.Length ; $i++) { write-host $a[$i] "," $b[$i] }
test1 , c0117729
test2 , 374147b2
25) Sunucu üzerinde Mailbox içeriğini pst dosyaya export etmek:
New-ManagementRoleAssignment –Role "Mailbox Import Export" –User Administrator
c) Aşağıdaki komut çalıştırılır:
New-MailboxExportRequest -Mailbox ad.soyad
-FilePath "\\Sunucu_IP_Adresi\pst\AdSoyad.pst"
d) Mailbox export durumu aşağıdaki komutla kontrol edilir. İşlem tamamlandığında status "Completed" konuma geçecektir.
Get-MailboxExportRequest
e) "Completed" yani tamamlanan görevleri hafızadan silmek için aşağıdaki komut çalıştırılır:
Get-MailboxExportRequest | where {$_.status -eq "Completed"}
| Remove-MailboxExportRequest
Umarım faydalı olmuştur
Murat TAŞ
Where-Object {$_.RecipientLimits -ceq 1 -and $_.Office -clike "*TAPDK*"}
:RecipientLimits değeri 1'e eşit VE Office değişkeni "TAPDK" ifadesini içeriyor.
Alternatif metot (-filter parametresi kullanmak):
Get-Mailbox -ResultSize unlimited -Filter {(RecipientTypeDetails -ne 'UserMailbox')}
Get-Mailbox -ResultSize unlimited -Filter {(RecipientTypeDetails -eq 'UserMailbox')}8) Csv formatındaki dosya içerisinde listelenen kullanıcıların tamamıyla ilgili işlem yapmak
a) Örnek 1
import.csv adlı bir dosyamızın içeriğini aşağıdaki şekilde belirliyoruz:
Name
ahmet.duru
murat.tasDaha sonra bu dosyayı foreach döngüsü içerisinde kullanıyoruz:
foreach ($person in (Import-Csv .\import.csv))
{
Set-Mailbox $person.Name -AcceptMessagesOnlyFrom {test.com.tr/Users/Administrator}
}
Böylece import.csv dosyasındaki kullanıcı hesaplarının "AcceptMessagesOnlyFrom" değişken değerini "Administrator" olarak değiştirdik. Artık bu kullanıcılar administrator dışında hiçbir yerden mail kabul etmeyecekler.
b) Örnek 2
import.csv adlı bir dosyamızın içeriğini aşağıdaki şekilde belirliyoruz:
Name,Address
abdullah.alioglu,abdullah.alioglu@tarim.gov.tr
ahmetakpinar,ahmetakpinar@tarim.gov.tr
ahmet.bulum,ahmet.bulum@tarim.gov.tr
Daha sonra bu dosyayı foreach döngüsü içerisinde kullanıyoruz:
abdullah.alioglu,abdullah.alioglu@tarim.gov.tr
ahmetakpinar,ahmetakpinar@tarim.gov.tr
ahmet.bulum,ahmet.bulum@tarim.gov.tr
Daha sonra bu dosyayı foreach döngüsü içerisinde kullanıyoruz:
foreach ($person in (Import-Csv .\import.csv))
{
Set-Mailbox $person.Name -ForwardingAddress $person.Address
}
Böylece dosyadaki mail adresleri için smtp yönlendirme işlemini gerçekleştiriyoruz. (Yönlendirmeyi iptal etmek için komut içerisindeki $person.Address ifadesi yerine $none konur.)
Get-Mailbox -ResultSize unlimited | Get-MailboxStatistics | Sort TotalItemSize -Descending
| ft Displayname,TotalItemSize,StorageLimitStatus | Export-CSV "C:\All Mailboxes.csv"
-NoTypeInformation
(Yukarıdaki komutta; Get-Mailbox -ResultSize unlimited komutuyla tüm mailbox hesaplarını listeliyoruz ve komutun çıktısını Get-MailboxStatistics komutuna girdi olarak veriyoruz. Oluşan çıktıyı ise "TotalItemSize" değişkenine göre sıralıyoruz.Son oluşan çıktıda Displayname,TotalItemSize,StorageLimitStatus değişkenlerini tablo formatında oluşturarak CSV formatında C:\All Mailboxes.csv dosyasına gönderiyoruz.)-NoTypeInformation
Çıktıyı html formatında almak istersek :
Get-Mailbox -ResultSize unlimited | Get-MailboxStatistics | Select Displayname,ItemCount,TotalItemSize,StorageLimitStatus | Sort TotalItemSize -Descending
| ConvertTo-HTML | Out-File C:\MailboxInfo.html
| ConvertTo-HTML | Out-File C:\MailboxInfo.html
10) Kullanıcı hesaplarının 1 dakika içerisinde gönderebileceği mail adedini 1 ile kısıtlamak
Önce politikayı oluşturuyoruz:
New-ThrottlingPolicy -Name MsgRateLimitTo1Policy -MessageRateLimit 1
Get-ThrottlingPolicy MsgRateLimitTo1Policy (mevcut durum)
Tekil bir hesapta işlem yapmak için:
Set-ThrottlingPolicyAssociation -Identity murat.tas -ThrottlingPolicy MsgRateLimitTo1Policy
Get-ThrottlingPolicyAssociation -Identity murat.tas (mevcut durum)
Tüm hesaplarda işlem yapmak için:
Get-Mailbox -ResultSize unlimited | Get-ThrottlingPolicyAssociation | ft Name,ThrottlingPolicyId (mevcut durum)
Get-Mailbox -ResultSize unlimited | Set-ThrottlingPolicyAssociation -ThrottlingPolicy MsgRateLimitTo1Policy
Not: Sistemdeki default throttling policy'nin MessageRateLimit değişkenini de 1 yapmak suretiyle sistemde var olan ve bundan sonra oluşturulacak olan tüm hesaplarda da kısıtlama yapabilirdik.Fakat yukardaki örneklerde farklı hesaplar için farklı politikalar oluşturabilmekteyiz.
Sistemde mevcut olan tüm throttling politikaları listelemek için:
Get-ThrottlingPolicy | Format-List Name
Name : DefaultThrottlingPolicy_8deab173-041f-4aaf-a115-7baf141ab11f
Name : MsgRateLimitTo1Policy
Name : SymantecEWSRestoreThrottlingPolicy
Name : MsgRateLimitTo10Policy
11) Kullanıcı mailbox'larının klasör büyüklüklerini görmek
Tekil kullanıcıda görmek için:
Get-MailboxFolderStatistics murat.tas | ft identity,ItemsInFolder,FolderSize -autosize (ÖZET)
Get-MailboxFolderStatistics -Identity murat.tas -FolderScope Inbox
Get-MailboxFolderStatistics -Identity murat.tas -FolderScope DeletedItems
Tüm kullanıcılarda sadece "deleted items" klasör boyutlarını listelemek için:
Get-Mailbox -ResultSize unlimited | Get-MailboxFolderStatistics -FolderScope DeletedItems
| Sort FolderAndSubfolderSize -Descending
| ft Identity,FolderAndSubfolderSize,ItemsInFolder -Autosize
(Yukarıdaki komut çıktısında, -autosize parametresi sayesinde kolon değerleri daha okunaklı olacaktır)
Tekil kullanıcıda "revoverable items" klasörlerini listelemek için:
Kullanıcı Deleted items (silinmiş öğeler) klasöründeki maili silerse bu mail "Recoverable Items " altındaki "Deletions" klasörüne yazılır. Bu mailler "RetainDeletedItemsFor" değişkeninde
(get-mailbox) belirtilen süre boyunca sistemde saklanır. Admin tarafından ilgili mail restore edilebilir.
Get-MailboxFolderStatistics -Identity murat.tas -folderscope
RecoverableItems | ft FolderPath,ItemsInFolder,FolderSize -autosize
FolderPath ItemsInFolder FolderSize
---------- ------------- ----------
/Recoverable Items 1 4.839 KB (4,955 bytes)
/Deletions 10 59.75 KB (61,188 bytes)
/Purges 0 0 B (0 bytes)
/Versions 0 0 B (0 bytes)
Get-MailboxStatistics murat.tas | fl DeletedItemCount
DeletedItemCount : 10
Silinmiş öğelerde kaç adet mail olduğunu görmek için:
Get-MailboxFolderStatistics -Identity murat.tas -folderscope
DeletedItems | ft FolderPath,ItemsInFolder,FolderSize -autosize
FolderPath ItemsInFolder FolderSize
---------- ------------- ----------
/Silinmis Ögeler 2 282 B (282 bytes)
Recoverable Item'ları silmek için:
Öncelikle powershell komutunu çalıştıracak olan kullanıcımızı (administrator) "Discovery Management" ve "Exchange Organization Administrators" gruplarına üye yapıyoruz.
Aşağıdaki komutu işletiyoruz:
New-ManagementRoleAssignment –Role "Mailbox Import Export" –user "administrator"
New-ManagementRoleAssignment –Role "Mailbox Search" –user "administrator"
Artık aşağıdaki komutu administrator kullanıcısı yetkileriyle çalıştırabiliriz:
Search-Mailbox “deneme” -SearchDumpsterOnly –DeleteContent
Search-Mailbox “deneme” -SearchDumpsterOnly –DeleteContent
get-mailbox -resultsize unlimited
| ft name,ProhibitSendQuota,ProhibitSendReceiveQuota
Name ProhibitSendQuota ProhibitSendReceiveQuota
---- ----------------- -----------------
A 3.3 GB 3.4 GB
B 3.3 GB 3.4 GB
içinde "quota" geçen tüm değişkenleri listelemek daha mantıklı olabilir:
get-mailbox ahmet.mehmet | fl *quota*
ProhibitSendQuota : 3.4 GB (3,650,722,816 bytes)
ProhibitSendReceiveQuota : 3.5 GB (3,758,096,384 bytes)
RecoverableItemsQuota : 500 MB (524,288,000 bytes)
RecoverableItemsWarningQuota : 400 MB (419,430,400 bytes)
UseDatabaseQuotaDefaults : True
IssueWarningQuota : 3.3 GB (3,543,348,224 bytes)
RulesQuota : 64 KB (65,536 bytes)
ArchiveQuota : unlimited
ArchiveWarningQuota : unlimited
13) Kullanıcı mailboxları içindeki maili/mailleri silmek
Öncelikle powershell komutunu çalıştıracak olan kullanıcımızı (administrator) "Discovery Management" ve "Exchange Organization Administrators" gruplarına üye yapıyoruz.
Aşağıdaki komutu işletiyoruz:
New-ManagementRoleAssignment –Role "Mailbox Import Export" –user "administrator"
New-ManagementRoleAssignment –Role "Mailbox Search" –user "administrator"
a) Tüm mailleri silmek:
Search-Mailbox -Identity "ahmet.mehmet" -DeleteContent -force
b) İçeriğe göre (konu veya gövdede) göre arama yapıp ilgili maili silmek
Bulunan mailleri incelemek üzere mailincele@deneme.com.tr adında kendi organizasyonumuz altında bir mail hesabı oluşturuyoruz.
Konu veya gövdede "abuzittin" ifadesini aratmak:
Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'abuzittin'
-TargetMailbox "mailincele@deneme.com.tr"-TargetFolder
Konu veya gövdede "abuzittin" ifadesini aratmak ve silmek:
Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'abuzittin'
-TargetMailbox "mailincele@deneme.com.tr"-TargetFolder Inbox -LogLevel Full -Force
-DeleteContent | fl DisplayName,ResultItemsCount > C:\mailkimdevar.txt
Not: Komutlar "administrator" kullanıcısı ile çalıştırılmalıdır.
mailincele@deneme.com.tr hesabına girdiğimizde (Inbox klasörüne girelim), 2 adet mailde söz konusu "abuzittin" ifadesi geçtiğini görmekteyiz:
Herhangi bir mailbox objesini sildiğimizde (Remove) veya inaktif yaptığımızda (disable) disconnected mailbox pozisyonuna düşer ve "Recipient Configuration --> Disconnected Mailbox" altında listelenir. Bu mailbox, varsayılan olarak 30 gün süreyle sistemde saklanır ve daha sonra otomatik silinir. Herhangi bir nedenle bu mailbox'ları hemen silmek istediğimizde aşağıdaki işlemleri yapmalıyız:
a) Önce silinecek mailbox guid no'lar listelenir.
Get-MailboxStatistics -Database "Mailbox Database 1070557743" | Where-Object {$_.DisconnectDate -Notlike $NULL} | FL DisplayName, DisconnectDate, MailboxGuid
b)Daha sonra ise aşağıdaki komutta "mailboxGuid" yazan yere 1. adımda öğrenmiş olduğumuz guid no yazılarak komut çalıştırılır ve silme işlemi tamamlanır:
Remove-Mailbox -Database "Mailbox Database 1070557743" -StoreMailboxIdentity MailboxGuid
Not: Database'ler arasında taşınmış olan mailbox'lar kaynak database üzerinde "soft delete" olarak silinirler. Soft delete pozisyonundaki bu mailboxları da yukarıdaki komutlar vasıtasıyla listeleyip silebiliriz.
15) İçinde belirli bir ifade bulunan tüm değişken değerlerini listelemek
Bu örneğimizde içinde "Time" ifadesi geçen tüm değişkenlerin değerlerini listeleyeceğiz:
Get-MailboxStatistics ahmet.mehmet | fl *Time*
LastLogoffTime : 11/28/2018 1:36:17 PM
LastLogonTime : 11/28/2018 1:34:38 PM
16) Exchange sistemimizin düzgün çalışıp çalışmadığının kontrolü:
Önce aşağıdaki komutla içinde "Test" geçen komutları listeleyelim:
Get-Command -name *test*
# Test-MailFlow
# Test-OutlookWebServices
# Test-ServiceHealth
# Test-SystemHealth (Bu komut biraz uzun sürmekte)
...
Get-Queue (Bu komutun çıktısında 100'den fazla "MessageCount" görmemeliyiz.
Yukarıdaki komutları çalıştırdığımızda hata almıyorsak sistem düzgün çalışmaktadır diyebiliriz.
17) Belirli bir Dağıtım grubu (distribution group) üyelerine ait değişken değerini değiştirmek:
Get-DistributionGroupMember “bilisim” | Set-Mailbox –prohibitSendRecieveQuota 2GB
18) Kullanıcı/kullanıcılar hangi telefonlarla active-sync üzerinden bağlanmışlar
Tekil kullanıcı:
Get-ActiveSyncDeviceStatistics -Mailbox ahmet
| ft LastSuccessSync,DeviceFriendlyName,DeviceUserAgent,DeviceOS -autosize
LastSuccessSync DeviceFriendlyName DeviceUserAgent
--------------- ------------------ ---------------
10/18/2017 4:38:26 PM Siyah iPhone 4S Apple-iPhone4C1/1307.36
Toplu kullanıcı listesi:
Get-ActiveSyncDevice | Get-ActiveSyncDeviceStatistics
|ft FirstSyncTime,LastSuccessSync,DeviceType,DeviceFriendlyName,DeviceUserAgent,
DeviceOS,Identity -autosize | Out-String -Width 4096| Out-File -FilePath C:\ActiveSyncDeviceInfo.csv
Not: Yukarıdaki komutun çıktısı; "Identity" parametresinden dolayı display içerisine sığmadığından ve çıktı dosyası düzgün olmadığından Out-String -Width 4096 koyarak çıktının düzgün olmasını sağladık..
19) Exchange database data ve log dosyası nerede?
Get-MailboxDatabase -Status | fl EdbFilePath,LogFolderPath
EdbFilePath : D:\xxxx\MailboxDatabase_1.edb
LogFolderPath : E:\xxx\MailboxDatabase_1\LogFolder
20)Exchange database ve log dosyalarını yerini değiştirmek
Move-DatabasePath -Identity Database-Name -EdbFilePath X:\Folder\Database\Database-Name.edb
Move-DatabasePath -Identity Database-Name -LogFolderPath X:\Folder\Log-Folder\
Tekil Kullanıcı mailbox taşımak:
New-MoveRequest -Identity "ahmet" -TargetDatabase “Destination-DB”
-BatchName "ahmet"-BadItemLimit “200” -AcceptLargeDataLoss
İlgili DB'deki tüm kullanıcıları taşımak:
Get-Mailbox -Database “Source-DB” ” -ResultSize Unlimited | New-MoveRequest -TargetDatabase “Destination-DB”
22) Hangi DB'de kaçar tane mailbox var?
Get-Mailbox | Group-Object -Property:Database | Select-Object Name,Count | Sort-Object Name | Format-Table -Auto
Not: "Group-Object -Property:Database" komutu sayesinde mailbox hesaplarını Database değişken değerine göre gruplayarak listelemiş oluyoruz
23) Bir mail hesabı / dağıtım grubu adına birden fazla kişiye mail gönderebilme (send on behalf) yetkisi vermek
Bilisim@test.com.tr adlı hesabımıza user1@test.com.tr ve user2@test.com.tr hesabı kullanıcıları için mail gönderme yetkisi vermek istediğimizi düşünelim:
bilisim@test.com.tr bir mailbox hesabı ise:
Set-Mailbox “bilisim” -GrantSendOnBehalfTo @{add=”User1“,”User2“}
bilisim@test.com.tr bir distribution group (dağıtım grubu) ise (ki mantıklı olan da budur):
Set-DistributionGroup "bilisim" -GrantSendOnBehalfTo @{add=”User1“,”User2“}
Grubun tüm üyelerine otomatik olarak gönderme yetkisi vermek için:
Set-DistributionGroup "bilisim" -GrantSendOnBehalfTo "bilisim"
Kimlerin yetkisi var görmek istersek:
Get-DistributionGroup "bilisim" | fl name,grant*
Name : bilisim
GrantSendOnBehalfTo : {test.com.tr/Bilisim_Grubu/bilisim}
Yetkiyi sıfırlamak için:
Set-DistributionGroup "bilisim" -GrantSendOnBehalfTo "murat.tas"
(Böylece artık sadece "murat.tas" kullanıcısının send on behalf yetkisi var. Eski ayar sıfırlandı)
Send on behalf yetkisi sayesinde, yetki verilen kişiler Outlook açtıklarında "From" kısmında "bilisim@test.com.tr" seçilebilecektir.
24) Komut çıktısını "Split" ve "Replace" komutu kullanarak düzenlemek:
Örnek-1:
Aşağıdaki komut sonucunda elde ettiğimiz listede, "PrimarySmtpAddress" değişken değerleri içerisinde @ işaretinden önceki bölümün listesine ihtiyacımız olduğunu düşünelim. Aşağıdaki komut ile listenin tamamını alabiliyoruz:
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Where-Object {$_.RecipientLimits -eq 0}
| select PrimarySmtpAddress
PrimarySmtpAddress
------------------
test1@test.com.tr
test2@test.com.tr
Komutun sonuna split eklediğimizde ise aşağıdaki sonucu elde edebiliriz:
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Where-Object {$_.RecipientLimits -eq 0}
| select PrimarySmtpAddress | %{($_.PrimarySmtpAddress -split "@")[0] }
test1
test2
Örnek 2:
Split komutunu arka arkaya iki kez kullanarak istediğimiz sonucu elde etmeye çalışacağız:
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Where-Object {$_.RecipientLimits -eq 0} | select DistinGuishedName
DistinguishedName
-----------------
CN=test1,OU=Users,OU=04_Bilgi_Islem,DC=tes,DC=com,DC=tr
CN=test2,OU=04_Bilgi_Islem,DC=test,DC=com,DC=tr
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Where-Object {$_.RecipientLimits -eq 0} | select DistinGuishedName
| %{($_.DistinguishedName -split "=")[1] } | %{($_ -split ",")[0] }
test1
test2
Alternatif yazılış: %{($_.DistinguishedName.split("="))[1].Split(",")[0] }
"test" ifadesini silmek istersek "replace" komutunu kullanmalıyız:
Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem | Where-Object {$_.RecipientLimits -eq 0} | select DistinguishedName,PrimarySmtpAddress
| %{($_.DistinguishedName.split(","))[0].Split("=")[1].Replace("test","") }
1
2
Örnek 3:
Örnek 2'de, tek değişkene (DistinguishedName) göre split işlemini gerçekleştirdik. İki farklı değişken değerini split ile düzenleyerek sonucu çıktı şeklinde almak isteseydik:
Komut çıktılarını düzenleyerek değişkenlere array oluşturarak atıyoruz:
$a = Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem
| Where-Object {$_.RecipientLimits -eq 0} | select PrimarySmtpAddress
| %{($_.PrimarySmtpAddress -split "@")[0] }
$b = Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem
| Where-Object {$_.RecipientLimits -eq 0} | select Guid
| %{($_.Guid -split "-")[0] }
Daha sonra her değişkenin satır satır çıktısını almak için "for" döngüsü kullanarak array değerlerini ekrana yazdırıyoruz:
for($i =0; $i -lt $a.Length ; $i++) { write-host $a[$i] "," $b[$i] }
test1 , c0117729
test2 , 374147b2
Böylece; mesela PrimarySmtpAddress değişken değerinin ("test1@test.com.tr") "test" bölümünü, Guid değişken değerinin ("c0117729-0e69-417e-89e5-3329c68bf343") ise ilk tire (-) işaretinden önceki bölümü olan "c0117729" bölümünü toplamış oluyoruz.
25) Sunucu üzerinde Mailbox içeriğini pst dosyaya export etmek:
a) Öncelikle Management Shell uygulamasını çalıştıracak olan kullanıcıya uygun yetkiler verilir.Bu işlemin bir kez gerçekleştirilmesi yeterlidir:
New-ManagementRoleAssignment –Role "Mailbox Import Export" –User Administrator
b) Sunucuda uygun genişliğe sahip bir disk üzerinde "PST" adlı bir klasör açılır ve klasöre "Exchange Trusted Subsystem" grubu için okuma,yazma hakki verilir. Bu klasör ayrıca network üzerinden paylaşıma açılır.
c) Aşağıdaki komut çalıştırılır:
New-MailboxExportRequest -Mailbox ad.soyad
-FilePath "\\Sunucu_IP_Adresi\pst\AdSoyad.pst"
d) Mailbox export durumu aşağıdaki komutla kontrol edilir. İşlem tamamlandığında status "Completed" konuma geçecektir.
Get-MailboxExportRequest
e) "Completed" yani tamamlanan görevleri hafızadan silmek için aşağıdaki komut çalıştırılır:
Get-MailboxExportRequest | where {$_.status -eq "Completed"}
| Remove-MailboxExportRequest
Umarım faydalı olmuştur
Murat TAŞ
Hiç yorum yok:
Yorum Gönder