Exchange Server logo

Contents

Intro

So we were working on a project for a customer who has 6 Exchange servers, 3 CAS and 3 MBX. The customer have an Exchange Server 2013 organization and about 200 users.

Basically it all sounded easy and quick project, however their Exchange Server has other saying on this! After we configured the co-existence scenario on their Exchange Server, we had an issue where their local anti-spam application started to block incoming email messages from Google.

This is a normal behavior of course as those emails might be considered spoofed emails. So we added Google IP address ranges for outbound SMTP. Once we did that and some other settings on their Exchange Servers we were able to get their email traffic going between G Suite and on-premises Exchange Servers.

This was the easy part… However there was something else being cooked for us by the Exchange Server… Read the rest “When Exchange Server rejects incoming email with: 452 4.3.1 Insufficient system resources”

Exchange Server logo

Little intro

I’ve got a case where the customer wanted to delete all of his users’ data in their mailboxes on the Exchange Server, that they got before 1-JAN-2018. He has an incident happened with some leaked critical email messages and he wanted to prevent it by taking this action!

The way to do this of course is pure PowerShell. So I first had to analyze the requirements then build an image in my brain for how the work is going to happen, then test it. And finally implement the needed changes.

Basically what I came to put together is, first I need to backup the data that I will delete. Then I need to delete the data.

To backup the data I need to export the mailboxes to a PST file. And the delete the data I have to use the Search-Mailbox cmdlet with -SearchQuery property.

That was the … Read the rest “How to search and delete users email messages in their mailboxes before a specific date/time – Exchange 2010”

Exchange Server logo

Intro

This is just the back story for this incident and the Exchange Server environment setup. Skip to The issue section for the actual stuff

I recently had a project started to migrate an Exchange Server 2010 organisation to G Suite. The customer had 4 (very old) servers, 2 DAG and 2 CAS. While we were preparing for the data migration phase we hit a very hard brick wall. 3 hard disks on one of the servers decided it was time for them to smoke. Luckily they had 6 disks on that server, and they were using RAID5. Few days after replacing these drives, another different drive on the same server followed its fallen brothers!

So they managed to keep their servers up and were quick to replace the damaged disks at the end. However this was not the case for the databases on the server. Once of the databases … Read the rest “What to do when New-MailboxExportRequest stuck on “Queued” status”

in Office 365 you get three types of groups: distribution groups, dynamic distribution groups, and Office 365 groups (unified groups)…

The first two of those are based on Exchange Server and are very straight and easy to use for anyone who is familiar with Exchange Server… However the third type might look something new to them despite being at the same level of ease and straight forward!

When using Exchange Online PowerShell to list the groups, there are three commands to use for this:

Get-DistributionGroup
Get-DynamicDistributionGroup
Get-UnifiedGroup

Similar to the first two commands, Get-UnifiedGroup works the same way… You will get the group, then check its members attribute or property to get the other member users…

Below is a small script that I made will do the required job for you. Once the process is completed, you will get a file named O365GroupMembers.csv contains four columns!

$output = @()
$groups 
Read the rest “PS: A small script to list Office 365 groups and members”

A quick and nice script to get all groups and their member users exported in PowerShell… you might need that for multiple reasons, and getting them quick is a nice thing…

Today I needed that for a customer who asked for it because he was cleaning his 1000 users active directory, and lucky me, the force of PowerShell can just do anything!

Script:

$groups = get-adgroup -filter *
foreach ($group in $groups)
{
    echo "Group: $group - Member list:"
    get-adgroupmember -identity "$group" | select Name, SamAccountName | ft -au
}

The above will just display the output on the screen, so in order to have it in a file, you can save the script to a file then pass it to Out-File with your desired file name…

Example:

Get-ADGroupsAndMembers.ps1 | Out-File c:\all_users_and_groups.csv

I have attached the script file (.ps1) into this post so you can quickly download it, have fun… … Read the rest “PS: Get all active directory groups with their member users”

This is just a quick guide to decommission an old Exchange server 2007, since now 2010 and 2013 and even Office365 are everywhere, 2007 is considered obsolete same as 2003 during the days of 2010…

I am not going to get in details about this, just I will summarize the guide by putting the steps and the link to information/how to do it… the whole process consists of the following steps:

