如何获取具有以发送身份权限的 AD 安全组的所有邮箱

如何获取具有以发送身份权限的 AD 安全组的所有邮箱

我需要帮助找到一个 powershell 命令来查找所有具有分配了“SendAs”权限的 AD 安全组的共享邮箱;到一个文本文件。

我目前拥有的脚本是:

$ExchangeSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://MY-EXCHANGE BOX/PowerShell/" -Authentication Kerberos
Import-PSSession $ExchangeSession 
$WFMGroups = $GroupSAMs = %{Get-Mailbox $_ | select -ExpandProperty dist* | %{Get-ADPermission $_ | 
    ?{$_.extendedrights -like '*Send-As*'} | select -ExpandProperty User | %{$_.tostring().replace("DOMAIN\","")}} | 
    %{get-adobject -filter{samaccountname -eq $_}} | ?{$_.ObjectClass -eq "group"}} | select -ExpandProperty name
foreach ($WFMGroup in $WFMGroups)
{
    $WFMGroup.GroupScope = "Universal"
    Set-DistributionGroup -Identity $WFMGroup -Alias $WFMGroup
    Set-DistributionGroup -Identity "$WFMGroup" -EmailAddressPolicyEnabled "$false" -DisplayName "$WFMGroup" -PrimarySmtpAddress "[email protected]" -HiddenFromAddressListsEnabled:$true -ManagedBy "AD-OBJECT"
}

答案1

无法访问 ActiveDirectory 模块 (正如您在其他论坛的帖子中提到的那样), 要实现您的目标,您需要使用 Exchange 命令行管理程序(或其隐式远程处理等效项)中提供的工具来执行此操作。

具体来说,将脚本的这一行替换为:

%{get-adobject -filter{samaccountname -eq $_}} | ?{$_.ObjectClass -eq "group"}} | select -ExpandProperty name

使用这一行(注意别名扩展):

ForEach-Object {Get-Recipient $_} | Where-Object {$_.RecipientType -like "*Group"}

使用前请彻底测试。


另外我强烈建议反对以这种方式以编程方式更新组范围 - 其他设置可能没问题。更改如此多范围的组范围的问题是,您不可避免地会遇到将全局组的范围更改为通用组的情况,但由于它是另一个全局组的成员(不能将通用组作为成员)而失败。

相关内容