Hallo zusammen,
Ich habe ein Powershell Script entwickelt um die Quest Migration Manager Messages nach der Migration im Public Folder zu entfernen. Das Script nutzt die EWS Managed API http://www.microsoft.com/en-us/download/details.aspx?id=35371
###############################################################################
# Remove Quest Migration Manager Hidden Messages in Public Folders
# Remove Messages with Subject "AelitaEMW_" in Associated Content Store
#
# Script Uses EWS Managed API
# http://www.microsoft.com/en-us/download/details.aspx?id=35371
#
# Version 1.0 / 27.10.2013
# Andres Bohren / www.icewolf.ch / blog.icewolf.ch / info@icewolf.ch
###############################################################################
###############################################################################
# PFRootListFolders
# List Public Folder Root Folders
###############################################################################
Function PFRootListFolders
{
$View = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1000)
$psPropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::IdOnly)
$psPropertySet.Add([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName)
$psPropertySet.Add([Microsoft.Exchange.WebServices.Data.FolderSchema]::ChildFolderCount)
$View.PropertySet = $psPropertySet
$ExResult = $EWService.FindFolders([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::PublicFoldersRoot, $View)
If ($ExResult -ne $Null)
{
Write-Host ("#Get Folders")
ForEach ($myFolder In $ExResult.Folders)
{
Write-Host ("FolderName: " + $myFolder.DisplayName + " FolderID: " + $myFolder.Id)
PFListChildFolders($myFolder.ID)
}
}
}
###############################################################################
# PFListChildFolders
# List Child Folders of Publc Folder ID
###############################################################################
Function PFListChildFolders
{
PARAM ([Microsoft.Exchange.WebServices.Data.FolderID]$pFolderID)
$FolderView = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1000)
$psPropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::IdOnly)
$psPropertySet.Add([Microsoft.Exchange.WebServices.Data.FolderSchema]::DisplayName)
$psPropertySet.Add([Microsoft.Exchange.WebServices.Data.FolderSchema]::ChildFolderCount)
$View.PropertySet = $psPropertySet
$ExResult = $EWService.FindFolders($pFolderID,$FolderView)
If ($ExResult -ne $Null)
{
#Write-Host ("#Get Child Folders")
ForEach ($myFolder In $ExResult.Folders)
{
Write-Host ("FolderName: " + $myFolder.DisplayName + " FolderID: " + $myFolder.Id + " FolderClass: " + $myFolder.FolderClass)
#Delete Aelita Message
DeleteAelitaMessage($myFolder.ID)
#Recursive Call This Function
PFListChildFolders($myFolder.ID)
}
}
}
###############################################################################
# Function DeleteAelitaMessage
# Deletes AelitaMessage "AelitaEMW_" in AccociatedContentsTable
###############################################################################
Function DeleteAelitaMessage
{
PARAM ([Microsoft.Exchange.WebServices.Data.FolderID]$pFolderID)
Try {
$ItemView = New-Object Microsoft.Exchange.WebServices.Data.ItemView(1000)
$ItemView.Traversal = [Microsoft.Exchange.WebServices.Data.ItemTraversal]::Associated
$ExResult = $EWService.FindItems($pFolderID,$ItemView)
Foreach ($Item In $ExResult.Items)
{
If ($Item.Subject -like "AelitaEMW_*")
{
Write-Host ("DELETE THIS ITEM: subject=" + $Item.Subject + " LastModifiedTime=" + $Item.LastModifiedTime) -Foregroundcolor cyan
$Item.Delete([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete)
} else {
Write-Host ("Subject=" + $Item.Subject + " LastModifiedTime=" + $Item.LastModifiedTime) -Foregroundcolor green
}
}
} catch [system.exception] {
Write-Host ("Error in DeleteAelitaMessage: " + $_.Exception.ToString())
}
}
###############################################################################
# Main Programm
###############################################################################
#Global Variables
[string]$Mailbox = "ewsuser@domain.tld"
[string]$Username = "ewsuser"
[string]$Password = "PassWord"
[string]$Domain = "Domain"
# Load EWS Managed API DLL and Connect to Exchange
[String] $dllPath = "D:\Scripts\EvLeaver\Microsoft.Exchange.WebServices.dll"
[Void] [Reflection.Assembly]::LoadFile($dllPath)
$EWService = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP1)
$EWService.Credentials = new-object Microsoft.Exchange.WebServices.Data.WebCredentials($Username,$Password,$Domain)
$EWService.AutodiscoverUrl($mbxName, {$True})
#Call Function
PFRootListFolders
Grüsse
Andres Bohren
