Code Monkey home page Code Monkey logo

office365-scoutnet-synk's Introduction

Office365-Scoutnet-synk

Synkronisering av Scoutnets e-postlistor till Office 365.

Du kan med de här funktionerna synkronisera användarkonton med personer i Scoutnet som har en funktionärsroll samt synkronisera distributions listor med e-postlistor i Scoutnet.

Modulen Office365-Scoutnet-synk är tänkt att användas i Azure automation, och köras ifrån en runbook. Microsoft Azure Sponsorship ingår när man får Microsoft Office 365 non-profit.

Azure gratiskonto kan troligtvis också användas, då det ingår 500 minuter Azure automation.

Modulen går även att köra på en dator som har minst Powershell 5.1 installerad. Powershell 7.1 stöds också så modulen går att köra på linux.

Vid problem, fel, frågor eller tips på förbättringar eller fler funktioner som du saknar; lägg ett ärende under Issues eller mejla [email protected]

I bland kommer det ny funktionalitet, så håll utkik på en ny version genom att trycka på knappen Watch uppe till höger på sidan för att du kunna bli notifierad vid en ny version.

Du kan ladda ner den senaste versionen via https://github.com/scouternasetjanster/Office365-Scoutnet-synk/releases/latest och där kan du också ser vilken funktionalitet som är ny i respektive version.

Eller via https://www.powershellgallery.com/packages/Office365-Scoutnet-synk där senaste versionen alltid är publicerad.

Läs filen README.md för instruktion om installation och funktionalitet.

Inställningar

Generella inställningar

I non-profit portalen aktivera scoutkårens Microsoft Azure Sponsorship Subscription https://nonprofit.microsoft.com/offers/azure och logga in på Azure online med en användare som är "domänadmin".

För att skapa en resursgrupp och ett Azure Automation Account finns skriptet setupAzure.ps1 som skapar en Azure Automation Account i en resursgrupp. Sen installeras nödvändiga moduler och senaste Office365-Scoutnet-synk modulen.

Skriptet frågar även efter API nycklarna för scoutnet och skapar Credential Asset för de med namnen som är i exemplet.

setupAzure.ps1 ska köras på en PC med windows powershell 5.1 eller powershell 7.1 (eller nyare). När skriptet loggar in mot Azure så välj en användare som är "domänadmin".

När skriptet är klart kan instruktionerna i Synkronisera grupper användas för att sätta upp synkronisering.

Att skapa och sätta upp kontot manuellt går till ungefär så här:

  1. Skapa ett Azure Automation Account och koppla det till "Microsoft AzureSponsorship Subscription".

    1. Bra namn är Scoutnet-synk på kontot och resursgruppen.
    2. Välj Sweden Central som Location.
  2. Lägg till Office365-Scoutnet-synk som en modul.

    1. Gå in på https://www.powershellgallery.com/packages/Office365-Scoutnet-synk
    2. Välj Azure Automation och tryck på "Deploy to Azure Automation" Modulen kommer nu installeras på Azure Automation.
  3. I Scoutnet aktivera APIet under Webbkoppling (API-nycklar och endpoints). Modulen behöver ha tillgång till:

    • Get a detailed csv/xls/json list of all members. (api/group/memberlist)
    • Get a csv/xls/json list of members, based on mailing lists you have set up. (api/group/customlists)
  4. I Azure resursgruppen skapa Credential Asset för varje API nyckel. Användarnamnet är Kår-ID för webbtjänster som står på sidan Webbkoppling. Lösenordet är API-nyckeln.

    1. Credential Asset: ScoutnetApiCustomLists, API-nyckel för api/group/customlists
    2. Credential Asset: ScoutnetApiGroupMemberList, API-nyckel för api/group/memberlist

