As per maintenance_mode in UIM 20.10 or higher:
The maintenance_mode probe generates the following tables in the UIM database:
Stores information about current and past maintenance windows.
Stores each schedule name, start time, duration, and recurrence details.
The probe uses the Cron scheduling mechanism.
Stores the schedule IDs and csids (Computer System IDs) that are in that schedule.
(Available from 20.10) The maintenance_window_history table is created during the installation or upgrade of the maintenance_mode probe. The data from the maintenance_window table is then stored in the maintenance_window_history table. Additionally, by default, the new data that is written in the maintenance_window is also added to the maintenance_window_history table.
There is no formal or OOTB maintenance report. You have to query the tables. You might be able to leverage some of the probe callbacks in a script.
Ctrl-P opens the probe utility and you can review available callbacks which can be run using the pu command.
Examples of probe utility commands that can be used in programs
I suggest you post a message to the UIM Community and ask others what they might have done.
Here is another query:
--Fetch historical windows from the DB
mw.SCHEDULE_ID = ms.SCHEDULE_ID
d.dev_id = mw.DEV_ID