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.

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.