Synkronisera grupper

  1. Logga in på office 365 adminkonsollen och skapa de distributions listor du vill använda.

    1. Typen ska vara Distribution list för att synkroniseringen ska fungera. :warning: Office365 grupper stöds ej.
    2. Namnet kan vara beskrivande, men skriv ett alias som är kort och bara har ASCII tecken i sig.
  2. I Scoutnet skapa Fördefinierade listor för distributions listorna. T.ex en lista för Spårare som är avsedd för att skicka brev till scouternas föräldrar. För att synkroniseringen ska fungera smidig skapa följande regler på varje lista, där regeln ledare hanteras av ledare_synk_option. Övriga regler styrs av scouter_synk_option.

    • Ledare: Regel som matchar ledarna på avdelningen. Döp den till ledare. Hur adresser synkroniseras styrs av ledare_synk_option.
    • Assistenter: Regel som matchar assistenterna på avdelningen. Döp den till assistenter. Hur adresser synkroniseras styrs av scouter_synk_option.
    • Scouter: Regel som matchar scouterna på avdelningen. Döp den till scouter. Hur adresser synkroniseras styrs av scouter_synk_option.

    Regelnamnen behöver inte användas om du bara vill styra med scouter_synk_option.

  3. I Azure automation skapa runbooken MaillistSynk för synkroniseringen. Typen ska vara PowerShell Runbook

  4. I Azure automation under Shared Resources, skapa variabeln ScoutnetMailListsHash av typen string.

  5. Kopiera koden ifrån exemplet MaillistSynk.ps1.

  6. Ändra inställningarna så att de matchar scoutkårens Scoutnetprofil och Office 365. T.ex vilka listor som ska uppdateras.

  7. Prova att köra MaillistSynk.

  8. När MaillistSynk fungerar publicera runbooken.

  9. Azure automation under Shared Resources, skapa en schedule för att regelbundet köra MaillistSynk.

    1. Rekommendationen är att köra nattetid (kl 3 eller 4), då det kan ta en stund att köra MaillistSynk.

Manual

Office 365 användarkonton - synkronisering med Scoutnet

Synkroniserar personer som som är med på e-postlistor från Scoutnet genom att man anger id-numret för e-postlistan i workbooken. Det går bra att ange flera e-postlistor med kommatecken. Se exemplen i filen.

Om inget id-nummer för en e-postlista anges så tolkar programmet det som alla personer i kåren som har en avdelningsroll eller roll på kårnivå och skapar användarkonton på kårens Office 365 åt dem.

Om ett användarkonto vid nästkommande synkronisering ej matchar någon person som synkroniseras så inaktiveras konto. Om personen senare matchas aktiveras kontot igen. Det är bara konton som finns i säkerhetsgruppen Scoutnet i Office 365 som berörs vid en synkronisering. Användarkonton skapas på formen fornamn.efternamn@domännamn.se

Om det finns personer som har samma namn (för- och efternamn) angivet i Scoutnet kommer de som skapas som nr2 osv skapas på formen fornamn.efternamn.x@domännamn.se där X motsvarar en siffra från 1-5.

Exchange fältet CustomAttribute1 innehåller Scoutnet ID. Lägger du till användare manuellt och de ska kunna automatisk komma med i distributionsgrupper så behöver du fylla i CustomAttribute1 med personens Scoutnet ID.

Funktionen för användarsynkronisering heter Invoke-SNSUppdateOffice365User.

Inställningar

I exempelfilen så är det några inställningar att ändra:

  • Ändra kårens domän namn på variabeln $conf.DomainName.
  • Ändra mottagaradress i variabeln LogEmailToAddress.
  • Ändra licensinställningen i variabeln LicenseAssignment.
  • Ändra eller ta bort grupp för alla ledare i variabeln $conf.AllUsersGroupName.
  • Ändra standardsignatur i $conf.SignatureText och $conf.SignatureHtml.
  • Ändra rubrik och test på välkomstbrev i $conf.NewUserEmailSubject och $conf.NewUserEmailText. Välkomstbrevet skickas till medlemmes primära e-postadress i scouten.
  • Ändra rubrik och test på informationsbrev i $conf.NewUserInfoEmailSubject och $conf.NewUserInfoEmailText.
    • Informationsbrevet skickas till användarens nya e-postadress. Kan t.ex innehålla information om var du kan hitta sharepointsiten.

Office 365 distributionsgrupper - synkronisering med Scoutnet

Synkronisering av Office 365 distributionsgrupper med e-postlistor i Scoutnet. Där en distributionsgrupp är kopplad till en e-postlista i Scoutnet.

mailListSettings

I variabel $conf.MailListSettings ställ in de Office 365 distributionsgrupper som ska synkroniseras med Scoutnet. Namnet måste gå att matcha mot en distributionsgrupp i Office365.

Exempel:

$conf.MailListSettings = @{
    "utmanare" = @{ # Namnet på distributions gruppen i office 365.
        "scoutnet_list_id"= "0001"; # Listans Id i Scoutnet.
        "scouter_synk_option" = ""; # Alla adresser i scoutnet.
        "ledare_synk_option" = "@"; # Bara office 365 adresser
        "email_addresses" = "[email protected]","[email protected]";  # Lista med e-postadresser.
        "ignore_user" = "12345", "54321"; # Lista med ScoutnetId som ignoreras.
    };
    "aventyrare" = @{ Namnet på distributions gruppen i office 365.
        "scoutnet_list_id"= "0002";
        "scouter_synk_option" = ""; # Alla adresser i scoutnet.
        "ledare_synk_option" = "@"; # Bara office 365 adresser
        "email_addresses" = "";
    };
    "lager" = @{ Namnet på distributions gruppen i office 365.
        "statisk_lista" = "Ja"; # Listat är en statisk Scoutnetlista.
        "scoutnet_list_id"= "0003";
        "ledare_synk_option" = "t"; # Office 365 adresser eller scoutnet adress.
        "scouter_synk_option" = ""; # Används inte för statiska listor
        "email_addresses" = "";
    };
scouter_synk_option

I fältet scouter_synk_option kan du för respektive distributionsgrupp ange följande:

  • "@" Lägg till personens Office365-konto om den har något, annars hoppa över personen.
  • "t" Lägg till personens Office365-konto om den har något, annars personens e-postadress som listad i Scoutnet.
  • "-" Lägg endast till personens e-postadress som listad i Scoutnet.
  • "&" Lägg till både personens e-postadress som listad i Scoutnet samt Office365-konto om den har något.
  • Standard för scouter_synk_option är "-" Lägg endast till personens e-postadress som listad i Scoutnet.

Det går också att ställa in i detta fält vilka e-postadressfält från scoutnet som ska läggas till:

  • "p" Lägg till en medlems primära e-postadress
  • "f" Lägg till de e-postadresser som är angivet i fälten Anhörig 1,2. Alltså vanligtvis föräldrarna.
  • "a" Lägg till en medlems alternativ e-postadress.
  • Om man inte anger något används fälten primär e-postadress, anhörig 1, anhörig 2 och alternativ e-postadress.
ledare_synk_option

I fältet ledare_synk_option kan du för respektive distributionsgrupp ange följande:

  • "@" Lägg till personens Office365-konto om den har något, annars hoppa över personen.
  • "t" Lägg till personens Office365-konto om den har något, annars personens e-postadress som listad i Scoutnet.
  • "-" Lägg endast till personens primära e-postadress som listad i Scoutnet.
  • "&" Lägg till både personens primära e-postadress som listad i Scoutnet samt Office365-konto om den har något.
  • Standard för ledare_synk_option är "@" Lägg till personens Office365-konto om den har något, annars hoppa över personen.
email_addresses

Fältet email_addresses används för att lägga till extra e-postadresser till en distributionsgrupp. Lägg adresserna kommaseparerade.

Exempel:

"email_addresses" = "[email protected]","[email protected]";
ignore_user

Fältet ignore_user används för att inte lägga till specifika användare till en distributionsgrupp. Används om en e-postlista i Scoutnet matchar lite mer än vad du vill ha med.

Lägg ScoutnetId kommaseparerade.

Exempel:

"ignore_user" = "12345", "54321";
statisk_lista

Fältet statisk_lista används för att markera att listan är en statiskt konfigurerad lista i Scoutnet. Statiska listor i Scoutnet hanteras bara med regelerna ifrån ledare_synk_option.

Exempel:

"statisk_lista" = "Ja";

Ny version

  • Uppdatering av modulen sker genom att ladda ner en ny version och installera modulen.
Update-Module -Name Office365-Scoutnet-synk -Scope CurrentUser

Uppgradera till version 2.0

I version 2.0 så används Microsoft.Graph för användarkontohanteringen samt för att skicka e-post till nya användare. Samt så används ExchangeOnlineManagement v 3 för maillisthanteringen.

Lokalt kan du ta bort den gamla versionen och lägga in den nya så här.

Uninstall-Module Office365-Scoutnet-synk -AllVersions -Scope CurrentUser
Install-Module -Name Office365-Scoutnet-synk -Scope CurrentUser

Det gör att vissa ändringar behövs i skriptet som kör modulen.

  • LogEmailFromAddress och conf.EmailFromAddress måste vara samma konto som nvänds för att logga in eller så måste kontot ha rätt att skicka ifrån den adressen. Modulen Send-MgUserMailanvänds och den har en del begränsningar. Körs synkroniseringen med en "ManagedIdentity" i Azure online automation så kan man välja att den använda identiteten kan maila som andra konton på domänen.

  • Licenshanteringen är ändrad, så LicenseAssignment behöver ändras.

  • Inloggningshanteringen är ändrad. Nu måste Connect-SnSOffice365 användas för att logga in.

  • Modulen för att skicka e-post är bytt till Send-MgUserMail. Se slutet på exemplet för hur Send-MgUserMail används.

Hjälp

  1. Kolla i loggfilen så kanske du lyckas se vad problemet är.
  2. Det kan hända att det finns en bugg i den versionen av programmet som du kör vilket givet vissa specifika omständigheter yttrar sig för just dig. Se till att du har den senaste versionen av programmet.
  3. Lägg ett ärende under Issues eller mejla.

Testkörning

SNSUpdateExchangeDistributionGroups går att köra med flaggan -WhatIf. Med den flaggan aktiverad så kommer SNSUpdateExchangeDistributionGroups bara skriva ut vad den hade gjort, men inte göra några ändringar.

Tillsammans med flaggan -ReturnMaildata så kan man få ut vilka adresser en maillista kommer att innehålla.

Exempel

Körning utan ändringar och maillistdatan returneras i variabeln $mailListData.

$NewValidationHash, $mailListData = SNSUpdateExchangeDistributionGroups -Configuration $conf -ValidationHash "Tom" -ReturnMaildata -WhatIf

Tekniska förtydliganden

Uppdatering av distributions listor med hjälp av SNSUpdateExchangeDistributionGroups

SNSUpdateExchangeDistributionGroups hämtar maillist medlemmar ifrån Scoutnet och uppdaterar motsvarande distributions grupp i office 365. Då alla medlemmar i en distributions grupp måste finnas i Exchange som användare eller kontakt så kommer en kontakt för varje extern e-postadress att skapas.

Städning: Funktionen städar och tar bort kontakter till Scouter som slutat. Det här är för att kunna följa GDPR. Kontakter till Scouter som slutat ska tas bort.

SNSUpdateExchangeDistributionGroups beteende

  1. Validera att Scoutnet är uppdaterat. Om Scoutnet inte är uppdaterat avbryts synkroniseringen.
  2. Ta bort alla medlemmar ifrån de grupper som ska synkroniseras.
    1. Om kontakten inte används längre, radera den ifrån Exchange. Det här är för att kunna följa GDPR. Kontakter till Scouter som slutat ska tas bort.
  3. För varje distributions grupp lägg till de medlemmar som e-postlistan i scoutnet innehåller. För e-postadresser som är externa skapas det en kontakt i Exchange.
    1. Om office 365 adress är begärd i inställningarna så letas användaren med matchande Scoutnet ID upp. Exchange fältet CustomAttribute1 ska innehålla Scoutnet ID.
    2. Lägg in eventuella extra e-postadresser.

E-postadresser genereras på följande sätt

  1. För och efternamn görs om till gemener och tar bort alla mellanslag och andra tomrum som är skrivet i de fälten i Scoutnet.
  2. Därefter görs bokstäverna om till bokstäver som lämpar sig för e-postadresser. T.ex åäö blir aao.
  3. Om det därefter finns några fler konstiga tecken kvar som inte lämpar sig för e-postadress så tas de bort.
  4. Om det finns personer som har samma namn (för- och efternamn) angivet i Scoutnet kommer de som skapas som nr2 osv skapas på formen fornamn.efternamn.X@domännamn.se där X motsvarar en siffra från 1-5.

office365-scoutnet-synk's People

Contributors

kallemooo avatar webbmastern avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

office365-scoutnet-synk's Issues

Stäng av eventuell mail foward när ett konto avaktiveras

När en medlem slutar så stängs kontot i Office 365 av genom att stänga av möjligheten att logga in.
Har medlemmen satt upp en mail forward så kommer den fortfarande att vara aktiv.

Lägg till så att när ett konto blockeras pga att medlemmen slutat så ska eventuella mail forwards tas bort.

Ändra till att använda ExchangeOnlineManagement

Är din idé relaterad till ett problem?
För hantering av mailboxar och distributionslistor används idag modulen ExchangePowerShell.
ExchangePowerShell är föråldrad och kommer ersättas av ExchangeOnlineManagement

Beskriv hur idén kan implementeras
Ändra till att använda ExchangeOnlineManagement istället för ExchangePowerShell.

Information
Dokumentation för ExchangeOnlineManagement
https://techcommunity.microsoft.com/t5/exchange-team-blog/announcing-general-availability-of-the-exchange-online/ba-p/1436623

Ej ifylld Postort eller Postnummer gör att konto ej kan skapas

Beskriv problemet
Är Postort eller Postnummer ej ifyllt så kan inte kontot skapas.

Steg för att återskapa problemet
Om en användare misslyckas med att fylla i Postort eller Postnummer så får man felet

Kunde inte köra uppdateringen av användare. Fel: Error during user account creation. Error Could not create user
| 'xxx' for member 'yyy aaa' with id '99999'. Error Cannot index into a null array.

Förväntat beteende
Användare läggs till. Möjligtvis med en varning att postadressen är felaktig.

Automatisk svar ifrån avaktiverade konton

Är din idé relaterad till ett problem?
När en medlem slutar så stängs Office 365 kontot av genom att blockera inloggning. E-postadressen kommer fortfarande att fungera men ingen kan svara på den.

Om autoreply aktiveras när kontot avaktiveras så kan den som skickar brev till kontot få reda på att adressen är gammal och var e-post ska skickas i stället.

Beskriv hur idén kan implementeras
Lägg till en regel i Invoke-SNSDisableAccount som aktiverar autoreply om parametern SNSConfiguration::DisabledAccountsAutoReplyText innehåller text.

Lägg til en regel i Invoke-SNSEnableAccount som tar bort aktiv autoreply.

Ny medlem i "väntlista" som råkar bli tilldelad roller kan få synkroniserings fel

Beskriv problemet
Ny medlem i "väntlista" som råkar bli tilldelad roller kan få synkroniserings fel.

T.ex om en profil i "väntelista" blir tilldelad en "kårroll" som används för att indikera om medlemmen ska ha ett office 365 konto eller ej.

Steg för att återskapa problemet
Steg för att återskapa problemet:

  1. För en profil på "väntelista" lägg in rolle eller avdelningsroll som innebär att office 365 konto ska skapas
  2. Kör Office365-Scoutnet-synk
  3. Skriptet krashar när det försöker ta reda på vilka medlemmar som ska ha ett nyy konto

Förväntat beteende
Ignorera och rapportera felet.

Uppdatera till att använda MsGraph istället för MSOnline

Är din idé relaterad till ett problem?
För användarhanteringen (skapa, och ändra på användare) används modulen MSOnline.
MSOnline är föråldrad och ej längre rekommenderad att användas.

Ersättare är modulen MsGraph.

Beskriv hur idén kan implementeras
Ändra till att använda MsGraph.

Information
Dokumentation för AzureAD

Automatisk listhantering baserad på roll och avdelningsmedlemskap

Scoutnets API exporterar avdelningsmedlemskap och roller. Den informationen kan användas
för att skapa distributionslistor på avdelningsnivå utan att en maillista i Scoutnet behöver skapas.

Funktionen är för att minska tröskeln att komma igång med att importera kontakter till distributionslistor på avdelningsnivå.

Lägga till användare i säkerhetsgrupper baserat på tillhörighet i Scoutnet

Är din idé relaterad till ett problem?
Sökerhetsgrupper kan användas t.ex för att låta bara ledare på en avdelning eller gren komma åt information på en del av en sharepoint.
T.ex en area enbart för Spårarledare.

Beskriv hur idén kan implementeras

  • Automatisk skapa en säkerhetsgrupp om den inte finns.
  • Nya användare läggs in i de grupper de ska ha tillgång till baserat på Scoutnet. (via maillistor i Scoutnet i första versionen)
  • Uppdatera grupptillhörighet om tillhörighet ändras i Scoutnet.
  • Inställning för att aktivera grupphantering.

Användarnamn med blanksteg stöds ej

Beskriv problemet
Har en användare blanksteg i namnfälten (t.ex dubbla efternamn) så går det inte att skapa användaren.

UPN (UserPrincipalName) som används till mailadressen får inte innehålla blanksteg.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.