Step 1: Remove old OAB: http://social.technet.microsoft.com/Forums/en-US/f26f4d92-4792-4d28-9617-ff9095d94596/exchange-server-2007-error?forum=exchangesvrsecuremessaginglegacy (follow the first part steps 1, 2, 3, 4 from the answer).

Step 2: Remove the folders replicas from the public folders database if it exists: http://technet.microsoft.com/en-us/library/bb201664%28v=exchg.80%29.aspx (follow the section “To delete user and system public folders)

Possible (almost sure) errors: Object is read only because it was created by a future version of Exchange: http://social.technet.microsoft.com/Forums/en-US/f26f4d92-4792-4d28-9617-ff9095d94596/exchange-server-2007-error?forum=exchangesvrsecuremessaginglegacy (follow the last part steps 1, 2, 3 from the Read the rest “Guide to decommissioning old Exchange 2007 server”

In order to get a list of all (or part) of the mailboxes and view their sizes, simply use the following PS script:

Get-mailbox | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft DisplayName, ItemCount, TotalItemSize, Database -auto | Out-File c:\mbx_sizes.txt

The above command, will get all the mailboxes, and list their sizes and the database they are member or, then output the result to a text file called mbx_sizes.txt…

You can change the sorting to be Ascending, to have the smallest mailbox on top…

Also, you can get the sizes for mailboxes in a specific database by:

Get-mailbox -Database <DATABASE_NAME> | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft DisplayName, ItemCount, TotalItemSize, Database -auto | Out-File c:\mbx_sizes.txt

Replace <DATABASE_NAME> with the actual name of your database.

And of course you can do it for 1 mailbox as well by using:

Get-MailboxStatistics -Identity <USER_ID> | ft DisplayName, ItemCount, TotalItemSize

Sometimes you get a sudden need to forward bulk users’ mail to external destination… in normal days, you would create a mail contact, then forward the selected user’s mail to the new external contact.

Now what if you got a large number of contacts to forward? well, you can either:

  1. Manually create all the required mail contacts, then assign each user to each contact.
  2. OR THE BETTER WAY: Use the magic of PowerShell!

This is a very simple and quick procedure…

First, you will need to create the contacts, which you can find how in the following post: PS: Creating bulk mail contacts

Then with another script, you will forward each user to his corresponding mail contact item:

Import-CSV "C:\ContactForward.csv" | Foreach{Set-Mailbox -Identity $_.LocalUser -ForwardingAddress $_.ForwardAddress -DeliverToMailboxAndForward $true}

You can either keep the attribute “-DeliverToMailboxAndForward $true” to keep a copy of the message in the original mailbox or remove it.Read the rest “PS: Bulk forwarding mailboxes to external addresses”

Below is a useful script to create bulk contacts in Exchange Management Shell:

Import-CSV "C:\NameList.csv" | Foreach{New-MailContact -Name $_.Name -ExternalEmailAddress $_.ExternalAddress}

You need to have the following prepared before you use the script:

  1. A CSV file contains 2 headers: Name, ExternalAddress, with all the contacts list that you want to create.
  2. Save the CSV file in C:\ (to be completely complied with the script above, otherwise save it where you want, but make sure you specify it’s full path in the script above instead of “C:\NameList.csv”.

To make it a bit easier, here is the script ready, just open EMS and run it from there after you make sure the file is ready…

Bulk-MailContact

Hi

It has been a while since I did a transition for Exchange server 2010, and last days I did one…

Today I was doing the final part of it which is decommissioning the old server, I did it but I had to do some extra work to finish the job…

I had moved all the users mailboxes to the new server, and the database seems empty, but in fact, it was not, because there were some system mailboxes called Arbitration mailboxes

So when trying to uninstall the server, I got the error about existing mailboxes still on the database of the server I want to remove!

All I had to do is move these mailboxes to the new server and I was done (NEVER REMOVE THESE MAILBOXES UNLESS YOU ARE REMOVING THE LAST SERVER IN THE ORGANIZATION)

  • The first step is to list all the arbitration mailboxes
Read the rest “Unable to uninstall Exchange server 2010 while mailbox database has un-moved arbitration mailboxes”