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:
- copia il file da questo link: https://docs.google.com/spreadsheets/d/1kmsSD-S-5fWfalxHEr6Leps8mpqVayyNjAAFYNLbn34/copy – eventualmente rinominalo e spostalo
- concedi le autorizzazioni eseguendo la funzione Impostazioni iniziali nel menu Liste utenti e gruppi
- lanciare la funzione Genera liste per creare il prospetto completo
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
Ottimo! Partendo da questo foglio all’inizio dell’anno (attraverso alcuni scripts da aggiungere) si potrebbe in modo agevole far fare lo scorrimento di UO (dalle classi dell’anno scorso a quelle attuali)
Grazie per aver condiviso questo utilissimo script. Ho trovato un sacco di correzioni di indirizzi che hanno generato alias non desiderati.
Continuo ad avere questo problema: non riesco a creare un gruppo nominato seconda.b22-23@miodominio.edu.it perché mi restituisce l’errore “Esiste già un gruppo o un alias con questa email” nonostante né dalla ricerca in Console né dal foglio generato dallo script riesca a provare questo indirizzo. Avresti qualche idea per aiutarmi? Grazie
ciao Chiara, per iniziare farei queste operazioni (scrivo tutto, anche se avrai sicuramente già fatto molte o forse tutte queste cose): 1. da console di amministrazione digitare nella casella di ricerca il nome del gruppo, vediamo se lo trova 2. attendere anche un paio di giorni (non di più) e riprovare, se è un gruppo/alias eliminato normalmente la modifica è quasi istantanea, molto saltuariamente potrebbe impiegarci ore (anche fino a 48), escludi questa ipotesi per prima 3. riprovare la ricerca di alias con il foglio di questo post 4. verifica se hai più domini nella tua console di amministrazione, la situazione potrebbe essere un po’ più complessa di quella standard
se nulla di questo ti fa scoprire qualcosa riposta e vediamo
Daniele intanto GRAZIE, stesso problema di Chiara, nessuna delle soluzioni suggerite funziona, quindi? bug del sistema? cosa può essere? ora ne dico una grossa forse, sono entrato qs anno come amm.re, in precedenza i gruppi delle classi e/o dei consigli li facevano gestire in autonomia ai referenti, con un casotto indefinito, può essere che qualcuno che era abilitato come proprietario\gestore abbia creato il gruppo ed in qualche modo questo sia rimasto in pancia da qualche parte? (l’ho sparata grossa?) non so cosa pensare sinceramente GRAZIE ciao
ciao Marco, un gruppo creato da qualche utente che sia rimasto in qualche modo nascosto non è possibile. quando si lavora in workspace, qualunque gruppo creato da chiunque è sempre visibile a livello globale, a maggior ragione dalla console di amministrazione. sinceramente non ho più riguardato la cosa, visto che il problema di Chiara non era più stato fatto presente. oltre a quanto avevo già suggerito a suo tempo non ho altre idee al momento. quando ho 10 minuti provo a verificare e vedo se c’è qualcos’altro che si può tentare