Nella console di amministrazione di Google Workspace non è possibile eliminare molteplici utenti selezionandoli per gruppo, ma solo per unità organizzativa. Mentre in altre strutture organizzative questa non è nemmeno un’esigenza, per una scuola può rappresentare una comodità rilevante. Al cambio di anno scolastico, infatti, dobbiamo eliminare gli studenti in uscita, che normalmente sono già suddivisi in gruppi per classe.
Una soluzione… complicata
Alcuni istituti ovviano al problema creando una sotto-unità organizzativa per ogni classe, in modo da gestire velocemente il passaggio di anno, con la relativa eliminazione degli studenti in uscita. Certamente un vantaggio nel momento di cambio anno scolastico, anche se questa non è la soluzione ottimale per altri versi. Primo perché creiamo unità organizzative non necessarie. Gli studenti di 2A normalmente non hanno bisogno di autorizzazioni diverse da quelli di 3B, non si spiega quindi perché inserirli in unità organizzative diverse. Se non appunto per gestire il cambio d’anno. Secondo, aumentiamo il lavoro di gestione. Gli alunni vanno e vengono anche in corso d’anno: trasferimenti, cambi di sezione, alunni di passaggio. Ognuna di queste modifiche va replicata nell’unità organizzativa e nel gruppo dell’alunno in questione. Ed aumenta contestualmente la possibilità di errori o dimenticanze.
Gruppi dinamici? Non in questo caso
Una soluzione a quest’ultimo problema – la duplicazione delle operazioni su unità organizzative e gruppi – potrebbe essere data dai gruppi dinamici. Questi sono gruppi in cui l’appartenenza è gestita in modo automatico a partire da alcuni criteri dati dall’amministratore. I membri di questi gruppi non vengono quindi inseriti manualmente (o da file .csv), ma sono aggiunti e rimossi dalla console in base alla corrispondenza ad un criterio.
Ci sono però due problemi nel nostro scenario:
- i gruppi dinamici non sono disponibili per Workspace for Education Fundamentals, ma solo nelle versioni a pagamento
- tra i criteri di appartenenza configurabili non c’è l’unità organizzativa (per ora?), ma solo altri attributi normalmente poco utilizzati in una scuola
Anche se abbiamo una versione a pagamento di Workspace dunque, dovremmo aggiungere ad ogni utente un attributo specifico, in modo da assegnarlo automaticamente al gruppo classe. Di nuovo, doppio lavoro che vogliamo evitare.
Sto attualmente lavorando ad uno script che simula il funzionamento dei gruppi dinamici, introducendo anche il criterio dell’unità organizzativa. In questo modo, le scuole che strutturano le unità organizzative per classe potrebbero evitare il doppio lavoro di gestione parallela dell’appartenenza ai gruppi.
Pubblicherò qui lo script con alcune indicazioni non appena pronto. Puoi iscriverti alla Newsletter per ricever una notifica quando l’aggiornamento verrà pubblicato.
La situazione più classica
Molti istituti non articolano in modo così dettagliato le unità organizzative, lavorando in linea con la logica delle console di amministrazione. Si creano meno unità organizzative possibili, solo quelle necessarie. E sono necessarie solo quando bisogna assegnare autorizzazioni diverse a diversi insiemi di utenti. Questi istituti, d’altro canto, hanno maggior carico di lavoro per il cambio d’anno.
In questa situazione, poter eliminare gli utenti di Google Workspace filtrandoli per gruppo potrebbe essere un vantaggio. Qui trovi un foglio di lavoro con script annesso che fa esattamente questo. La procedura è semi-automatica, e procede in due fasi. Prima viene generato un elenco dei membri del gruppo che vuoi eliminare, e riportato nel foglio di lavoro. In questo modo puoi controllare anche visivamente gli account degli studenti prima di eliminarli. E se necessario, puoi modificare manualmente la lista – ad esempio per gli studenti che non sono stati promossi. Solo a questo punto, con una funzione distinta, procedi all’eliminazione degli utenti in lista nel foglio. Un passaggio in più, ma una maggior sicurezza prima di procedere.
Attivazione ed utilizzo del foglio
Il procedimento è molto semplice:
- crea una copia del file nel tuo Drive da questo link: rimuovere utenti per gruppo
- eventualmente, rinomina il file e spostalo nella cartella che preferisci
- clicca sul menu Funzioni personalizzate (compare dopo alcuni istanti) e scegli Impostazioni primo utilizzo: selezione l’account admin di Workspace e concedi le autorizzazioni richieste (più info e screenshot per questa prima fase in questo post)
- scegli la voce di menu Genera lista utenti per gruppo ed inserisci l’email del gruppo che ti interessa; la lista dei membri verrà scritta nel primo foglio
- dopo aver controllato ed eventualmente modificato l’elenco, scegli la voce di menu Elimina utenti gruppo: tutti gli utenti elencati nel primo foglio verranno eliminati
Controlli e sicurezza
Ad ogni funzione sono associati alcuni controlli preliminari, in modo da ridurre errori e cancellazioni frettolose.
Prima di generare la lista dei membri, la funzione controlla se il gruppo è esistente (in caso di errore di digitazione) e se è vuoto. In entrambi i casi un messaggio avvisa dell’errore, e la funzione si interrompe.
La funzione di eliminazione utenti invece controlla anzitutto che il foglio non sia vuoto. Nel caso non lo sia, una notifica ci avverte che stiamo per eliminare tutti gli utenti elencati nel foglio di lavoro. Possiamo quindi scegliere se procedere, o interrompere la funzione per controllare meglio. Procedendo con l’eliminazione, la funzione scrive accanto ad ogni utente l’esito della procedura: eliminato in caso di successo, o il tipo di errore se ha incontrato problemi. In questo modo è possibile sia verificare se tutti gli utenti sono stati eliminati, sia correggere eventuali problemi con le indicazioni dell’errore riscontrato.
Il codice
Il codice annesso allo script è piuttosto semplice, e non ha bisogno di molti commenti.
function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('Funzioni personalizzate') .addItem('Impostazioni primo utilizzo', 'primoUtilizzo') .addItem('Genera lista utenti per gruppo', 'generaListaUtentiGruppo') .addItem('Elimina utenti gruppo', 'eliminaUtentiGruppo') .addToUi() } function generaListaUtentiGruppo() { var foglio = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('elenco utenti per gruppo'); foglio.clear(); var ui = SpreadsheetApp.getUi(); var risposta = ui.prompt(`Inserisci l'indirizzo email del gruppo di cui vuoi generare la lista`).getResponseText(); Logger.log(risposta); try { var gruppo = AdminDirectory.Groups.get(risposta).email; } catch (e) { ui.alert(`L'indirizzo email ${risposta} non corrisponde a nessun gruppo nel tuo dominio. Esegui nuovamente la funzione e riprova.`); return; } Logger.log(gruppo); var listaUtenti; try { listaUtenti = AdminDirectory.Members.list(gruppo).members.map(x => x.email); } catch (e) { listaUtenti = []; } Logger.log(listaUtenti); if (listaUtenti.length == 0) { ui.alert(`Il gruppo selezionato non ha membri`); return } var datiUtenti = listaUtenti.map(el => [el, gruppo]); foglio.getRange(1, 1, datiUtenti.length, datiUtenti[0].length).setValues(datiUtenti); Logger.log(datiUtenti); } function eliminaUtentiGruppo() { var foglio = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('elenco utenti per gruppo'); var ui = SpreadsheetApp.getUi(); if (foglio.getLastRow() == 0) { ui.alert(`Non ci sono utenti da eliminare nel foglio`); return; } var utenti = foglio.getRange(1, 1, foglio.getLastRow(), 2).getValues(); Logger.log(utenti); let risposta = ui.alert('Stai per eliminare tutti gli utenti elencati nel foglio di lavoro. Vuoi procedere?', ui.ButtonSet.YES_NO); if (risposta == ui.Button.NO) { ui.alert(`Procedura interrotta. Nessun utente è stato eliminato`); return; } else { var esiti = []; for (u = 0; u < utenti.length; u++) { let utente = utenti[u][0] try { AdminDirectory.Users.remove(utente); esiti.push(['utente eliminato', '']) } catch (e) { esiti.push(['utente non eliminato', e]) } } Logger.log(esiti); foglio.getRange(1, 3, esiti.length, 2).setValues(esiti); } } // funzione di impostazione autorizzazioni // la funzione è vuota, in quanto serve solo a richiamare la finestra delle autorizzazioni function primoUtilizzo() { }
Se hai bisogno di procedere all’eliminazione di un alias, anziché di un utente vero e proprio, trovi indicazioni nel post Eliminare in blocco alias di utenti.
Ottimo! Bravo come sempre… Ti chiedo nel caso di gruppi di alunni per classe c’è una funzione per spostare gli alunni dal gruppo 4a al gruppo 5a, oppure per rinominare il gruppo per la classe successiva?
Grazie
ciao Alessandro, ci sto lavorando. sconsiglio sempre di spostare gli alunni di gruppo, io preferisco il rinomina. serve qualche attenzione, perchè quando rinomini il nome precedente del gruppo non viene eliminato, ma trasformato in alias. si deve quindi partire dalle classe alte e procedere a ritroso, l’ultimo gruppo classe va rinominato con nome temporaneo (ad es ex-3a.matteotti@miascuola.it), poi rinomini le altre classi avanzando di uno, e infine rinomini l’ex-3a in 1a. ad ognuno di questi passaggi, devi ricordarti di eliminare il relativo alias che viene creato. gestire tutto questo con script è un po’ complesso, ma si fa. io in verità sto lavorando a qualcosa che semplifichi ulteriormente la gestione gruppi: visto che nella mia scuola – e in molte – anche le unità organizzative sono articolate per gruppo classe, sto preparando uno script che simula i gruppi dinamici. io al cambio anno (o anche per gli ingressi/uscite singoli di alunni) aggiorno solo la posizione dell’utente nelle unità organizzative (rinomino uo al cambio anno, inserisco utenti singoli in corso d’anno). i gruppi classe sono già stati creati, ma non li gestisco più manualmente. uno script ogni notte legge il contenuto delle unità organizzative alunni, e sincronizza di conseguenza i gruppi classe, aggiungendo, togliendo o spostando. devo lavorarci ancora un po’ su, ma quando disponibile lo pubblico qui. andrà molto personalizzato alla situazione di ogni scuola, ma può essere un buon aiuto
Ho letto la risposta al quesito e mi ha colpito una frase: “sconsiglio di spostare gli alunni di gruppo”: mi chiedevo perchè è sconsigliabile? Grazie e buona serata!
ciao Martino! si tratta di effetti secondari, che proprio secondari non sono… facciamo l’esempio di un gruppo classe, chiamiamolo classe4@mioistituto.it. quest’anno condivido una cartella di Drive con questo gruppo – i miei alunni. se al cambio di anno l’amministratore svuota questo gruppo degli alunni di quarta per metterli in quinta (dove sono stati promossi) e poi lo riempie con gli ex alunni di terza (ora di quarta ) succede che i miei alunni di quinta non hanno più la cartella condivisa con loro – perché era stata condivisa con il gruppo, e non con ciascuno di loro singolarmente: ora che non fanno più parte del gruppo, non hanno accesso alla cartella. viceversa, gli ex alunni di terza, ora di quarta, non sono miei alunni ma hanno accesso alla cartella, per lo stesso motivo. moltiplica questo problema per tutti gli scenari in cui vengono utilizzati i gruppi: condivisioni di calendari, note di keep, siti, meet ricorrenti… al contrario, se rinomini i gruppi (sia un rinomina soft, del solo nome visualizzato, che rinomina hard, con modifica dell’indirizzo email del gruppo) Workspace aggiorna in tutti i servizi (Drive, Calendar, ecc.) il nome del gruppo, ma la condivisione resta invariata. anche nel caso del rinomina hard, l’identificatore interno del gruppo è un ID immutabile (non visibile agli utenti finali, serve solo per utilizzi di sistema) sul quale però il sistema basa la continuità dell’identità del gruppo al di là delle modifiche, e questo permette di avere condivisioni invariate
Ciao Daniele, ho letto questa risposta…
Lo script per fare questa operazione di lettura delle UO scrivendo automaticamente i gruppi corrispondenti è già stato pubblicato?
Io fino allo scorso anno svuotavo e riempivo di nuovo i gruppi, ma in effetti il tuo commento sotto mi ha fatto molto pensare alla scelta di rinominare, ma, come dici anche tu, la pletora degli alias è un po’ un problema.
Cosa mi consigli?
ciao Andrea, scusa la risposta molto tardiva. lo script uo > gruppi non è stato pubblicato, lo sto testando nella mia scuola al momento. gli effetti collaterali dello spostamento degli alunni restano, come indicato nel commento che hai letto. alla difficoltà di gestione degli alias si è aggiunto di recente un ulteriore problema: non è più possibile utilizzare lo script che ho pubblicato in altro post per eliminare in modo centralizzato tutti gli autocompletamenti ‘vecchi’ dopo la rinomina dei gruppi classe al cambio di anno. Google ha dismesso l’API Contacts su cui lo script si basava, senza introdurre funzionalità analoga nella nuova API People che sostituisce la precedente. risultato: ora se rinomini i gruppi non puoi più fare una pulizia da admin, ma ogni utente dovrebbe farla nella propria sezione di Altri contatti dall’app Contatti… non lo fa quasi nessuno. fino all’inizio di quest’anno mi sono regolato con rinomina gruppi + script per pulizia, d’ora in avanti non so cosa consigliare, tutte le soluzioni danno problemi da sistemare a mano. spero che Google introduca presto la nuova funzionalità in People – l’abbiamo chiesta in tanti. prima di quello non ho soluzioni efficaci funzionanti
Immensamente GRAZIE!
Ciao! Lo script è molto utile, anche per generare una lista di utenti del gruppo in modo un po’ più veloce rispetto ai comandi della console, grazie!
Pensi che si possa aggiungere allo script una funzione per svuotare il gruppo, senza eliminare gli utenti?
Federico
ciao Federico. sì può, ma esiste un componente aggiuntivo che già lo fa, e ha inoltre un sacco di funzionalità simili molto utili. sì chiama Ok Goldy, se lo cerchi e lo installi l’utilizzo è veloce ed intuitivo, fa anche quello che chiedi
Ho dato le autorizzazioni richieste per il primo utilizzo, ho digitato il nome del primo gruppo (ho eliminato prima la riga di esempio con il tuo nome) e selezionato “genera lista utenti…” ma mi da il messaggio di errore Cannot read property ‘clear’ of null. Cosa non va?
Risolto! Grazie mille per il tuo lavoro! <3
di nulla! mi fa piacere che funzioni
Ciao c’è un modo per eliminare gli utenti che sono inattivi?
di preciso cosa intendi per inattivi? che hanno effettuato l’accesso almeno una volta ma non utilizzano l’account da un tot di tempo?
Ottimo!! Grazie! Sarebbe molto interessante, invece, creare in maniera massiva i gruppi, magari partendo da un foglio con le colonne Descrizione e email gruppo.
Ciao Daniele, volevo chiederti se è possibile modificare lo script in modo che si possano selezionare, separandoli con la virgola, più gruppi di cui si vogliano eliminare gli utenti oppure in modo che si possano accodare gli utenti di gruppi successivamente digitati. Attualmente sono sovrascritti e si può usare il foglio per eliminare gli account di singoli gruppi per volta. Mi spiego meglio: se voglio eliminare gli account degli studenti di tutte le classi quinte perché quasi tutti si sono diplomati, come posso generare un unico elenco e poi procedere all’eliminazione cumulativa di tutti gli account?
ciao Aldo, ottima richiesta. ho provato a fare qualcosa al volo, mi sembra funzioni come chiedi. se vuoi provare, puoi creare una copia del nuovo file da questo link: https://docs.google.com/spreadsheets/d/19x_lXcMKL3nLjdO8Pz7avGelI8NIuL-r6p7aTSUceIQ/copy. funziona tutto come da post, tranne per il fatto che puoi inserire più gruppi separati da virgola, ed elaborerà tutti gli utenti dei gruppi indicati. se provi e ti va di darmi riscontro (sia che funzioni, sia che abbia qualcosa da sistemare) rifinisco il tutto e lo pubblico come aggiunta al post per chi ne avesse bisogno. grazie in anticipo!
Grazie mille, l’accodamento funziona. Non ho completato la procedura di eliminazione perché non è ancora scaduto il termine di preavviso che ho dato agli studenti per salvare altrove i loro dati
perfetto. l’eliminazione funzionerà come atteso, non ho modificato la funzione nè la logica di recupero dei dati dal foglio. grazie del riscontro, appena ho un attimo integro il post con la nuova variante
Funziona anche l’eliminazione nel nuovo foglio