Eu criei este script quando nos deparamos com o mesmo problema. Talvez não seja a coisa mais bonita do mundo, mas faz o trabalho. Eu tenho um OU
separado para os grupos de acesso e outro para as caixas de correio de recursos. Os grupos e caixas de correio de recursos usam o mesmo nome, exceto por um A-
na frente do grupo.
por exemplo. A-RESMBX1
para o nome do grupo e REXMBX1
para a caixa de correio do recurso.
O script enumera os grupos nos grupos OU
e, em seguida, as caixas de correio de recursos nesse OU
. Em seguida, ele percorre cada grupo e localiza a caixa de correio de recursos correspondente. Quando uma correspondência é encontrada, ele enumera os usuários dos grupos e os adiciona ao atributo msExchDelegateListLink
da Caixa de Correio de Recursos.
Ele também removerá usuários do atributo msExchDelegateListLink
que não são mais membros do grupo de acesso associado. Eu tenho isso em execução em uma tarefa agendada em um DC.
Nossa necessidade foi devido à alta rotatividade de estagiários que precisavam ter acesso a um grande número de caixas de correio de recursos.
Você precisaria atualizar os caminhos LDAP para as OUs por $Groups
& $ResMBXs
, bem como o seu nome DC para $DomainController
Import-Module ActiveDirectory
$DomainController = "MYDOMAINCONTROLLER"
$Groups = Get-ADGroup -Filter * -SearchBase 'OU=Groups,OU=Resource Mailboxes,DC=mydomain,DC=com' -Server $DomainController | Sort-Object Name
$ResMBXs = Get-ADUser -Filter * -SearchBase 'OU=Resource Mailboxes,DC=mydomain,DC=com' -Server $DomainController -properties msExchDelegateListLink | Sort-Object Name
Write-Host "Enumerating Groups and Resource Mailboxes..."
Write-Host ""
# IsMember function is borrowed from : http://gallery.technet.microsoft.com/scriptcenter/5adf9ad0-1abf-4557-85cd-657da1cc7df4
# Hash table of security principals and their security group memberships.
$GroupList = @{}
Function IsMember ($ADObject, $GroupName)
{
# Function to check if $ADObject is a member of security group $GroupName.
# Check if security group memberships for this principal have been determined.
If ($GroupList.ContainsKey($ADObject.sAMAccountName.ToString() + "\") -eq $False)
{
# Memberships need to be determined for this principal. Add "pre-Windows 2000"
# name to the hash table.
$GroupList.Add($ADObject.sAMAccountName.ToString() + "\", $True)
# Retrieve tokenGroups attribute of principal, which is operational.
$ADObject.psbase.RefreshCache("tokenGroups")
$SIDs = $ADObject.psbase.Properties.Item("tokenGroups")
# Populate hash table with security group memberships.
ForEach ($Value In $SIDs)
{
$SID = New-Object System.Security.Principal.SecurityIdentifier $Value, 0
# Translate into "pre-Windows 2000" name.
$Group = $SID.Translate([System.Security.Principal.NTAccount])
$GroupList.Add($ADObject.sAMAccountName.ToString() + "\" + $Group.Value.Split("\")[1], $True)
}
}
# Check if $ADObject is a member of $GroupName.
If ($GroupList.ContainsKey($ADObject.sAMAccountName.ToString() + "\" + $GroupName))
{
Return $True
}
Else
{
Return $False
}
}
Foreach ($gr in $Groups) {
Foreach ($mbx in $ResMBXs) {
$MBXName = "A-" + $mbx.Name
$LDAPUser=[ADSI]"LDAP://$($DomainController)/$($mbx.distinguishedName)"
if ($gr.Name -eq $MBXName)
{
#Build an Array of DNs from each Group
$Members = Get-ADGroupMember $gr -Server $DomainController
if ($Members -ne $Null)
{
Foreach ($mbr in $Members){
if($mbr.distinguishedName -ne $Null)
{
$LDAPUser.msExchDelegateListLink.Add($mbr.distinguishedName)
$LDAPUser.SetInfo()
}
$AddedUsers += $mbr.Name
}
}
Else {Write-Host -foregroundcolor darkyellow "Group contains no members..."; Write-Host ""}
if($mbx.msExchDelegateListLink -ne $Null) {
$ACLUsers = $mbx.msExchDelegateListLink
Foreach ($ACLUser in $ACLUsers)
{
#Check if user is a member of the current group
#If not, remove from attribute
$user = [ADSI]"LDAP://$($DomainController)/$($ACLUser)"
$userDN = Get-ADUser $ACLUser -Server $DomainController
$mem = IsMember $user $gr.Name
If ($mem -eq $False)
{
$LDAPUser.msExchDelegateListLink.Remove($userDN.distinguishedName)
$LDAPUser.SetInfo()
Write-Host "The Following User was removed from: " -nonewline; Write-Host -foregroundcolor yellow $mbx.Name
Write-Host -nonewline -foregroundcolor darkyellow " " $UserDN.Name
Write-Host ""
}
}
}
$Members = ""
Write-Host "The Following Users were added to: " -nonewline; Write-Host -foregroundcolor yellow $mbx.Name
Write-Host ""
Write-Host -foregroundcolor darkyellow $AddedUsers
Write-Host ""
$AddedUsers = ""
}
}
}