Link to home
Start Free TrialLog in
Avatar of Carl Billington
Carl BillingtonFlag for Australia

asked on

Exchange 2010, Powershell: Exclude members of a distribution group from working Quota script

I would like to amend the script below to exclude from the quota script, members of a distribution group: "Mailbox Quota Policy Exclusion" not individual users.

$AllMailboxes = Get-Mailbox -resultsize unlimited | Get-MailboxStatistics | where {($_.Displayname -like "*carl*") -or ($_.Displayname -like "*anna*") -or ($_.Displayname -like "*robert*")}
foreach($Mailbox in $AllMailboxes){
$SizeMB = $Mailbox.TotalItemSize.Value.ToMB()
if(($SizeMB -lt 512) -and ($SizeMB -gt 256)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 1048) -and ($SizeMB -gt 512)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 512MB -ProhibitSendQuota 1024MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 2048) -and ($SizeMB -gt 1024)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 950MB -ProhibitSendQuota 2048MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 3072) -and ($SizeMB -gt 2048)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 1024MB -ProhibitSendQuota 3072MB -ProhibitSendReceiveQuota 3072MB}
if(($SizeMB -lt 4096) -and ($SizeMB -gt 3072)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 2048MB -ProhibitSendQuota 4096MB -ProhibitSendReceiveQuota 4096MB}
}  

Open in new window


Thank you
Avatar of SubSun
SubSun
Flag of India image

You can add a -filter to Get-Mailbox exclude the group members. You can also use where to filter the output but it will be slower than Get-Mailbox -filter.

Sample code..
$AllMailboxes = Get-Mailbox -Filter {MemberofGroup -ne "CN=Mailbox Quota Policy Exclusion,OU=Group,DC=Test,DC=Com"} -resultsize unlimited | 
Get-MailboxStatistics | where {($_.Displayname -like "*carl*") -or ($_.Displayname -like "*anna*") -or ($_.Displayname -like "*robert*")}
foreach($Mailbox in $AllMailboxes){
$SizeMB = $Mailbox.TotalItemSize.Value.ToMB()
if(($SizeMB -lt 512) -and ($SizeMB -gt 256)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 1048) -and ($SizeMB -gt 512)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 512MB -ProhibitSendQuota 1024MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 2048) -and ($SizeMB -gt 1024)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 950MB -ProhibitSendQuota 2048MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 3072) -and ($SizeMB -gt 2048)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 1024MB -ProhibitSendQuota 3072MB -ProhibitSendReceiveQuota 3072MB}
if(($SizeMB -lt 4096) -and ($SizeMB -gt 3072)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 2048MB -ProhibitSendQuota 4096MB -ProhibitSendReceiveQuota 4096MB}
}

Open in new window

[String]$ExclusionGroupDN = (Get-DistributionGroup "Mailbox Quota Policy Exclusion").DistinguishedName
$AllMailboxes = Get-Mailbox -resultsize unlimited -Filter {MemberOfGroup -ne $ExclusionGroupDN} | Get-MailboxStatistics | where {($_.Displayname -like "*carl*") -or ($_.Displayname -like "*anna*") -or ($_.Displayname -like "*robert*")}
foreach($Mailbox in $AllMailboxes){
$SizeMB = $Mailbox.TotalItemSize.Value.ToMB()
if(($SizeMB -lt 512) -and ($SizeMB -gt 256)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 1048) -and ($SizeMB -gt 512)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 512MB -ProhibitSendQuota 1024MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 2048) -and ($SizeMB -gt 1024)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 950MB -ProhibitSendQuota 2048MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 3072) -and ($SizeMB -gt 2048)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 1024MB -ProhibitSendQuota 3072MB -ProhibitSendReceiveQuota 3072MB}
if(($SizeMB -lt 4096) -and ($SizeMB -gt 3072)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 2048MB -ProhibitSendQuota 4096MB -ProhibitSendReceiveQuota 4096MB}
}
Avatar of Carl Billington

ASKER

Hi Rajitha14

The script is not working.

[String]$ExclusionGroupDN = (Get-DistributionGroup "Mailbox Quota Policy Exclusion").DistinguishedName
$AllMailboxes = Get-Mailbox -resultsize unlimited -Filter {MemberOfGroup -ne $ExclusionGroupDN}
foreach($Mailbox in $AllMailboxes){
$SizeMB = $Mailbox.TotalItemSize.Value.ToMB()
if(($SizeMB -lt 256) -and ($SizeMB -gt 150)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 512) -and ($SizeMB -gt 256)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 1048) -and ($SizeMB -gt 512)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 512MB -ProhibitSendQuota 1024MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 2048) -and ($SizeMB -gt 1024)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 950MB -ProhibitSendQuota 2048MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 3072) -and ($SizeMB -gt 2048)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 1024MB -ProhibitSendQuota 3072MB -ProhibitSendReceiveQuota 3072MB}
if(($SizeMB -lt 4096) -and ($SizeMB -gt 3072)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 2048MB -ProhibitSendQuota 4096MB -ProhibitSendReceiveQuota 4096MB}
} 

