I recently experienced an issue where multiple users for a mailbox were getting a "mailbox full" message in Outlook. When the message first appeared, I removed the storage quota on the mailbox, but after a server restart (and of course restarting the outlook clients), they were still getting prompted with the same message.
The solution ended up being to remove the .ost file for this particular mailbox (default location is %localappdata\Microsoft\Outlook) and then restarting the Outlook client (you will need to close Outlook before it will let you delete the .ost file)
The .ost file will automatically be re-created when Outlook is opened, and mail will then be downloaded back into the .ost file from the server.
Hints, tips, thoughts & findings on the world of Technology & Scripting
Showing posts with label mailbox. Show all posts
Showing posts with label mailbox. Show all posts
Monday, 24 October 2016
Outlook - Mailbox Full Message after storage quota increased (or removed)
Labels:
2007,
2010,
2013,
error,
exceeded,
Exchange,
fix,
full,
limit,
mailbox,
microsoft,
outlook,
quota,
storage,
Tips,
Troubleshooting,
warning
Thursday, 15 September 2016
View and Change Exchange Mailbox Calendar Permissions with Powershell
Permissions for mailbox calendars are managed separately to the actual mailbox permissions. You can use the below cmdlets in powershell to view and add/edit the permissions on a users mailbox.
To view current calendar permissions on a mailbox
get-mailboxfolderpermission -identity "name:\Calendar" | ft
To add new calendar permissions on a mailbox
add-mailboxpermission -identity "name:\Calendar" -User "usertogetaccess" -AccessRights "Accesslevel"
To remove an existing calendar permissions entry on a mailbox
remove-mailboxpermission -identity "name:\Calendar" -User "usertogetaccess" -AccessRights "Accesslevel"
Name = the display name alias or email address you are setting the calendar permissions ON
Usertogetaccess = the display name, alias or email address you are granting calendar permissions TO
Accesslevel = the level of access to be granted. The available options are:
To view current calendar permissions on a mailbox
get-mailboxfolderpermission -identity "name:\Calendar" | ft
To add new calendar permissions on a mailbox
add-mailboxpermission -identity "name:\Calendar" -User "usertogetaccess" -AccessRights "Accesslevel"
To modify an existing calendar permissions entry on a mailbox
set-mailboxfolderpermission -identity "name:\Calendar" -User "usertogetaccess" -AccessRights "Accesslevel"
To remove an existing calendar permissions entry on a mailbox
remove-mailboxpermission -identity "name:\Calendar" -User "usertogetaccess" -AccessRights "Accesslevel"
Name = the display name alias or email address you are setting the calendar permissions ON
Usertogetaccess = the display name, alias or email address you are granting calendar permissions TO
Accesslevel = the level of access to be granted. The available options are:
- Owner
- Publishing Editor
- Editor
- Publishing Author
- Author
- Nonediting Author
- Review
- Contributor
- Free/Busy Time
- None
Wednesday, 14 September 2016
Check which Exchange Mailboxes a User has Full Access or Send As Permissions On using Powershell
As an exchange administrator, you may occassionally need to know which mailboxes a particular user has Full Mailbox Access or Send As permissions to. This may be required as part of an audit, or to simply copy an existing users permissions for a new user you are setting up/creating.
The script below helps to accomplish this, as there is no in-built/easy way to view which mailboxes a particular user has access to - ie. Full Mailbox Access, or Send As permissions
First you need to specify the user whose existing access we are checking, using the $user variable. We use the wildcard "*" to essentially match any name that contains what is between the *'s - the users first name, last name or alias should work.
$user = "*peter*"
Next we run the get-mailbox cmdlet against all mailboxes in exchange, to query the permissions on each mailbox to see if this user exists in the respective permissions list.
There are two separate commands to do this - one to check for Full Access permissions, and the other to check for Send As permissions
get-mailbox -resultsize unlimited | get-mailboxpermission | where {$_.user -like $user} | select Identity, AccessRights
get-mailbox -resultsize unlimited | get-adpermission | where {($_.user -like $user) -and ($_.ExtendedRights -like "*Send-As*")} | select Identity, ExtendedRights
If any matches are found, the results will be displayed showing their Identity (ie. name) and the Access Rights level they have
The script below helps to accomplish this, as there is no in-built/easy way to view which mailboxes a particular user has access to - ie. Full Mailbox Access, or Send As permissions
First you need to specify the user whose existing access we are checking, using the $user variable. We use the wildcard "*" to essentially match any name that contains what is between the *'s - the users first name, last name or alias should work.
$user = "*peter*"
Next we run the get-mailbox cmdlet against all mailboxes in exchange, to query the permissions on each mailbox to see if this user exists in the respective permissions list.
There are two separate commands to do this - one to check for Full Access permissions, and the other to check for Send As permissions
get-mailbox -resultsize unlimited | get-mailboxpermission | where {$_.user -like $user} | select Identity, AccessRights
get-mailbox -resultsize unlimited | get-adpermission | where {($_.user -like $user) -and ($_.ExtendedRights -like "*Send-As*")} | select Identity, ExtendedRights
If any matches are found, the results will be displayed showing their Identity (ie. name) and the Access Rights level they have
Labels:
access,
as,
audit,
check,
Exchange,
full,
mailbox,
permissions,
Powershell,
report,
script,
scripts,
send,
server,
Tips,
windows
Tuesday, 13 September 2016
Export All Exchange Mailbox Sizes with Powershell
Here is a script you can run on your exchange server to export a list of all mailboxes on the server and the size of each mailbox. This is useful for checking/monitoring mailbox size and usage.
First of all we need to get the name of the mailbox database to query
$mbdb = get-mailboxdatabase | select Name
Next, we use this database name in the get-mailboxstatistics cmdlet to query all mailboxes within the database and export the size from the TotalItemSize field. The list is then sorted alphabetically by display name and exported to a .csv file so it's easier to view
get-mailboxstatistics -database "$($dbname.name)" | select DisplayName, TotalItemSize | sort DisplayName | export-csv "C:\1GB-MailboxList.csv" -notype
You can also implement a "filter" of sorts so that you only export mailboxes that are bigger than a certain size. For example, you may want to know how many mailboxes you have that are larger than 1GB. To do this, we add a filter using the "where {$_.totalitemsize -ge $size}" where $size is the size value you need, in bytes.
So for the example of 1GB, the $size variable would be set to 1073741824 which is 1GB in bytes.
There is a handy utility you can use by following the link below to quickly convert the size you require from GB to bytes
http://www.convertunits.com/from/GB/to/byte
$size = "1073741824"
get-mailboxstatistics -database "$($dbname.name)" | where {$_.totalitemsize -ge $size} | select DisplayName, TotalItemSize | sort DisplayName | export-csv "C:\1GB-MailboxList.csv" -notype
First of all we need to get the name of the mailbox database to query
$mbdb = get-mailboxdatabase | select Name
Next, we use this database name in the get-mailboxstatistics cmdlet to query all mailboxes within the database and export the size from the TotalItemSize field. The list is then sorted alphabetically by display name and exported to a .csv file so it's easier to view
get-mailboxstatistics -database "$($dbname.name)" | select DisplayName, TotalItemSize | sort DisplayName | export-csv "C:\1GB-MailboxList.csv" -notype
You can also implement a "filter" of sorts so that you only export mailboxes that are bigger than a certain size. For example, you may want to know how many mailboxes you have that are larger than 1GB. To do this, we add a filter using the "where {$_.totalitemsize -ge $size}" where $size is the size value you need, in bytes.
So for the example of 1GB, the $size variable would be set to 1073741824 which is 1GB in bytes.
There is a handy utility you can use by following the link below to quickly convert the size you require from GB to bytes
http://www.convertunits.com/from/GB/to/byte
$size = "1073741824"
get-mailboxstatistics -database "$($dbname.name)" | where {$_.totalitemsize -ge $size} | select DisplayName, TotalItemSize | sort DisplayName | export-csv "C:\1GB-MailboxList.csv" -notype
Friday, 8 February 2013
Querying Exchange Mailboxes with Powershell Pt 2
In my previous blog post, I outlined some methods to query Exchange mailboxes using the get-mailbox cmdlet. Whilst the information obtained using this cmdlet is very useful, it does not contain all the information that is available for an Exchange mailbox.
There is another cmdlet available called Get-MailboxStatistics. It is used/applied in the same way as the Get-Mailbox cmdlet, but contains different fields or properties, and therefore, different information relating to the mailbox.
If you run the command Get-MailboxStatistics -identity "MailboxName" | fl it will display the mailbox statistics for that particular mailbox.
This information includes;
There is another cmdlet available called Get-MailboxStatistics. It is used/applied in the same way as the Get-Mailbox cmdlet, but contains different fields or properties, and therefore, different information relating to the mailbox.
If you run the command Get-MailboxStatistics -identity "MailboxName" | fl it will display the mailbox statistics for that particular mailbox.
This information includes;
- Associated item count (ie. number of items within the mailbox)
- Deleted item count
- Last logon/logoff time
- Total size of items
- Total size of deleted items
So, for a practical example that you could potentially use to query this information. Let's say you want to query all your mailboxes to identify those that have more than 20,000 items within them. You could run the following command;
Get-Mailboxstatistics | Where {$_.ItemCount -gt "20000"} | Select DisplayName
You could replace $_.ItemCount with any of the other properties that are contained within the Get-MailboxStatistics cmdlet.
If you want the query to return more than just the DisplayName field for objects that match your query, you can add them after DisplayName and separate them with a comma (,), or if you want to return all properties then remove | Select DisplayName altogether.
You can also add | Export-CSV-path "C:\Export.csv" -notype to the end to export your query results to a .csv file.
Labels:
audit,
automation,
box,
check,
cmdlet,
Exchange,
export,
hints,
mail,
mailbox,
microsoft,
Powershell,
query,
report,
scripts,
server,
statistics,
Tips,
windows
Tuesday, 5 February 2013
Querying Exchange Mailboxes with Powershell
Exchange and Powershell go hand in hand - as it is essentially what Exchange is built on top of, and is what the Exchange Management Console (EMC) uses to execute commands you choose through the GUI. (Ever noticed you get the Powershell command line equivalent for commands you execute in EMC?)
One of the most common things an administrator will need to do is query all the mailboxes within the system for certain criteria, which I will explain and breakdown in this blog entry.
The command Get-Mailbox is one of the most useful and powerful commands you can use (for information gethering). It can be used to retrieve all the properties for all the mailboxes in your system, or can be tweaked to only return some of the properties for some of the mailboxes within your system.
If you execute the command Get-Mailbox on its own, you will probably be flooded with 1000 responses, followed by the following warning message;
WARNING: By default only the first 1000 items are returned. To change the number of items returned, specify the parameter "-ResultSize". To return all items specify "-ResultSize Unlimited" (Note: Returning all items may take a
very long time and consume a large amount of memory depending on the actual number of items). It is not recommended to store the results in a variable; instead pipe the results to another task or script to perform batch changes
As per the message, the command on its own will only return the first 1000 results. You can change this by adding -ResultSize Unlimited to it, so it would look like this;
Get-Mailbox -ResultSize Unlimited
If you run this command it will run through and display the first few properties for every mailbox within your system. While this can be useful, the command can be further tweaked to run faster and provide more accurate/informative results.
To get all the properties for a single users mailbox, you can use the following command
Get-Mailbox -Identity "Morrissey, Peter"
You can replace what is between the " " with any identifier for the mailbox - such as Primary SMTP Address, Display Name or Alias.
When you run this command it will only display the first few properties as it is presenting the information in a table format. If you change the command to display in list format (by adding | fl), you get MUCH more information:
Get-Mailbox -Identity "Morrissey, Peter" | fl
Now you can view ALL the properties for an individual users mailbox. These properties apply to every mailbox within the system, so you can once again, modify the Get-Mailbox command to search on any of the properties you see in this list.
For example, if I wanted to query all the mailboxes within my system, and only return those whose 'Name' property contain the text "Peter", I would run the following command
Get-Mailbox -ResultSize Unlimited | Where {$_.Name -like "*Peter*"}
You still need to include -Resultsize Unlimited because although you aren't expecting more than 1000 results to be returned, you do want the Get-Mailbox command to query more than the first 1000 mailboxes, which it will not do if this omitted.
You can replace the $_.Name with any of the other properties for a mailbox - it just needs to have the $_. before it.
The -like operator can also be changed to use -eq (equal to) -ne (not equal to) -gt (greater than) -lt (less than) -le (less than or equal to) -ge (greater than or equal to)
Next you can fine tune the properties that you wish to display for each object whos name contains "Peter". Say you want to only display the DisplayName, Alias, Database and PrimarySMTPAddress properties for each of the results. You could use the following line
Get-Mailbox -ResultSize Unlimited | Where {$_.Name -like "*Peter*"} | Select DisplayName, Alias, Database, PrimarySMTPAddress
The benefit of doing this is that by retrieving fewer properties for each object, it speeds up the time it takes for the query to run. It also makes looking through the results much faster as you aren't reading over information you don't need. Once again, you can replace the properties I used with any of the properties available for each mailbox, as we discovered earlier.
Finally, you can export the results of your query to a CSV file
Get-Mailbox -ResultSize Unlimited | Where {$_.Name -like "*Peter*"} | Select DisplayName, Alias, Database, PrimarySMTPAddress | Export-CSV -path "C:\Export.csv" -notype
Once you have the information in a CSV file you can attach it to an email and send it to yourself (or someone else) as per my previous blog post
One of the most common things an administrator will need to do is query all the mailboxes within the system for certain criteria, which I will explain and breakdown in this blog entry.
The command Get-Mailbox is one of the most useful and powerful commands you can use (for information gethering). It can be used to retrieve all the properties for all the mailboxes in your system, or can be tweaked to only return some of the properties for some of the mailboxes within your system.
If you execute the command Get-Mailbox on its own, you will probably be flooded with 1000 responses, followed by the following warning message;
WARNING: By default only the first 1000 items are returned. To change the number of items returned, specify the parameter "-ResultSize". To return all items specify "-ResultSize Unlimited" (Note: Returning all items may take a
very long time and consume a large amount of memory depending on the actual number of items). It is not recommended to store the results in a variable; instead pipe the results to another task or script to perform batch changes
As per the message, the command on its own will only return the first 1000 results. You can change this by adding -ResultSize Unlimited to it, so it would look like this;
Get-Mailbox -ResultSize Unlimited
If you run this command it will run through and display the first few properties for every mailbox within your system. While this can be useful, the command can be further tweaked to run faster and provide more accurate/informative results.
To get all the properties for a single users mailbox, you can use the following command
Get-Mailbox -Identity "Morrissey, Peter"
You can replace what is between the " " with any identifier for the mailbox - such as Primary SMTP Address, Display Name or Alias.
When you run this command it will only display the first few properties as it is presenting the information in a table format. If you change the command to display in list format (by adding | fl), you get MUCH more information:
Get-Mailbox -Identity "Morrissey, Peter" | fl
Now you can view ALL the properties for an individual users mailbox. These properties apply to every mailbox within the system, so you can once again, modify the Get-Mailbox command to search on any of the properties you see in this list.
For example, if I wanted to query all the mailboxes within my system, and only return those whose 'Name' property contain the text "Peter", I would run the following command
Get-Mailbox -ResultSize Unlimited | Where {$_.Name -like "*Peter*"}
You still need to include -Resultsize Unlimited because although you aren't expecting more than 1000 results to be returned, you do want the Get-Mailbox command to query more than the first 1000 mailboxes, which it will not do if this omitted.
You can replace the $_.Name with any of the other properties for a mailbox - it just needs to have the $_. before it.
The -like operator can also be changed to use -eq (equal to) -ne (not equal to) -gt (greater than) -lt (less than) -le (less than or equal to) -ge (greater than or equal to)
Next you can fine tune the properties that you wish to display for each object whos name contains "Peter". Say you want to only display the DisplayName, Alias, Database and PrimarySMTPAddress properties for each of the results. You could use the following line
Get-Mailbox -ResultSize Unlimited | Where {$_.Name -like "*Peter*"} | Select DisplayName, Alias, Database, PrimarySMTPAddress
The benefit of doing this is that by retrieving fewer properties for each object, it speeds up the time it takes for the query to run. It also makes looking through the results much faster as you aren't reading over information you don't need. Once again, you can replace the properties I used with any of the properties available for each mailbox, as we discovered earlier.
Finally, you can export the results of your query to a CSV file
Get-Mailbox -ResultSize Unlimited | Where {$_.Name -like "*Peter*"} | Select DisplayName, Alias, Database, PrimarySMTPAddress | Export-CSV -path "C:\Export.csv" -notype
Once you have the information in a CSV file you can attach it to an email and send it to yourself (or someone else) as per my previous blog post
Labels:
audit,
automation,
box,
check,
checking,
Exchange,
mail,
mailbox,
mailboxes,
microsoft,
Powershell,
query,
querying,
report,
script,
scripts,
Tips,
windows
Subscribe to:
Posts (Atom)