PowerShell для отображения почтового ящика Exchange с разрешением на полный доступ более 1 человека? - PullRequest
0 голосов
/ 03 сентября 2018

Мне нужно знать, к какому почтовому ящику пользователя Exchange в настоящее время обращается более одного человека, кроме самого отображаемого имени пользователя?

Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission | Where-Object { ($_.AccessRights -eq "FullAccess") -and ($_.IsInherited -eq $false) -and -not ($_.User -like "NT AUTHORITY\SELF") -and -not ($_.User -like '*Discovery Management*') } |
   Select @{Name="User Name";expression={(Get-Recipient $_.user.tostring()).displayname}}, Identity,AccessRights,PrimarySMTPAddress | Export-Csv C:\Results.csv -NoTypeInformation

Если кто-нибудь знает лучший сценарий или может исправить вышеперечисленное, это будет с благодарностью.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вы можете использовать приведенный ниже код для отображения почтового ящика обмена, который имеет разрешение на полный доступ:

Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission | Where-Object { ($_.AccessRights -like "*FullAccess*") -and (-not $_.IsInherited) -and ($_.User -ne "NT AUTHORITY\SELF") -and ($_.User -notlike '*Discovery Management*') } |
Select @{Name="User Name";expression={(Get-Recipient $_.user.tostring()).displayname}}, Identity,AccessRights,PrimarySMTPAddress | Export-Csv C:\Results.csv -NoTypeInformation
0 голосов
/ 03 сентября 2018

Хотя использование -and -not является правильным, я бы не сказал, что это не самый элегантный подход, поскольку существуют операторы, противоположные -like и -eq (которые были предложены @ Paxz в настоящее время удаленные комментарии). Ваш оператор where может быть изменен на что-то вроде:

 Where-Object { ($_.AccessRights -like "*FullAccess*") -and (-not $_.IsInherited) -and ($_.User -ne "NT AUTHORITY\SELF") -and ($_.User -notlike '*Discovery Management*') }

Изменения, которые я сделал:

# from
($_.AccessRights -eq "FullAccess")
# to 
($_.AccessRights -like "*FullAccess*")

чтобы включить ситуацию, когда у пользователя есть одна или несколько записей доступа в AccessRight (хотя я не уверен, нужна ли она в реальной жизни). Ваш код будет фильтровать {FullAccess, ReadPermission}, так как он не равен FullAccess.

# from
($_.IsInherited -eq $false) 
# to 
(-not $_.IsInherited)

Почему? Более элегантно. IsInherited - это логическое значение, которое вы можете напрямую использовать -not.

# from
-and -not ($_.User -like "NT AUTHORITY\SELF")
# to
-and ($_.User -ne "NT AUTHORITY\SELF")

Почему? like / notlike здесь не требуется, вы можете использовать -ne напрямую.

# from 
-and -not ($_.User -like '*Discovery Management*')
# to
-and ($_.User -notlike '*Discovery Management*')

аналогично приведенному выше, но я не уверен, какие значения здесь возможны, поэтому я не изменился на -ne.


Кроме того, в вашем Select-Object вы используете PrimarySMTPAddress, который не будет работать, поскольку запись разрешения не имеет такого параметра. Вам придется использовать тот же подход, который вы использовали для User Name (также я не думаю, что в этом случае необходимо .ToString()):

@{Name="PrimarySMTPAddress";expression={(Get-Recipient $_.user).PrimarySMTPAddress}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...