Aggiornamento del 21.09.21
Ho ampliato le funzionalità del foglio. Ora genera anche le liste dei gruppi e relativi alias, sempre distinti per dominio. Un prospetto completo in caso di manutenzione, passaggi di dominio o di anno, o come controllo per problemi o situazioni anomale su utenti e gruppi.
Il link del foglio è quindi cambiato, e anche parte del codice. Se ti interessa recuperare la prima versione – generazione delle liste dei soli utenti, clicca qui per copiare il file con script annesso.

Gli amministratori possono trovare utile, in alcune circostanze, l’avere a disposizione una lista completa degli utenti e gruppi di Google Workspace, comprensiva di eventuali alias. Se ad esempio vogliamo eliminare un dominio, l’operazione si bloccherà se ci sono ancora dati associati a quello. Siano utenti attivi, che alias rimasti da operazioni precedenti, o addirittura utenti sospesi. Non sempre dalla console è agevole trovare queste informazioni in velocità. E al momento non esiste un prospetto globale che a colpo d’occhio ci mostri tutti questi dati. Il risultato è noto a tutti gli admin: lunghe perdite di tempo per trovare intoppi banali.

Il foglio con script annesso che presento qui viene incontro a questa esigenza. Con una serie molto semplice di funzioni, permette di avere una lista completa di tutti gli utenti e gruppi di Workspace, insieme ai loro eventuali alias. Il foglio di lavoro, che si ripulisce automaticamente ad ogni utilizzo, genera in sequenza:

  • un foglio per ogni dominio associato al nostro account Workspace – un suffisso specifica se si tratta di dominio principale, secondario o alias di dominio
  • una lista completa degli utenti di ogni dominio
  • sono elencati sia gli utenti attivi (all’inizio del foglio) che quelli sospesi (in coda, ed evidenziati diversamente)
  • se presenti, vengono riportati gli alias degli utenti
  • funzioni analoghe per i gruppi

In questo modo i dati che ci occorrono sono pronti in pochi secondi. È semplice utilizzarli, essendo tutti sott’occhio in un unico prospetto. Ed eventualmente, trovandosi già in un foglio di lavoro, possiamo elaborarli con facilità ricorrendo a formule e visualizzazioni filtrate.

Utilizzare il foglio

Questa volta è molto semplice. È sufficiente:

Il codice

Anche questo molto semplice, e commentato a sufficienza.

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Liste utenti e gruppi')
    .addItem('Impostazioni iniziali', 'imposta')
    .addItem('Genera liste', 'generaListe')
    .addToUi();
}

function generaListe() {

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  // recupera i domini e li distribuisce in variabili e array per tipologia
  var domini = AdminDirectory.Domains.list('my_customer').domains;
  var dominioPrincipale;
  var dominiSecondari = [];
  var dominiAlias = [];
  for (i = 0; i < domini.length; i++) {
    var dom = domini[i];
    if (dom.isPrimary) {
      dominioPrincipale = dom.domainName;
    } else {
      dominiSecondari.push(dom.domainName);
    }
    if (dom.domainAliases) {
      for (j = 0; j < dom.domainAliases.length; j++) {
        dominiAlias.push(dom.domainAliases[j].domainAliasName);
      }
    }
  }

  // recupera gli utenti del dominio
  var utenti = recuperaUtenti();

  // recupera i gruppi del dominio
  var gruppi = recuperaGruppi();

  // pulisce il foglio di lavoro
  var fogliDaEliminare = spreadsheet.getSheets().filter(f => f.getName() !== 'istruzioni');
  if (fogliDaEliminare.length > 0) {
    for (f = 0; f < fogliDaEliminare.length; f++) {
      spreadsheet.deleteSheet(fogliDaEliminare[f]);
    }
  }

  // crea un foglio distinto per ogni dominio, e lo popola con i dati
  // utenti attivi all'inizio, eventuali utenti sospesi alla fine

  var foglioAttivo;
  var dominioProcessato;

  // foglio del dominio principale
  dominioProcessato = dominioPrincipale;
  foglioAttivo = spreadsheet.insertSheet().setName(`utenti su ${dominioProcessato} - principale`);
  popolaFoglioUtenti(foglioAttivo, utenti, dominioProcessato);
  foglioAttivo = spreadsheet.insertSheet().setName(`gruppi su ${dominioProcessato} - principale`);
  popolaFoglioGruppi(foglioAttivo, gruppi, dominioProcessato);

  // fogli dei domini secondari
  if (dominiSecondari.length > 0) {

    for (d = 0; d < dominiSecondari.length; d++) {
      dominioProcessato = dominiSecondari[d];
      foglioAttivo = spreadsheet.insertSheet().setName(`utenti su ${dominioProcessato} - secondario`);
      popolaFoglioUtenti(foglioAttivo, utenti, dominioProcessato);
      foglioAttivo = spreadsheet.insertSheet().setName(`gruppi su ${dominioProcessato} - secondario`);
      popolaFoglioGruppi(foglioAttivo, gruppi, dominioProcessato);
    }
  }

  // fogli dei domini alias
  if (dominiAlias.length > 0) {
    for (d = 0; d < dominiAlias.length; d++) {
      dominioProcessato = dominiAlias[d];
      foglioAttivo = spreadsheet.insertSheet().setName(`utenti su ${dominioProcessato} - alias di dominio`);
      popolaFoglioUtenti(foglioAttivo, utenti, dominioProcessato);
      foglioAttivo = spreadsheet.insertSheet().setName(`gruppi su ${dominioProcessato} - alias di dominio`);
      popolaFoglioGruppi(foglioAttivo, gruppi, dominioProcessato);
    }
  }

  // riporta l'utente al foglio con il dominio principale
  spreadsheet.setActiveSheet(spreadsheet.getSheets()[1]);

}