Open in new window


See error below:

User generated image
Hi Subsun

The script is not working:

$AllMailboxes = Get-Mailbox -Filter {MemberofGroup -ne "CN=Mailbox Quota Policy Exclusion,OU=Group,DC=tse,DC=local"} -resultsize unlimited | 
foreach($Mailbox in $AllMailboxes){
$SizeMB = $Mailbox.TotalItemSize.Value.ToMB()
if(($SizeMB -lt 512) -and ($SizeMB -gt 256)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 1048) -and ($SizeMB -gt 512)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 512MB -ProhibitSendQuota 1024MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 2048) -and ($SizeMB -gt 1024)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 950MB -ProhibitSendQuota 2048MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 3072) -and ($SizeMB -gt 2048)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 1024MB -ProhibitSendQuota 3072MB -ProhibitSendReceiveQuota 3072MB}
if(($SizeMB -lt 4096) -and ($SizeMB -gt 3072)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 2048MB -ProhibitSendQuota 4096MB -ProhibitSendReceiveQuota 4096MB}
} 

Open in new window


See error below:

User generated image
Oops...My mistake..Please try this.

[String]$ExclusionGroupDN = (Get-DistributionGroup "Mailbox Quota Policy Exclusion").DistinguishedName
$AllMailboxes = Get-Mailbox -resultsize unlimited -Filter {MemberOfGroup -ne $ExclusionGroupDN} | Get-MailboxStatistics
foreach($Mailbox in $AllMailboxes){
$SizeMB = $Mailbox.TotalItemSize.Value.ToMB()
if(($SizeMB -lt 256) -and ($SizeMB -gt 150)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 512) -and ($SizeMB -gt 256)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 1048) -and ($SizeMB -gt 512)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 512MB -ProhibitSendQuota 1024MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 2048) -and ($SizeMB -gt 1024)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 950MB -ProhibitSendQuota 2048MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 3072) -and ($SizeMB -gt 2048)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 1024MB -ProhibitSendQuota 3072MB -ProhibitSendReceiveQuota 3072MB}
if(($SizeMB -lt 4096) -and ($SizeMB -gt 3072)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 2048MB -ProhibitSendQuota 4096MB -ProhibitSendReceiveQuota 4096MB}
}
In my script you had removed the following line but not the pipe (|).. :-)
Get-MailboxStatistics | where {($_.Displayname -like "*carl*") -or ($_.Displayname -like "*anna*") -or ($_.Displayname -like "*robert*")}

Open in new window

Try This..
$AllMailboxes = Get-Mailbox -Filter {MemberofGroup -ne "CN=Mailbox Quota Policy Exclusion,OU=Group,DC=tse,DC=local"} -resultsize unlimited 
foreach($Mailbox in $AllMailboxes){
$SizeMB = $Mailbox.TotalItemSize.Value.ToMB()
if(($SizeMB -lt 512) -and ($SizeMB -gt 256)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 1048) -and ($SizeMB -gt 512)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 512MB -ProhibitSendQuota 1024MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 2048) -and ($SizeMB -gt 1024)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 950MB -ProhibitSendQuota 2048MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 3072) -and ($SizeMB -gt 2048)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 1024MB -ProhibitSendQuota 3072MB -ProhibitSendReceiveQuota 3072MB}
if(($SizeMB -lt 4096) -and ($SizeMB -gt 3072)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 2048MB -ProhibitSendQuota 4096MB -ProhibitSendReceiveQuota 4096MB}
} 

Open in new window

Hey Omnific, The script that i have given for this requirement is below. In your comment, i see that you used different script. Please make sure you modify the script with the DL names in your environment. You cannot copy and paste as it is Or let me know the DL names.

