Sonntag, 29. März 2020

Benutzer in Office 365 anmelden

VORSICHT: Der Einsatz von Microsoft 365 / Teams ist in Schulen in BW meines Wissens nicht mehr erlaubt!
https://www.baden-wuerttemberg.datenschutz.de/ms-365-schulen-hinweise-weiteres-vorgehen/


Edit: Damit SuS keine eigene Teams erstellen können, ist eine weiteres Sktipt notwendig. Dieses Skript befindet sich am Ende dieses Artikels!

Edit2: Das SuS anmeldeskript wurde erweitert, die SuS werden nun zusätzlich zur Klassengruppe noch in die "Schueler" Gruppe eingeteilt. 


Generell wird ein Office 365 Admin Konto und die kostenlosen Lizenzen für Lehrerde und SuS benötigt.

Hier das Skript für die SuS. Das Skript muss auf einem PC im Schulnetz ausgeführt werden, damit es LDAP Anfragen durchführen kann und legt auf h: eine Datei office365Benutzerliste.txt ab, in der die angelegten Accounts nochmals notiert werden.

Install-Module MSOnline
Connect-MsolService
$SuSLizenz=$false

#Eine Liste aller bei Office angemeldeten Nutzer und ihren Passwörtern finden Sie auf h:\office365Benutzerliste.txt
New-Item -Path h:\ -Name "office365Benutzerliste.txt" -ErrorAction Ignore

######################Schuldomäne eintragen
$schulsuffix="@bsachern.onmicrosoft.com" #ein Beispiel
$schulsuffix=".365@meineschule.onmicrosoft.com" #ein komplexeres Beispiel
Write-Host "Sie müssen nun eingeben, wie die SuS sich bei Office365 anmelden sollen."-ForegroundColor Magenta
Write-Host "Tragen Sie im folgenden "-ForegroundColor Magenta -NoNewline
Write-Host "@meine-schule.de" -ForegroundColor Cyan -NoNewline
Write-Host " ein, wenn ihre SuS sich mit" -ForegroundColor Magenta
Write-Host "maxi.muster@meine-schule.de" -NoNewline -ForegroundColor Cyan
Write-Host " bei Office 365 anmelden sollen. maxi.muster ist" -ForegroundColor Magenta
Write-Host "dabei der Loginname der paedML." -ForegroundColor Magenta
$schulsuffix=Read-Host "Eingabe"
Write-Host $schulsuffix
$antwort = Read-Host "Ist die Einagabe korrekt?:" $schulsuffix " mit J und Eingabetaste bestätigen!"
if(-not($antwort -match "J")){
    Write-Host "Sie haben nicht bestätigt, breche ab. " -ForegroundColor Red
    break
}
Write-Host "Das Passwort der SuS wird auf klasse-Off!ce gesetzt, klasse entspricht dem Klassenbezeichner in der paedML" -ForegroundColor Magenta
Write-Host "also z.B. 1b-Off!ce oder auch 1bk2w3-Off!ce. Achten Sie auf das Ausrufezeichen bei Off!ce, Buchstaben der Klasse sind klein!" -ForegroundColor Magenta
Read-Host "Bestätigen mit Eingabetaste"

######################Lizenzen auslesen
$lizenzen=Get-MsolAccountSku
foreach($lizenz in $lizenzen.AccountSkuId){
    Write-Host "Lizenz: " $lizenz
    if($lizenz -match "STANDARDWOFFPACK_IW_STUDENT"){
        Write-Host "Lizenz für SuS gefunden!" -ForegroundColor Green
        $SuSLizenz = $lizenz
    }
}
######################Lizenzen auslesen Ende

if(-not $SuSLizenz){
    Write-Host "Die Lizenz für SuS wurde nicht gefunden, breche ab." -BackgroundColor Red
    Write-Host "Wenn Sie die Lizenzen mit dem Befehl Get-MsolAccountSku selbst finden " -BackgroundColor Red
    write-host "können Sie diese den Wert SuSLizenz in Zeile 3 von Hand zuweisen." -BackgroundColor Red
    Write-Host "meineadressede:STANDARDWOFFPACK_IW_STUDENT sollte so ein Key heißen." -BackgroundColor Red
    Write-Host "Löschen Sie beim manuellen Einfügen die Zeilen zwischen #####Lizenzen auslesen bis #####Lizenzen auslesen Ende" -BackgroundColor Red
    Break
}

#Eine Gruppe in der alle SuS eingeteilt werden.
$SuSGroup = Get-MsolGroup -all |  Where {$_.DisplayName -like "Schueler"}
if($SuSGroup -eq $null){
    $SuSGroup=New-MsolGroup -DisplayName "Schueler"
}
else{
    "ist schon da"
}
$SuSGroupID = $SuSGroup.ObjectId

