Напоследък все повече затъвам в Microsoft среда и се налага да се оправям със всякакви казуси в нея. Последно се наложи да намеря лесен начин да се даде достъп на група потребители в Exchange до дърво от папки в мейлбокс. Проблема е, когато имате добре развита структура от папки и подпапки в един мейлбокс - абсурдно е да цъкате на всяка една папка и да давате достъп до нея потребител по потребител. Майкрософт са проявили здрав разум и са имплементирали Exchange Management Shell - среда, в която можете да автоматизирате със скрипт такива задачки (и която поразително наподобява bash, дори заимства негови функции и команди - защо ли?).
И така, имате си един мейлбокс с подобна струкутра в него:
\RootFolder \SubFolder1.0 \SubFolder1.1 \SubFolder1.1.1 \SubFolder1.2 \SubFolder2.0
Като дълбочината и разклонеността на дървото е без значение. Задачата е да дадем достъп на група потребители до всички папки под RootFolder (или под SubFolder1.0, или под SubFolder1.1 - принципа е същия). След кратко ровене из Нета от няколко парчета код се получи следния скрипт:
$mbox="Shared.Mailbox"
$usrs=( "User.Name1", "User.Name2", "User.NameN")
ForEach($fldr in (Get-MailboxFolderStatistics $mbox | Where { $_.FolderPath.Contains("RootFolder") -eq $true })) {
$fldrname = $mbox + ":" + $fldr.FolderPath.Replace("/","\");
#Remove existing permissions
ForEach($itm in (Get-MailboxFolderPermission $fldrname | select User,AccessRights)) {
if (($itm.User -notlike "Default") -and ($itm.User -notlike "Anonymous")) {
Remove-MailboxFolderPermission $fldrname -User $itm.User -confirm: $false
}
}
#Add new permissions
ForEach ($usr in $usrs){
Add-MailboxFolderPermission $fldrname -User $usr -AccessRights NonEditingAuthor
}
}
Некои съображения... Понеже използвам Add-MailboxFolderPermission, а той не променя вече съществуващи права за достъп на потребител, а само добавя нови такива, се налага първо да изчистя всички права за достъп до папката - защото ако се опитам да дам достъп на потребител, който вече има достъп до папката, то Add-MailboxFodlerermission ще се възмути и ще изплюе грешка... Което не е фатално, скрипта ще продължи нататък със следващия потребител от списъка usrs, но ще изглежда грозно на екрана хехехе. Пък и в конкретния случай, за който ми трябваше, този подход ме устройва, защото освен да се даде достъп до папките на някои потребители, се налага и да се премахне достъпа до тях на други потребители - та с един куршум отстрелях два заека (кажете после, че не ме мързи). Ще ви подскажа обаче, че за промяна на права за достъп се използва Set-MailboxFolderPermission - ако ви трябва друг подход, оправяйте се :) За параметрите на Add-MailboxFolderPermission и компания питайте Гугъл и Майкрософт.