Comment
Friedrich Gehri
Tera Expert

Thanks for this code. It helped very much.
However, on our instance it has been the case that the field 'page' has been empty at the dashboard tabs, but instead I had to use the field 'canvas_page' to find the related reportIDs. Then the rest of the script worked fine.
As this might help someone else as well, I will just paste the code here. You need to replace the part before the line

var shareUsers = [];

with it:

var dashboardTabM2M = new GlideRecord('pa_m2m_dashboard_tabs');
dashboardTabM2M.addQuery("dashboard", current.sys_id);
dashboardTabM2M.query();
var canvas_pages = [];
while (dashboardTabM2M.next()) {
    canvas_pages.push(dashboardTabM2M.tab.canvas_page.sys_id + "");
}

var portal_widgets = [];

canvas_pages.forEach(function(canvas_pageID) {
    var grid_canvas_pane = new GlideRecord("sys_grid_canvas_pane");
    grid_canvas_pane.addQuery("grid_canvas", canvas_pageID);
    grid_canvas_pane.query();
    while (portals.next()) {
        portal_widgets.push(grid_canvas_pane.portal_widget + '');
    }
});


var reportIds = [];
portal_widgets.forEach(function(portal_widgetIDs) {
    var portals = new GlideRecord("sys_portal");
    portals.addQuery("sys_id", portal_widgetIDs);
    portals.query();
    while (portals.next()) {
        var pageProp = new GlideRecord("sys_portal_preferences");
        pageProp.addQuery("portal_section", portals.getUniqueValue());
        pageProp.addQuery("name", "sys_id");
        pageProp.query();
        if (pageProp.next()) {
            reportIds.push(pageProp.getValue("value"));
        }
    }
});