$gruppen = [adsi]"LDAP://CN=klassen,CN=schueler,CN=groups,ou=schule,dc=paedml-linux,dc=lokal"
foreach($klasse in $gruppen.Children.distinguishedName){
    $bezeichnung=($klasse.Split("=")[1]).Split(",")[0] -replace 'schule-'
    write-host "################### Verarbeite Klasse " $bezeichnung "####################" -ForegroundColor Green
    $pfad = "LDAP://CN=schule-$($bezeichnung),CN=klassen,CN=schueler,CN=groups,ou=schule,dc=paedml-linux,dc=lokal"
    $SuS = [adsi]$pfad
    #Klasasengruppe wird angelegt und ihre ID in gruppenID abgelegt.
    $gruppenID = (New-MsolGroup -DisplayName $bezeichnung).ObjectId




  
    #Remove-MsolGroup -ObjectId $gruppenID

    foreach($s in $SuS.member){
        if($s -match "lehrer"){
            Write-Host "Lehrpersonen werden nicht in Klassen eingeteilt. Loginname: " ($s.Split("=")[1]).Split(",")[0] -ForegroundColor yellow
        }
        else{
            $sname = ($s.Split("=")[1]).Split(",")[0]
            Write-Host $sname -NoNewline -ForegroundColor Cyan
            Write-Host " wird in die Klasse " -NoNewline
            Write-Host $bezeichnung  -NoNewline -ForegroundColor Green
            Write-Host " eingetragen"
            $schueler = [adsi]"LDAP://$s"
            $loginname = [String]($sname+$schulsuffix)
            $user=New-MsolUser -UserPrincipalName $loginname -DisplayName ([String]($schueler.displayName)) -FirstName ([String]($schueler.givenName)) -LastName ([String]($schueler.sn)) -Password "$($bezeichnung)-Off!ce" -ForceChangePassword $true -Department $bezeichnung -LicenseAssignment $SuSLizenz -UsageLocation de
            Add-MsolGroupMember -GroupObjectId $gruppenID -GroupMemberObjectId $user.ObjectId
            Add-MsolGroupMember -GroupObjectId $SuSGroupID -GroupMemberObjectId $user.ObjectId
            $ausgabe = [String]($user.DisplayName) +", "+ [String]($user.UserPrincipalName) +", "+ [String]($user.Password)
            Add-Content -Value $ausgabe -Path h:\office365Benutzerliste.txt
        }
    }
}
Write-Host "Die Anmeldung ist beendet, öffnen Sie h:\office365Benutzerliste.txt um die Benutzerdaten zu sehen. " -ForegroundColor Green
Für das Anlegen von Lehrenden habe ich mich für einen CSV Import entschieden, da an meiner Schule sich die Lehrenden mit ihrer eMail-Adresse bei Microsoft anmelden, nicht mit ihrem Kürzel wie in der paedML.
Dazu muss man eine CSV mit den Überschriften vorname, name, email erstellen und mit den Daten der Lehrenden befüllen. Das Skript erwartet diese Datei unter h:\lehrende.csv, dies kann aber im Skript in Zeile 4 angepasst werden. 

Install-Module MSOnline
Connect-MsolService
$LuLLizenz=$false
$lehrende = Import-Csv "h:\lehrende.csv"
#Eine Liste aller bei Office angemeldeten Nutzer und ihren Passwärtern finden Sie auf h:\office365Benutzerliste.txt
New-Item -Path h:\ -Name "office365BenutzerlisteLehrer.txt" -ErrorAction Ignore

######################Schuldomäne eintragen
Write-Host "Die Benutzer werden aus der Datei h:\Lehrende.csv gelesen." -ForegroundColor Magenta
Write-Host "Das Passwort der Lehrenden wird auf Willkommen@Off!ce gesetzt" -ForegroundColor Magenta
Write-Host "Der Benutzernamen entspricht der eMail Adresse" -ForegroundColor Magenta
Write-Host "Die eMail Adresse muss bei der gleichen Domäne sein, wie ihre Office 365 Domäne." -ForegroundColor Magenta
Read-Host "Bestätigen mit Eingabetaste"

######################Lizenzen auslesen
$lizenzen=Get-MsolAccountSku
foreach($lizenz in $lizenzen.AccountSkuId){
    Write-Host "Lizenz: " $lizenz
    if(($lizenz -match "MEINE_EIGENE_LIZENZ")-or($lizenz -match "STANDARDWOFFPACK_IW_FACULTY")-or ($lizenz -match "STANDARDWOFFPACK_FACULTY") ){
        Write-Host "Lizenz für Lehrende gefunden!" -ForegroundColor Green
        $LuLLizenz = $lizenz
    }
}
######################Lizenzen auslesen Ende
Write-Host "Diese Lizenz wird für Lehrende verwendet: " $LuLLizenz -ForegroundColor Green
Write-host "Abbrechen mit Strg + c"
Read-Host "Bestätigen mit Eingabetaste"

