You can’t migrate a Public Folder from 2007 > 2010 or 2003 > 2010 if there are meetings/Appointments which are
Recurring and have no end date. The 2010 want accept to replicate that meeting to the 2010. Also with all Log Levels
set to Maximum you can see the error but sometimes you don’t even find IN which Public Folder the meeting is.
Here is how to search for the Error in your Messagetracking files: |
get-messagetrackinglog -server server2030.customer.ch -eventid fail | fl
or
get-messagetrackinglog -server server2030.customer.ch -eventid fail | fl > c:\edv\logs.txt |
They normally reside in the path:
C:\Program Files\Microsoft\Exchange Server\V14\TransportRoles\Logs\MessageTracking |
———————————————————————————————————————————-
Turn ON PIPELINE LOGGING (Acttention all email gets dumped PLAINTEXT to some path > Heav Load!)
ON/AN:
set-TransportServer -PipelineTracingEnabled $true -ContentConversionTracingEnabled $true -PipelineTracingPath “d:\Program Files\Microsoft\Exchange Server\V14\TransportRoles\Logs\PipelineTracing” -PipelineTracingSenderAddress PublicFolderDatabase@customer.ch
OFF/AB:
set-TransportServer -PipelineTracingEnabled $false -ContentConversionTracingEnabled $false
On both commands The Exchange will ask you which HUB Server you want to do this on!
Here is how the DUMP looks:
———————————————————————————————————————————-
Turn up the Logging on Exchange 2010/2007
Don’t forget to turn it back after you are done |
set-eventloglevel -identity “MSExchangeIS\9001 Public\Replication DS Updates” –Level Expert
set-eventloglevel -identity “MSExchangeIS\9001 Public\Replication Incoming Messages” –Level Expert set-eventloglevel -identity “MSExchangeIS\9001 Public\Replication Outgoing Messages” –Level Expert set-eventloglevel -identity “MSExchangeIS\9001 Public\Replication NDRs” –Level Expert set-eventloglevel -identity “MSExchangeIS\9001 Public\Replication Site Folders” –Level Expert set-eventloglevel -identity “MSExchangeIS\9001 Public\Replication Expiry” –Level Expert set-eventloglevel -identity “MSExchangeIS\9001 Public\Replication Conflicts” –Level Expert set-eventloglevel -identity “MSExchangeIS\9001 Public\Replication Backfill” –Level Expert set-eventloglevel -identity “MSExchangeIS\9001 Public\Replication Errors” –Level Expert set-eventloglevel -identity “MSExchangeIS\9001 Public\Replication General” –Level Expert set-eventloglevel -identity “MSExchangeIS\9001 Public\Local Replication” ” –Level Expert |
This how the Error in C:\Program Files\Microsoft\Exchange Server\V14\TransportRoles\Logs\MessageTracking looks: |
MessageSubject : Folder Content Backfill Response
Sender : PublicFolderDatabase@customer.ch ReturnPath : PublicFolderDatabase@customer.ch MessageInfo : MessageLatency : MessageLatencyType : None EventData : {[MailboxDatabaseName, server2030.customer.ch]}
RunspaceId : 9f141a69-d1c8-4d09-acbf-af1a120a7c42 Timestamp : 04.09.2013 14:22:13 ClientIp : ClientHostname : RSINTERL9322 ServerIp : ServerHostname : RSINTERL9320 SourceContext : 08D06BC7EC506680;2013-09-04T12:22:13.161Z;0 ConnectorId : Source : STOREDRIVER EventId : FAIL InternalMessageId : 4883 MessageId : <213E7703BD211643BB175C276D557A97028C2EAAEEC9@rsinterl41.interlago.ch> Recipients : {PF01@customer.ch} RecipientStatus : {554 5.2.0 STOREDRV.Deliver.Exception:ObjectValidationException; Failed to process message du e to a permanent exception with message Can’t save invalid object Object Violation. Invalid p roperty = [Calc:EndTime] EndTime. Invalid data for that property = 31.05.2013 21:59:00. Const raint violated = Property [Calc:StartTime] StartTime must be LessThanOrEqual when compared to property [Calc:EndTime] EndTime… ObjectValidationException: Can’t save invalid object Obje ct Violation. Invalid property = [Calc:EndTime] EndTime. Invalid data for that property = 31. 05.2013 21:59:00. Constraint violated = Property [Calc:StartTime] StartTime must be LessThanO rEqual when compared to property [Calc:EndTime] EndTime… [Stage: CreateMessage]} TotalBytes : 13935 RecipientCount : 1 RelatedRecipientAddress : Reference : MessageSubject : Folder Content Backfill Response Sender : PublicFolderDatabase@customer.ch ReturnPath : PublicFolderDatabase@customer.ch MessageInfo : MessageLatency : MessageLatencyType : None EventData : {[MailboxDatabaseName, server2030.customer.ch]} |
My VBSCRIPT to search for all Recurring items in a specific Public Folder
Cscript check_public_folder_recurring_appointment.vbs “Your_public_Folder_Name”
Output: c:\pf_logfiles.txt
It will only work for Public Folder which are ONE Step UNDER the ROOT. If you have more depths you need the expand. Sample > Change one more depth with the subfolder reports under Butsch:
Set MyFolder1 = objNamespace.Folders(“Öffentliche Ordner”) Set MyFolder2 = MyFolder1.Folders(“Alle Öffentlichen Ordner”) Set MyFolder3 = MyFolder2.Folders(“butsch”) Set MyFolder4 = MyFolder3.Folders(“reports“) Set colItems = MyFolder4.Items
Also this is for the GERMAN/Deutsch Exchange 2007/2010 if you have an English one you may have to change.
GERMAN:
Set MyFolder1 = objNamespace.Folders(“Öffentliche Ordner”) Set MyFolder2 = MyFolder1.Folders(“Alle Öffentlichen Ordner”)
ENGLISH:
Set MyFolder1 = objNamespace.Folders(“Public Folders”) Set MyFolder2 = MyFolder1.Folders(“All Public Folders”)
The Texfile c:\pf_logfiles.txt reports will look like this. Now you can search for .4500 which is relevant to NO End time of a meeting. At least you now see in which Public Folder to search the meeting.
|
‘ vbscript: check_public_folder_recurring_appointment.vbs
‘ © www.butsch.ch ‘ 2013 ‘ Sample Searches in German Public Folder called Butsch right under the root ‘ Sorry for ugly vb I like c# 😉
On Error Resume Next Dim myfolder Const ForAppending = 8 Const olFolderInbox = 6
Set objArgs = WScript.Arguments myfolder = objArgs(0)
Set objFSO = CreateObject(“Scripting.FileSystemObject”) Set objlog = objFSO.OpenTextFile(“c:\pf_logfiles.txt”, 8, True)
Set objOutlook = CreateObject(“Outlook.Application”) Set objNamespace = objOutlook.GetNamespace(“MAPI”)
Set MyFolder1 = objNamespace.Folders(“Öffentliche Ordner”) Set MyFolder2 = MyFolder1.Folders(“Alle Öffentlichen Ordner”) Set MyFolder3 = MyFolder2.Folders(“butsch”)
Set colItems = MyFolder3.Items
strFilter = “[IsRecurring] = TRUE”
Set colFilteredItems = colItems.Restrict(strFilter)
For Each objItem In colFilteredItems Set objPattern = objItem.GetRecurrencePattern objlog.writeline myfolder Wscript.Echo “Meeting name: ” & objItem.Subject objlog.writeline “Meeting name: ” & objItem.Subject Wscript.Echo “Duration: ” & objItem.Duration & ” minutes” objlog.writeline “Duration: ” & objItem.Duration & ” minutes” Wscript.Echo “Location: ” & objItem.Location objlog.writeline “Location: ” & objItem.Location Wscript.Echo “Recurrence type: ” & objPattern.RecurrenceType objlog.writeline “Recurrence type: ” & objPattern.RecurrenceType Wscript.Echo “Start time: ” & objPattern.StartTime objlog.writeline “Start time: ” & objPattern.StartTime Wscript.Echo “Start date: ” & objPattern.PatternStartDate objlog.writeline “Start date: ” & objPattern.PatternStartDate Wscript.Echo “End date: ” & objPattern.PatternEndDate objlog.writeline “End date: ” & objPattern.PatternEndDate Wscript.Echo “—————————————” objlog.writeline “—————————————” Next
objlog.Close set objFSO = Nothing |
You then call the VBS in a batch:
cscript check_public_folder_recurring_appointment.vbs “Kunde Pikettzimmer a”
cscript check_public_folder_recurring_appointment.vbs “Kunde Pikettzimmer b”
cscript check_public_folder_recurring_appointment.vbs “Kunde Pikettzimmer c”
cscript check_public_folder_recurring_appointment.vbs “Kunde Pikettzimmer d”
cscript check_public_folder_recurring_appointment.vbs “Kunde portabler Beamer Hitachi”