Outlook 2013 - Empty Deleted Items Folder

This topic contains 4 replies, has 4 voices, and was last updated by  Brandon Lashmet 2 years, 7 months ago.

  • Author
  • #32504

    Brandon Lashmet

    This function is supposed to delete all items in the "Deleted Items" folder in Outlook (2013).

    function Empty-DeletedItems {
    $Outlook = New-Object -ComObject Outlook.Application
       Foreach ($Folder in $Outlook.Session.Folders){
            Foreach($MailFolder in $Folder.Folders ) {
                 if ($MailFolder.Name -eq "Deleted Items" -and $MailFolder.Items.Count -gt 0){
                        Foreach ($Item in $MailFolder.Items){

    However, when I call it, only 5-7 items get deleted from the "Deleted Items" folder. I can run it 5-10 times and the folder eventually empties, but I'm curious why it's not deleting every item in one run?

    Thanks for any help.

  • #32558

    Don Jones

    I've never had a lot of luck with that Outlook COM object, unfortunately. It's old, and it's not terribly well designed. The fact that you're eventually able to get what you want is a small miracle ;).

  • #32565

    Lawrence Gulliver

    The Outlook COM object can only access what you've got cached on your computer. Perhaps the deleted items is considered low priority so only the most recent few are loaded?

    Try to get a count on the number of items this script can see in deleted items.

  • #32607

    Peter Jurgens

    Instead of deleting each item I think there should be a method available on the deleted items folder object to "empty deleted items" (can't recall it off the top of my head, sorry). Alternatively you could look at EWS (Exchange Web Services) and that will interact with the exchange server rather than trying to manipulate the (as Don said) old (and unreliable) Outlook COM object.

  • #32644

    Brandon Lashmet

    Thanks for the responses! This script ended up working (empties both deleted items and junk mail)

    $outlook = New-Object -comObject Outlook.Application 
    $olJunk = $outlook.Session.GetDefaultFolder(23) 
    $olDeleted = $outlook.Session.GetDefaultFolder(3) 
    $($olJunk.Items) | %{$_.Delete()} 
    $($olDeleted.Items) | %{$_.Delete()}

You must be logged in to reply to this topic.