Назад | Перейти на главную страницу

Команды Exchange 2010 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
    

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

Хотя, если вы сравниваете только с тем, что видите в EMC, вы можете ожидать неправильного результата. Команда настроена так, чтобы отображать только ненаследуемые права. EMC покажет вам как унаследованные, так и ненаследуемые (без указания того, что есть что). Что вы можете сделать, это запустить только эту часть кода в 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”}

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

# 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, поэтому я погуглил и нашел ту же статью вы нашли сценарий в своем вопросе, и он отлично работает. Я думаю, что несоответствие между тем, что говорит 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