Bu Blogda Ara

MS Exchange - Temel Powershell İşlemleri

Belirli sayıda obje (item) veya obje grubu üzerinde toplu olarak işlem yapabilmek için gui yerine power shell üzerinden işlem yapmak daha kolay olacaktır.

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

Get-Mailbox -OrganizationalUnit 04_Bilgi_Islem
| 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

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.
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.tas

Daha 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:

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.)

9) Kullanıcı hesaplarının mailbox kota kullanımı durumlarını listelemek:

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.)

Çı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 


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
| 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:
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)

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
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

12) Kullanıcıların kota ayarlarını listelemek:

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:



14) "Disconnected" veya "soft deleted" mailbox'ları hemen silmek

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\

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


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