Show Advanced KnowledgeHide Advanced KnowledgeUntis
Idealer Weise erscheinen die Pläne aus Untis nach dem Export aus Untis automatisch in ILIAS. Dazu kann ich diesen Weg anbieten:
- Sie erstellen in Untis diverse Pläne (Raum, Lehrer, Klassen, Vertretung) und exportieren diese als HTML-Dateien auf einen Ordner im Netzwerk Ihrer Schule (meistens das Verwaltungsnetz)
- Sie laden diese Pläne mit einem Skript via WebDAV in einen ILIAS-Ordner (oder Kategorie) Namens "Untisquelle". Damit befinden sich die Pläne schon mal im Internet.
- Nun laden Sie die Pläne von ILIAS wieder über WebDAV herunter in den Ort /var/scripts Ihres ILIAS-Servers. Die Pläne befinden sich also auf dem Dateisystem des ILIAS-Servers und können...
- ...von dort aus in ILIAS-HTML-Lernmodule kopiert werden. Ist kompliziert, funktioniert aber seit Jahren extrem zuverlässig und ist eigentlich nur eine Sache von 2 Stunden und dann von viel Ruhe...
Wie bekommen wir nun die Untis-Dateien in den Ordner "Untisquelle"?
Zunächst: Erstellen Sie irgendwo in ILIAS einen Ordner oder eine Kategorie mit dem Namen "Untisquelle". Natürlich ist der Name frei wählbar. Kopieren Sie sich den WebDAV-Link (Aktionen->WebDAV) irgendwohin, wir benötigen ihn gleich.
Die folgenden Arbeiten führen Sie an dem Windows-PC durch, auf dem Untis läuft. Dieser PC muss WebDAV-fähig sein. Dazu ist es in der Regel erforderlich, den Service "WebClient" zu starten (Startoption: automatisch). Die Aktivierung dieses Dienstes ist in meinen Augen aus Sicherheitsgründen völlig unbedenklich. Dieser Schritt erfordert Administratoren-Rechte und muss nur einmal durchgeführt werden.
Der Upload erfolgt mit einem Windows-Powershell-Script, was eine bequeme Sache ist: Ein Doppelklick auf die Skriptdatei, der Rest geht automatisch.
Wir starten nicht das Powershell-Skript, sondern eine elegante kleine EXE-Datei mit eigenem Icon. Mit anderen Worten: Wir werden das Script zu einer exe-Datei kompilieren. Dazu müssen Sie sich PowerGui (kostenlos) installieren und dann unter Tools-Compile Script den die Kompilierung starten (Anleitung). Eine Sache von einer Minute.
Erstellen Sie in Windows das Powershell-Skript in Form einer Textdatei mit einem beliebigen Texteditor (z.B. Notepad++) mit der Endung ps1, also z.B.
Untis_zu_ILIAS.ps1
und kopieren Sie das folgende Script hinein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 | $ErrorActionPreference = "SilentlyContinue" #v27 $stop = 0 $errorlevel = 0 #Gebe x Unterordner ein, nach denen geprüft werden soll, ob sie vorhanden sind. $ordner1x = "Klassen" $ordner2x = "Lehrkraefte" $ordner3x = "Raeume" $ordner4x = "" $ordner5x = "" #Ordnerpfad zu den Stundenplänen (wenn leer, wird der relative Pfad automatisch ermittelt) #Ohne abschließenden Backslash \ $path = "T:\Stundenplan\Stunden_Vertretungsplaene_Aktuell" #$path = "" #Wenn Autologin gewünscht, hier Daten eingeben. Wenn leer, werden die Daten abgefragt. $UserName = "username" $Password = "password" #WebDAV-Link des Ordners, der alle Unterordner aufnehmen soll $ShareName = "https://domain.tld/ilias/webdav.php/iliasschoolmaster/ref_171/" #Laufwerksbuchstabe, unter dem das WebDAV-Laufwerk gemappt werden soll $DriveName = "B:" #Gibt es eine PHP-Datei, die das Script ausführen soll? $phppath="https://somain.tld/special/untisup.php" ################################################ #Ab hier sind keine Einstellungen erforderlich.# ################################################ $a = (Get-Host).UI.RawUI $a.BackgroundColor = "black" $a.ForegroundColor = "cyan" if ($path -eq "") { $path = get-location Set-Location $path write-host $path } else { Set-Location $path if ($ordner1x) {$ordner1 = $path+"\"+$ordner1x} if ($ordner2x) {$ordner2 = $path+"\"+$ordner2x} if ($ordner3x) {$ordner3 = $path+"\"+$ordner3x} if ($ordner4x) {$ordner4 = $path+"\"+$ordner4x} if ($ordner5x) {$ordner5 = $path+"\"+$ordner5x} } do { #clear-host write-host "________________________________________________________________________________" -foregroundcolor "cyan" write-host "ILIAS-Stundenplan-Sync-Tool - Version 1.0.0" -foregroundcolor "cyan" Write-Host "Letzte Änderung: 28.01.2016" Write-Host "" -foregroundcolor "cyan" write-host "________________________________________________________________________________" -foregroundcolor "cyan" write-host #Läuft der Service WebClient? $webclient = Get-Service WebClient If ($webclient.Status -ne "Running") { write-host "Der Web-Client-Service läuft nicht. " -f red write-host $errorlevel++ } else { write-host "Der Web-Client-Service läuft." -f green } #Prüfe, ob Ordner vorhanden sind write-host $checkordner = $ordner1 if ($checkordner) { $count = 0 if (test-path $checkordner) { $count = @(Get-ChildItem -Path $checkordner"\" -Filter *.htm -Recurse | where-object {-not ($_.PSIsContainer)}| Where-Object {$_.name -notmatch '^~.*'}).count if ($count -gt 0) { write-host "Der Ordner $checkordner ist vorhanden und enthält $count HTML-Dateien." -f green } else { write-host "Der Ordner $checkordner enthält keine HTML-Dateien." -f red $errorlevel++ } } else { write-host "Der Ordner $checkordner ist nicht vorhanden." -f red $errorlevel++ } } write-host if ($ordner2) { $checkordner = $ordner2 $count = 0 if (test-path $checkordner) { $count = @(Get-ChildItem -Path $checkordner"\" -Filter *.htm -Recurse | where-object {-not ($_.PSIsContainer)}| Where-Object {$_.name -notmatch '^~.*'}).count if ($count -gt 0) { write-host "Der Ordner $checkordner ist vorhanden und enthält $count HTML-Dateien." -f green } else { write-host "Der Ordner $checkordner enthält keine HTML-Dateien." -f red $errorlevel++ } } else { write-host "Der Ordner $checkordner ist nicht vorhanden." -f red $errorlevel++ } } write-host if ($ordner3) { $checkordner = $ordner3 $count = 0 if (test-path $checkordner) { $count = @(Get-ChildItem -Path $checkordner"\" -Filter *.htm -Recurse | where-object {-not ($_.PSIsContainer)}| Where-Object {$_.name -notmatch '^~.*'}).count if ($count -gt 0) { write-host "Der Ordner $checkordner ist vorhanden und enthält $count HTML-Dateien." -f green } else { write-host "Der Ordner $checkordner enthält keine HTML-Dateien." -f red $errorlevel++ } } else { write-host "Der Ordner $checkordner ist nicht vorhanden." -f red $errorlevel++ } } write-host if ($ordner4) { $checkordner = $ordner4 $count = 0 if (test-path $checkordner) { $count = @(Get-ChildItem -Path $checkordner"\" -Filter *.htm -Recurse | where-object {-not ($_.PSIsContainer)}| Where-Object {$_.name -notmatch '^~.*'}).count if ($count -gt 0) { write-host "Der Ordner $checkordner ist vorhanden und enthält $count HTML-Dateien." -f green } else { write-host "Der Ordner $checkordner enthält keine HTML-Dateien." -f red $errorlevel++ } } else { write-host "Der Ordner $checkordner ist nicht vorhanden." -f red $errorlevel++ } } write-host if ($ordner5) { $checkordner = $ordner5 $count = 0 if (test-path $checkordner) { $count = @(Get-ChildItem -Path $checkordner"\" -Filter *.htm -Recurse | where-object {-not ($_.PSIsContainer)}| Where-Object {$_.name -notmatch '^~.*'}).count if ($count -gt 0) { write-host "Der Ordner $checkordner ist vorhanden und enthält $count HTML-Dateien." -f green } else { write-host "Der Ordner $checkordner enthält keine HTML-Dateien." -f red $errorlevel++ } } else { write-host "Der Ordner $checkordner ist nicht vorhanden." -f red $errorlevel++ } } #Check: Kann es losgehen? Errorlevel OK? if ($errorlevel -gt 0) { write-host write-host "Es wurden $errorlevel Fehler festgestellt. Upload nicht möglich." -f yellow write-host read-host "Drücken Sie die Eingabetaste, um das Programm zu beenden." exit } if ($UserName -eq "") { #Erzeugt Login-Fenster $UserName = read-host "Bitte ILIAS-Usernamen eingeben" if ($Username -eq "") { Write-Host "Kein Benutzername eingegeben, Programm wird geschlossen." -ForegroundColor red Start-Sleep -s 5 exit } else { #Check if User Null $pass1 = read-host "Bitte ILIAS-Passwort eingeben" -assecurestring #decode password $pass2=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass1) $Password=[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($pass2) if ($Password -eq "") { Write-Host "Kein Passwort eingegeben, Programm wird geschlossen." -ForegroundColor Red Start-Sleep -s 5 exit } } } else { write-host "Starte Loginversuch mit User $UserName" write-host } #Alte Verbindung löschen net use $DriveName /d /y $i=1 do { Write-Host "Versuch Nr. $i" $output = net use $DriveName $ShareName $Password /user:$UserName /persistent:no 2>null $i++ Start-Sleep -s 2 } until ($output -like "*erfolgreich*" -or $i -eq 4) if ($output -like "*erfolgreich*") { write-host "________________________________________________________________________________" -foregroundcolor "cyan" write-host "Login erfolgreich!" -f green #write-host "(Auch wenn die Meldung Netzwerkverbindung nicht gefunden erscheint)." -f green write-host #Beginn Spiegelung nach ILIAS write-host "Alles im Ordner $path" write-host "wird nach ILIAS gespiegelt." write-host write-host "Bitte warten. Solange der Curser blinkt, läuft der Prozess."-f green if($ordner1) { write-host "Bearbeite "$ordner1 robocopy $ordner1 $DriveName"\"$ordner1x /MIR /R:2 /W:5 } if($ordner2) { write-host "Bearbeite "$ordner2 robocopy $ordner2 $DriveName"\"$ordner2x /MIR /R:2 /W:5 } if($ordner3) { write-host "Bearbeite "$ordner3 robocopy $ordner3 $DriveName"\"$ordner3x /MIR /R:2 /W:5 } if($ordner4) { write-host "Bearbeite "$ordner4 robocopy $ordner4 $DriveName"\"$ordner4x /MIR /R:2 /W:5 } if($ordner5) { write-host "Bearbeite "$ordner5 robocopy $ordner5 $DriveName"\"$ordner5x /MIR /R:2 /W:5 } #robocopy $path $DriveName /MIR write-host write-host "Spiegelung nach ILIAS beendet." -f green write-host #PHP-Script starten if ($phppath) { write-host "Starte PHP-Script "$phppath write-host $ie = New-Object -ComObject InternetExplorer.Application $ie.navigate($phppath) } write-host read-host "Drücken Sie die Eingabetaste, um das Programm zu beenden." if ($output -like "*Beendet*") { net use $DriveName /d /y write-host "Spiegelung nach ILIAS erfolgreich." -foregroundcolor "green" read-host "Drücken Sie die Eingabetaste, um das Programm zu beenden." exit } if ($output -like "*FEHLER 2*") { net use $DriveName /d /y write-host "Es ist ein Fehler beim Spiegeln auf ILIAS aufgetreten." -foregroundcolor "red" write-host read-host "Drücken Sie die Eingabetaste, um das Programm zu beenden." exit } } else { write-host "Ein Fehler bei der Verbindung zu ILIAS ist aufgetreten." -f red write-host "Überprüfen Sie die Logindaten (Benutzername/Passwort)." -f red write-host read-host "Drücken Sie die Eingabetaste, um das Programm zu beenden" exit } $stop = 1 } until ($stop -eq 1) |
Nun passen Sie die oberen Zeilen an. Sie benötigen einen Pfad, in dem die Ordner liegen, z.B.
T:\Stundenplan\Stunden_Vertretungsplaene_Aktuell
Dort erstellen Sie die Ordner, die die einzelnen Pläne enthalten:
Klassen
Lehrkraefte
Raueme
Geben Sie einen ILIAS-User für das WebDAV-Verzeichnis ein und ggf. ein Pfad für die oben erstelle PHP-Datei.
Kopieren Sie nun in diese Ordner Ihre Untis-Pläne hinein.
Sie dürfen den Pfad und die Unterordner nun nicht mehr verändern, ohne auch in dem Skirpt die Änderung durchzuführen!
Kompilieren Sie nun das Skript wie oben beschrieben mit PowerGUI zu einer EXE-Datei (
Anleitung). Testen Sie die neue Datei mit einem Doppelklick. Wenn das Skript als Cronjob automatisch ausgeführt werden soll, sollten Sie folgenden read-host-Zeilen mit einer Raute # auskommentieren, damit es sich automatisch schließt:
Für die Einrichtung des Cronjobs gehen Sie in Windows zu
Zubehör->Systemprogramme->Aufgabenplanung
Die Pläne in die ILIAS-HTML-Lernmodule kopieren
Erste Schritte in ILIAS:
- Legen Sie in ILIAS einen Ordner (oder eine Kategorie) an, der alle Pläne aufnimmt, z.B. mit dem Namen "Untisquelle"
- In diesen Ordner legen Sie für jeden Plan einen Ordner an, z.B. Klassen, Lehrkraefte, Raeume (exakt die gleichen Ordnernamen wie oben im Powershell-Skript)
- Kopieren Sie sich für jeden diesen Ordner den Webdav-Link (über Aktionen-Button) und legen ihn irgendwo ab (Textdatei), weil wir ihn gleich benötigen
- Legen Sie für jeden Plan ein HTML-Lernmodul an und kopieren sich auch diese Links z.B. in ein Textdokument. Die Pläne werden dann in dieses Lernmodul kopiert und können dort von den Usern entsprechend betrachtet werden. Siehe Beispiel Schulclient -> Registerkarte Organisation. Zum Kopieren benutzen wir eines der beiden unten aufgeführten Skripte (Methode 1 und 2).
Methode 1 mit davfs2 und rsync
Diese Methode setzt davfs2 voraus, was man erst installieren muss, z.B.
apt-get install davfs2 recode
mkdir /media/untis
Achtung! Wenn man bei rsync die Option --delete setzt, kann dies bei falschem Gebrauch (falsche Pfadangabe) schnell das System zerstören. Sie sollten einige Versuche ohne diesen Parameter durchführen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #!/usr/bin/env bash # Author: Marc Hannappel, erweitert von Wolfgang Huebsch # Variablen setzen fuer davfs DAV_URL=https://kivinet.de/ilias/webdav.php MOUNT_POINT=/media/untis/ REF_ID=ref_171 CLIENT_ID=iliasschoolmaster ILIAS_USER=untis ILIAS_USER_PWD=geheim ZERTIFICAT_EXIST=j echo "Mount Webdav $REF_ID unter $MOUNT_POINT als Benutzer $ILIAS_USER" echo -e "$ILIAS_USER\n$ILIAS_USER_PWD\n$ZERTIFICAT_EXIST" | sudo mount -t davfs $DAV_URL/$CLIENT_ID/$REF_ID $MOUNT_POINT # Author: Wolfgang Huebsch WWW_PATH=/var/www/vhosts/kivinet.de/httpdocs #1 - Lehrkräfte #2 - Klassenpläne #3 - Raumpläne #4 - Vertretungspläne #5 - BG-Teams #6 - FG-Teams #Verzeichnisnamen im Mointpoint DIR1="Lehrkraefte" DIR2=Klassen DIR3=Raeume DIR4=Vertretungsplaene DIR5=FG-BG-Upload/Bildungsgangsgruppen DIR6=FG-BG-Upload/Fachgruppen #Pfade zu den ILIAS-HTML-Lernmodulen LOC1=${WWW_PATH}/ilias/data/$CLIENT_ID/lm_data/lm_495 LOC2=${WWW_PATH}/ilias/data/$CLIENT_ID/lm_data/lm_496 LOC3=${WWW_PATH}/ilias/data/$CLIENT_ID/lm_data/lm_497 LOC4=${WWW_PATH}/ilias/data/$CLIENT_ID/lm_data/lm_498 LOC5=${WWW_PATH}/ilias/data/$CLIENT_ID/lm_data/lm_29370/bg LOC6=${WWW_PATH}/ilias/data/$CLIENT_ID/lm_data/lm_29371/fg #rsync -avz $MOUNT_POINT$DIR1 $LOC1 rsync --delete -avz $MOUNT_POINT$DIR1/ $LOC1 rsync --delete -avz $MOUNT_POINT$DIR2/ $LOC2 rsync --delete -avz $MOUNT_POINT$DIR3/ $LOC3 rsync --delete -avz $MOUNT_POINT$DIR4/ $LOC4 rsync --delete -avz $MOUNT_POINT$DIR5/ $LOC5 rsync --delete -avz $MOUNT_POINT$DIR6/ $LOC6 |
Methode 2 mit webdac_sync.jar. Empfohlen, wenn Methode 1 nicht funktioniert.
Kopieren Sie von der Seite http://www.re.be/downloads.xhtml das Tool webdav_sync.jar nach /var/scripts und benennen es um:
mv webdav_sync.jar webdavsync.jar
Erstellen Sie nun das unten stehende Script, z.B. in /var/scripts
nano untisupload.sh
und passen die Variablen an. Ich hoffe, es ist selbsterklärend. Ansonsten fragen Sie bitte nach unter wolfgang.huebsch@gmx.de.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | #!/bin/bash #pfad zu webdavsync - Info: http://www.re.be/downloads.xhtml sync="/opt/ilias/scripts/webdavsync.jar" #Webserver-User wwwu="www-data" wwwg="www-data" #ILIAS-Datei-Pfad varwww=/var/www/vhosts/kivinet.de #ILIAS-User user=untis1 pw=1234 #Achtung: verwenden Sie statt Ihrer Domain hier localhost mit dem Protokoll http (nicht https) nach Moeglichkeit. domain=@localhost/ilias/webdav.php/iliasschoolmaster/ prot=http:// #1 - Lehrkräfte #2 - Klassenpläne #3 - Raumpläne #4 - Vertretungspläne #Pläne-Lokalpfad auf diesem Server bzw. Links zu den ILIAS-HTML-Lernmodulen: loc1=${varwww}/ilias/data/iliasschoolmaster/lm_data/lm_495 loc2=${varwww}/ilias/data/iliasschoolmaster/lm_data/lm_496 loc3=${varwww}/ilias/data/iliasschoolmaster/lm_data/lm_497 loc4=${varwww}/ilias/data/iliasschoolmaster/lm_data/lm_498 #Webdav-Pfad in ILIAS - nur die ref-ID nach diesem Muster eintragen (findet man in in der Browser-Adressleiste) ref1=ref_6283/ ref2=ref_175/ ref3=ref_6516/ ref4=ref_6731/ #Ab hier sind keine Aenderungen erforderlich# if [ -z "$loc1" ] then echo "loc1 ist leer" else rm $loc1/*.htm java -jar $sync -u $prot$user:$pw$domain$ref1 -d $loc1'/' -down fi if [ -z "$loc2" ] then echo "loc2 ist leer" else rm $loc2/*.htm java -jar $sync -u $prot$user:$pw$domain$ref2 -d $loc2'/' -down fi if [ -z "$loc3" ] then echo "loc3 ist leer" else rm $loc3/*.htm java -jar $sync -u $prot$user:$pw$domain$ref3 -d $loc3'/' -down fi if [ -z "$loc4" ] then echo "loc4 ist leer" else rm $loc4/*.htm java -jar $sync -u $prot$user:$pw$domain$ref4 -d $loc4'/' -down fi #Charset fixen - mit dem neuen Untis 2016 obsolet. Falls gewollt, noch apt-ge install recode installieren und recode-Pfad angeben #recode = /pfad/zu/recode #if [ -z "$loc1" ] #then #echo "loc1 ist leer" #else #cd $loc1 #find . -name "*.htm" -exec $recode utf-8 {} \; #fi #Owner neu setzten if [ -z "$loc1" ] then echo "loc1 ist leer" else chown -R $wwwu:$wwwg $loc1 fi if [ -z "$loc2" ] then echo "loc2 ist leer" else chown -R $wwwu:$wwwg $loc2 fi if [ -z "$loc3" ] then echo "loc3 ist leer" else chown -R $wwwu:$wwwg $loc3 fi if [ -z "$loc4" ] then echo "loc4 ist leer" else chown -R $wwwu:$wwwg $loc4 fi #Mail senden mail -a "Content-Type: text/plain; charset=UTF-8" -s "WebDav-Untis-Script lief durch" wolfgang.huebsch@gmx.de <<< "Die Pläne in ILIAS sollten nun mit denen auf dem T-Laufwerk synchronisiert sein" |
Bitte verwenden Sie zunächst als Protokoll http (nicht https !!!) und nach Möglichkeit als Domain localhost. Wenn Sie nicht localhost sondern den echten Domainnamen verwenden müssen, testen Sie diesen erst mit http und wenn es dann läuft, testen Sie auch https. Wenn https gut funktioniert, belassen Sie es dabei. Anonsten ggf. zurück ändern zu http.
Jetzt müssen Sie das Script bei Bedarf starten. Dies kann z.B. durch einen Eintrag in die Crontab-Datei erfolgen (startet das Skript alle 45 Minuten):
nano /etc/crontab
Startet das Skript alle 45 Minuten:
*/45 * * * * root /var/scripts/untisupload.sh > /dev/null 2>&1
Sie können das Skript alternativ auch aus dem Internet starten, in dem Sie eine Datei scriptstart.php im Webverzeichnis erstellen und diesen Inhalt einfügen:
<?php
exec('/var/scripts/untisupload.sh 2>&1', $output);
print_r($output); // to see the respond to your command
?>
Der Aufruf dieser Datei führt dann dazu, dass die Pläne in die HTML-Lernmodule kopiert werden. Sie können diesen Pfad auch in das Powershell-Skript oben eintragen (Zeile 29), dann startet das Powershell-Skript das Bash-Skript - funktioniert gut!
Tipp: Erstellen Sie für die Vertretungspläne einen separaten Prozess mit einem kürzeren Upload-Intervall.