// ------------- funzioni ausiliarie -------------
// ***********************************************


// funzione vuota iniziale - per impostazione autorizzazioni
function imposta() {
}


// recupera tutti gli utenti dell'account Workspace - di tutti i domini
function recuperaUtenti() {
  var pageToken;
  var page;
  var utenti = [];
  do {
    page = AdminDirectory.Users.list({
      customer: 'my_customer',
      orderBy: 'givenName',
      maxResults: 300,
      pageToken: pageToken
    });
    var users = page.users;
    if (users) {
      for (var i = 0; i < users.length; i++) {
        var user = users[i];
        utenti.push(user);
      }
    } else {
      Logger.log('No users found.');
    }
    pageToken = page.nextPageToken;
  } while (pageToken);
  return utenti;
}


//recupera tutti i gruppi dell'account Workspace - di tutti i domini
function recuperaGruppi() {
  var gruppi = [];
  var pageToken;
  var page;
  do {
    page = AdminDirectory.Groups.list({
      customer: 'my_customer',
      maxResults: 100,
      pageToken: pageToken
    });
    var groups = page.groups;
    if (groups) {
      for (var i = 0; i < groups.length; i++) {
        var group = groups[i];
        if (group.aliases) {
          gruppi.push([group.name, group.email, group.aliases.toString()]);
        } else {
          gruppi.push([group.name, group.email, '']);
        }
      }
    } else {
      Logger.log('No groups found.');
    }
    pageToken = page.nextPageToken;
  } while (pageToken);
  return gruppi;
}



// scrive i valori degli utenti nel foglio attivo
// gli utenti attivi prima, gli utenti sospesi in fondo
function popolaFoglioUtenti(foglio, utenti, dominio) {
  foglio.setColumnWidths(1, 2, 350).setColumnWidth(3, 150).setColumnWidth(4, 450);
  foglio.getRange(1, 1, 1, 4).setFontWeight("bold").setFontSize(11).setValues([['utente', 'unità organizzativa', 'stato', 'alias']]);
  var utentiAttivi = filtraUtenti(utenti, dominio, 'attivi');
  var utentiSospesi = filtraUtenti(utenti, dominio, 'sospesi');
  var utentiTotali = utentiAttivi.concat(utentiSospesi);
  if (utentiTotali.length > 0) {
    foglio.getRange(2, 1, utentiTotali.length, utentiTotali[0].length).setFontSize(11).setValues(utentiTotali).setBackground('#b8e0d8');
    if (utentiSospesi.length > 0) {
      foglio.getRange(utentiAttivi.length + 2, 1, utentiSospesi.length, utentiTotali[0].length).setBackground('#edc36f');
    }
  }
}

// filtra gli utenti per dominio e stato passati come parametri
// restituisce array ridotto ai soli dati essenziali: username, uo, stato ed eventuali alias
function filtraUtenti(arrayUtenti, dominio, stato) {
  var dicituraStato = (stato == 'attivi' ? 'attivo' : 'sospeso');
  return arrayUtenti.filter(elem => elem.primaryEmail.split('@')[1] == dominio)
    .filter(el => el.suspended == (stato == 'attivi' ? false : true))
    .map(function (x) {
      if (x.aliases) {
        return [x.primaryEmail, x.orgUnitPath, dicituraStato, x.aliases.toString()];
      } else {
        return [x.primaryEmail, x.orgUnitPath, dicituraStato, ''];
      }
    })
}


// scrive i valori dei gruppi nel foglio attivo
function popolaFoglioGruppi(foglio, gruppi, dominio) {
  var gruppoFiltrato = gruppi.filter(el => el[1].split('@')[1] == dominio);
  foglio.setColumnWidths(1, 3, 400);
  foglio.getRange(1, 1, 1, 3).setFontWeight("bold").setFontSize(11).setValues([['nome gruppo', 'email gruppo', 'alias']]);
  if (gruppoFiltrato.length > 0) {
    foglio.getRange(2, 1, gruppoFiltrato.length, gruppoFiltrato[0].length).setValues(gruppoFiltrato);
  }
}

Potrebbe interessarti anche…

Eliminare utenti di Google Workspace per gruppo

Caricamento collettivo utenti con controllo preliminare dei duplicati

This error message is only visible to WordPress admins

Error: No connected account.

Please go to the Instagram Feed settings page to connect an account.