Вопрос: Команды Exchange Server Powershell?


  1. Мне было интересно, знает ли кто-нибудь команду PowerShell для Exchange 2010, в которой перечислены почтовые ящики и / или пользователи, к которым у определенного почтового ящика нет доступа.
    У нас есть системная учетная запись, поэтому нам необходимо предоставить полный доступ к большинству (но не ко всем) почтовым ящикам пользователей. Мы хотели бы каждый месяц запускать команду, которая сообщит нам, какие пользователи этой учетной записи не имеют полных прав, поэтому мы можем исправить это при необходимости и экспортировать в csv.

  2. Мне нужна команда, в которой перечислены пользователи и у кого есть полные разрешения для каждого. Я нашел это, но результаты, которые он возвращает, не кажутся абсолютно точными (когда я сравниваю csv с EMC, некоторые учетные записи в EMC покажут, что 3 других пользователя имеют доступ к своему почтовому ящику, но CSV сообщает только 1 пользователь).

    Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF” -and $_.IsInherited -eq $false} | Select Identity,User,@{Name=’Access Rights’;Expression={[string]::join(‘, ‘, $_.AccessRights)}} | Export-Csv -NoTypeInformation mailboxpermissions.csv
    

5
2017-08-16 16:14


Источник




Ответы:


# 1 - Написал это сам (пересмотренный). Это не простой однострочный слой, поскольку он оценивает значение каждой записи разрешения на каждом почтовом ящике в нескольких вложенных циклах. К сожалению, я не мог найти способ упростить это дальнейшее (вероятно, из-за отсутствия опыта в powershell). Он в основном получает все почтовые ящики и сохраняет их в переменной, затем получает разрешения на каждый почтовый ящик, оценивая каждую запись разрешения для определенных критериев (системный пользователь с записью FullAccess в почтовом ящике). Если эти критерии удовлетворяются в любой из записей разрешения, он устанавливает переменную $ access в значение «True». После того, как он прошел все записи разрешений в почтовом ящике, он взглянет на переменную $ access и, если она по-прежнему False, добавляет почтовый ящик в файл csv (на самом деле это не csv, хотя, поскольку в строке имеется только 1 запись на строку файл).

Import-Module C:\Temp\Exchange.psm1
$csv = "C:\Temp\systemuser.csv"
$user = "<system user>"
$mailboxes = Get-Mailbox *
ForEach ($mailbox in $mailboxes) {
    $access = "False"
    $perms = $mailbox | Get-MailboxPermission
    ForEach ($item in $perms) {
        if ($item.User -like $user -and $item.AccessRights -like "*FullAccess*") {
        $access = "True"        
        }
    }
    if ($access -eq "False") {
        ac $csv "$($mailbox)"
    }
}

# 2 - Написал большинство из них сам, но пытался получить свойство AccessRights для строки, чтобы он экспортировал в csv, поэтому я googled и нашел ту же статью вы нашли со сценарием в своем вопросе, и он отлично работает. Я думаю, что расхождение между тем, что говорит csv, и тем, что говорит EMC, заключается в том, что сценарий в статье фильтрует унаследованные разрешения. Я изменил его ниже, чтобы не отфильтровывать унаследованные разрешения и не включать свойство IsInherited в вывод, чтобы вы могли определить, является ли оно явным или нет.

Get-MailboxPermission * | ? {$_.user -notlike "NT AUTHORITY\SELF"} | Select Identity ,User,@{Name='Access Rights';Expression={[string]::join(', ', $_.AccessRights)}},IsInherited | Export-csv -NoTypeInformation c:\temp\mailboxpermissions.csv


2
2017-08-16 20:03



# 1 вернули некоторые учетные записи, к которым имеет доступ полный доступ к учетной записи системы DID. - user111503
вы правы, я думаю, что это только фильтрация строки, которая показывает разрешение на почтовый ящик, но все же отображает почтовый ящик, потому что есть другие строки для других учетных записей / групп. Я отредактирую, когда я получу шанс - August


Я тестировал команду в своих системах, и она работает так, как вы надеетесь.

Хотя, если вы сравниваете только то, что видите в EMC, вы можете ожидать неправильного результата. Команда настроена для отображения только прав, не связанных с наследством. EMC покажет вам как Inherited, так и Non-Inherited (без указания того, что именно). Что вы можете сделать, выполняется только эта часть кода в Powershell:

Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF” -and $_.IsInherited -eq $false}

И сравните это с полученным CSV.

В качестве альтернативы вы можете запустить это:

Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF”}

Что покажет вам как Inherited, так и Non-Inherited права через Powershell, а затем сравните это с результатом CSV.


3
2017-08-16 19:39