我需要知道除用户显示名称本身以外的多个人当前访问哪个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
如果有人知道更好的脚本或可以解决上述问题,我将不胜感激。
谢谢。
虽然使用-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}}
您可以尝试以下代码列出具有完全访问权限委托权限的Exchange邮箱:
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