if(-not $LuLLizenz){
    Write-Host "Die Lizenz für Lehrende wurde nicht gefunden, breche ab." -BackgroundColor Red
    Write-Host "Wenn Sie die Lizenzen mit dem Befehl Get-MsolAccountSku selbst finden " -BackgroundColor Red
    write-host "können Sie diese in Zeile 17 von Hand zuweisen." -BackgroundColor Red
    Write-Host "meineadressede:STANDARDWOFFPACK_FACULTY sollte so ein Key heißen." -BackgroundColor Red
    Write-Host 'Ändern Sie in Zeile 17 ' -NoNewline -BackgroundColor Red
    Write-Host '$lizenz -match "MEINE_EIGENE_LIZENZ"' -ForegroundColor Green -NoNewline -BackgroundColor Red
    Write-Host ' zu ' -BackgroundColor Red
    Write-Host '$lizenz -match "GEWUENSCHTE_OFFICE_LIZENZ" ' -ForegroundColor Green -BackgroundColor Red
    Break
}
$lehrende = Import-Csv "h:\Lehrende.csv"
Write-Host
Write-Host "Gefundene Lehrerinnen und Lehrer: " -BackgroundColor DarkGreen
foreach($lehrer in $lehrende){
    Write-Host $lehrer.vorname $lehrer.name "" -NoNewline
    Write-Host $lehrer.email -ForegroundColor Yellow 
}
Write-Host
Write-Host "Kontrollieren Sie, ob die CSV reichtig gelsen wurde."
Write-Host "Wenn ihr Kollegium richtig angezeigt wird bestätigen Sie mit J und Enter"
$antwort = Read-Host "Soll die Anmeldung durchgeführt werden? J für ja eingeben. "
if(-not ($antwort -eq "J")){
   Write-Host "Vorgang abgebrochen" -ForegroundColor Red
   break
}
$gruppenID = (New-MsolGroup -DisplayName "Lehrer").ObjectId
foreach($lehrer in $lehrende){
    Write-Host $lehrer.vorname $lehrer.name " wurde angemeldet."
    $name = $lehrer.vorname +" "+ $lehrer.name
    $user=New-MsolUser -UserPrincipalName $lehrer.email -DisplayName $name -FirstName $lehrer.vorname -LastName $lehrer.name -Password "Willkommen@Off!ce" -ForceChangePassword $true -Department "Lehrer" -LicenseAssignment $LuLLizenz -UsageLocation de
    Add-MsolGroupMember -GroupObjectId $gruppenID -GroupMemberObjectId $user.ObjectId
    $ausgabe = [String]($user.DisplayName) +", "+ [String]($user.UserPrincipalName) +", "+ [String]($user.Password)
    Add-Content -Value $ausgabe -Path h:\office365BenutzerlisteLehrer.txt
}
Write-Host "Die Anmeldung ist beendet, öffnen Sie h:\office365BenutzerlisteLehrer.txt um die Benutzerdaten zu sehen. " -ForegroundColor Green

Um das Erstellen von Teams auf das Lehrer-Kollegium einzuschränken wird folgendes Skript verwendet. Achten Sie darauf, dass Lehrende, welche im Nachhinein noch in der Cloud angemeldet werden auch zur Sicherheitsgruppe "Lehrer" hinzugefügt werden müssen, um eigene Teams erstellen zu dürfen. Falls ihre Lehrerg Gruppe nicht "Lehrer" heißt, passen Sie die Zeile 2 des Skriptes bitte an.  Das Skript kommt bis auf die ersten zwei Zeilen direkt von Microsoft, der Artikel dazu hier.


Install-Module AzureADPreview
$GroupName = "Lehrer"
$AllowGroupCreation = "False"

Connect-AzureAD

$settingsObjectID = (Get-AzureADDirectorySetting | Where-object -Property Displayname -Value "Group.Unified" -EQ).id
if(!$settingsObjectID)
{
      $template = Get-AzureADDirectorySettingTemplate | Where-object {$_.displayname -eq "group.unified"}
    $settingsCopy = $template.CreateDirectorySetting()
    New-AzureADDirectorySetting -DirectorySetting $settingsCopy
    $settingsObjectID = (Get-AzureADDirectorySetting | Where-object -Property Displayname -Value "Group.Unified" -EQ).id
}

$settingsCopy = Get-AzureADDirectorySetting -Id $settingsObjectID
$settingsCopy["EnableGroupCreation"] = $AllowGroupCreation

if($GroupName)
{
    $settingsCopy["GroupCreationAllowedGroupId"] = (Get-AzureADGroup -SearchString $GroupName).objectid
}
 else {
$settingsCopy["GroupCreationAllowedGroupId"] = $GroupName
}
Set-AzureADDirectorySetting -Id $settingsObjectID -DirectorySetting $settingsCopy

(Get-AzureADDirectorySetting -Id $settingsObjectID).Values

Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.