[String]$ExclusionGroupDN = (Get-DistributionGroup "MailboxQuotaPolicyExclusion").DistinguishedName
$AllMailboxes = Get-Mailbox -resultsize unlimited -Filter {MemberOfGroup -ne $ExclusionGroupDN} | Get-MailboxStatistics | where {($_.Displayname -like "*carl*") -or ($_.Displayname -like "*anna*") -or ($_.Displayname -like "*robert*")}
$AllMailboxes >> Mailboxlist.txt
foreach($Mailbox in $AllMailboxes){
$SizeMB = $Mailbox.TotalItemSize.Value.ToMB()
if(($SizeMB -lt 512) -and ($SizeMB -gt 256)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 1048) -and ($SizeMB -gt 512)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 512MB -ProhibitSendQuota 1024MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 2048) -and ($SizeMB -gt 1024)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 950MB -ProhibitSendQuota 2048MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 3072) -and ($SizeMB -gt 2048)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 1024MB -ProhibitSendQuota 3072MB -ProhibitSendReceiveQuota 3072MB}
if(($SizeMB -lt 4096) -and ($SizeMB -gt 3072)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 2048MB -ProhibitSendQuota 4096MB -ProhibitSendReceiveQuota 4096MB}
}
ASKER CERTIFIED SOLUTION
Avatar of SubSun
SubSun
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Hi Rajitha14

I want to remove this action from the script: Get-MailboxStatistics | where {($_.Displayname -like "*carl*") -or ($_.Displayname -like "*anna*") -or ($_.Displayname -like "*robert*")}

The DL name is "Mailbox Quota Policy Exclusion" as writen above. I want the script to exclude users that are currently in that DL.
Ok, you can try this. But, i think you were saying that the filter was not working in other post. However, you can try this. What are you planning to do with the members of that Exclusion DL? Do you want to remove any quota settings on those mailboxes?

[String]$ExclusionGroupDN = (Get-DistributionGroup "MailboxQuotaPolicyExclusion").DistinguishedName
$AllMailboxes = Get-Mailbox -resultsize unlimited -Filter {MemberOfGroup -ne $ExclusionGroupDN} | Get-MailboxStatistics
$AllMailboxes >> Mailboxlist.txt
foreach($Mailbox in $AllMailboxes){
$SizeMB = $Mailbox.TotalItemSize.Value.ToMB()
if(($SizeMB -lt 512) -and ($SizeMB -gt 256)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 1048) -and ($SizeMB -gt 512)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 512MB -ProhibitSendQuota 1024MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 2048) -and ($SizeMB -gt 1024)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 950MB -ProhibitSendQuota 2048MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 3072) -and ($SizeMB -gt 2048)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 1024MB -ProhibitSendQuota 3072MB -ProhibitSendReceiveQuota 3072MB}
if(($SizeMB -lt 4096) -and ($SizeMB -gt 3072)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 2048MB -ProhibitSendQuota 4096MB -ProhibitSendReceiveQuota 4096MB}
}
i can suggest an alternate way to do this if you give the requirement exactly.
Subsun, your code work in my test lab!!! Very happy. Deploying it tomorrow :)
Hi Rajitha14 I really appreciate your efforts. You have done a great job too. But this is what I wanted:

$AllMailboxes = Get-Mailbox -Filter {MemberofGroup -ne "CN=Mailbox Quota Policy Exclusion,OU=SBSUsers,OU=Users,OU=MyBusiness,DC=tse,DC=local"} -resultsize unlimited | Get-MailboxStatistics
foreach($Mailbox in $AllMailboxes){
$SizeMB = $Mailbox.TotalItemSize.Value.ToMB()
if(($SizeMB -lt 512) -and ($SizeMB -gt 100)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 256MB -ProhibitSendQuota 512MB -ProhibitSendReceiveQuota 1024MB}
if(($SizeMB -lt 1048) -and ($SizeMB -gt 512)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 512MB -ProhibitSendQuota 1024MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 2048) -and ($SizeMB -gt 1024)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 950MB -ProhibitSendQuota 2048MB -ProhibitSendReceiveQuota 2048MB}
if(($SizeMB -lt 3072) -and ($SizeMB -gt 2048)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 1024MB -ProhibitSendQuota 3072MB -ProhibitSendReceiveQuota 3072MB}
if(($SizeMB -lt 4096) -and ($SizeMB -gt 3072)){Set-Mailbox $Mailbox.DisplayName -UseDatabaseQuotaDefaults $false -IssueWarningQuota 2048MB -ProhibitSendQuota 4096MB -ProhibitSendReceiveQuota 4096MB}
}

This works in my test lab so far.
No problem, But my lines of code also does the same.
I think the variable will not work with -filter but should work with Where-Object Cmdlet.. Are you getting the desired result for following commands?

$ExclusionGroupDN = (Get-DistributionGroup "Mailbox Quota Policy Exclusion").DistinguishedName
Get-Mailbox -resultsize unlimited -Filter {MemberOfGroup -ne $ExclusionGroupDN}

Open in new window