I use the following script:

function eventToICS(event) {
  var tz = "Europe/Paris";
  var dateFormat = "yyyyMMdd'T'HHmmss";
  var res = "";
  res += "BEGIN:VEVENT\n";
  res += "SUMMARY:" + event.getTitle() + "\n";
  res += "DTSTART;TZID=" + tz + ":" + 
            Utilities.formatDate(event.getStartTime(), tz, dateFormat) + "\n";
  res += "DTEND;TZID=" + tz + ":" + 
            Utilities.formatDate(event.getEndTime(), tz, dateFormat) + "\n";
  res += "END:VEVENT\n\n";
  return res;
}

function aggregateCalendars() {
  var cals = CalendarApp.getAllOwnedCalendars();

  var ics = "BEGIN:VCALENDAR\nVERSION:2.0\n\n";
 
  var startDate = new Date();
  var endDate = new Date();
  
  startDate.setDate(startDate.getDate() - 50);
  endDate.setDate(endDate.getDate() + 500);
  
  for(var i=0; i<cals.length; i++) {
    ics += "COMMENT: " + cals[i].getName() + "\n\n";
   
    var events = cals[i].getEvents(startDate, endDate);
    for(var j=0; j<events.length; j++) {
      ics += eventToICS(events[j]);
    }
  }
 
  ics += "\nEND:VCALENDAR\n";

  // here do something with the ICS file...
}

Once the contents of the ICS file has been constructed, you can do whatever you want with it, for instance send it via e-mail. Personally I upload it onto a Google Sites page :

var page = SitesApp.getPageByUrl(pageURL);
page.addHostedAttachment(Utilities.newBlob(ics, "text/plain", filename));