<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Marco Scheel aka GeekDotNet</title><link>https://marcoscheel.de/post/</link><description>Früher SharePoint. Heute Microsoft 365 Modern Collaboration. Co-Host of Hairless in the cloud.</description><generator>Hugo -- gohugo.io</generator><language>de</language><lastBuildDate>Sat, 06 Jul 2024 20:00:00 +0200</lastBuildDate><atom:link href="https://marcoscheel.de/post/index.xml" rel="self" type="application/rss+xml"/><item><title>Erste Schritte mit macOS als Windows IT Pro und Microsoft 365 Berater</title><link>https://marcoscheel.de/post/2024/07/20240627-erste-schritte-mit-macos-als-windows-it-pro/</link><pubDate>Sat, 06 Jul 2024 20:00:00 +0200</pubDate><guid>https://marcoscheel.de/post/2024/07/20240627-erste-schritte-mit-macos-als-windows-it-pro/</guid><description>&lt;p>Seit ich mein Beruf ausübe bin ich von macOS Benutzern umgeben. Der erste MacBook User begleitet mich seit 2005 und die letzten vier Jahre gab es quasi ein MacBook-Boom. In meiner Rolle als Cloud Architeckt für Modern Collaboration im Microsoft 365 Umfeld hatte ich also immer Gelegenheit, das Leiden meiner Mac-Freunde mit Microsoft-Software zu begleiten. Es ist 2024 und &amp;ldquo;alles ist Gut&amp;rdquo;, also wollte ich selbst wissen, was dran ist am Hype des (Arbeits-)Leben im Apple-Ökosystem.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--title.jpg" alt="boy looking at a old crt with an apple logo" />
&lt;/p>
&lt;h2 id="ausgangssituation">Ausgangssituation&lt;/h2>
&lt;p>Ich habe meine Computerbegeisterung mit einem C64 (danke an meinen Vater) gestartet und etwas später durfte ich einen Commodore 116 mit Datasette mein Eigen nennen. Der nächste Schritt war schon ein Microsoft PC (286). Ich habe schon immer mit Begeisterung die Apple Keynotes verfolgt. Steve Jobs Keynotes sind unerreicht und nur Steve Balmer kam einmal ganz kurz ganz nah (&lt;a href="https://www.youtube.com/watch?v=KMU0tzLwhbE" target="_blank">Developer, Developer, Developer, &amp;hellip;&lt;/a>).&lt;/p>
&lt;p>Ich habe in einer Webagentur gearbeitet und bin seit 2005 beim meiner Meinung nach &lt;a href="https://www.glueckkanja.com/blog/corporate/2024/06/partner-of-the-year-2024/" target="_blank">besten Microsoft Partner in Deutschland&lt;/a>.&lt;/p>
&lt;p>&amp;ldquo;10 Finger System&amp;rdquo; Fehlanzeige&amp;quot;! Aber die meisten Tasks auf meinem Windows System kann ich recht sicher, schnell und effizient umsetzen. Auf macOS bin ich ein absoluter Anfänger und ich habe so meine Startschwierigkeiten. Ich bin auf der Suche nach einem Schnellstart für macOS für Benutzer die Windows schon lange sicher bedienen. Ich suche also euer Feedback und möchte meine Erfahrungen teilen.&lt;/p>
&lt;h2 id="aufgabenstellung">Aufgabenstellung&lt;/h2>
&lt;p>Um einen besseren Eindruck zu bekommen, hier eine Liste der Tasks, die ich täglich oder wöchentlich durchführe:&lt;/p>
&lt;ul>
&lt;li>Microsoft Teams ist das Herz unserer Unternehmenskommunikation (Chat und Meetings)&lt;/li>
&lt;li>Arbeiten mit Office Dokumenten (Word, PowerPoint), Loop und Copilot&lt;/li>
&lt;li>Arbeiten mit browserbasierten Systemen (Ticketsystem, Technische Dokumentation, &amp;hellip;)&lt;/li>
&lt;li>Administration von Microsoft 365 Umgebungen (PROD / LAB)
&lt;ul>
&lt;li>Web via verschiedener Microsoft Edge Profile&lt;/li>
&lt;li>PowerShell&lt;/li>
&lt;li>Virtueller Privilege Admin Workstation (PAW)&lt;/li>
&lt;li>Fido Key Anmeldung&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Leichte Dev Tätigkeiten
&lt;ul>
&lt;li>Visual Studio 2022&lt;/li>
&lt;li>VS Code&lt;/li>
&lt;li>GitHub&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="hardware">Hardware&lt;/h2>
&lt;p>Anfang Juni 2024 hatte ich die Chance, &amp;ldquo;kurzfristig&amp;rdquo; ungenutzte Apple Hardware im produktiven Einsatz zu testen. Ich habe eine Woche lang ein MacBook Pro M3 13&amp;rsquo;&amp;rsquo; verwendet und meine ersten Gehversuche gemacht. Aktuell habe ich ein &amp;ldquo;Downgrade&amp;rdquo; mit einem &amp;ldquo;abgelegten&amp;rdquo; MacBook Pro M1 13&amp;rsquo;&amp;rsquo; im Einsatz. Es hat sich auch die Gelegenheit ergeben, ein MacBook Air M3 13’’ (8 GB RAM!) zu testen. Wenn ich aber Öko-System sage, dann MUSS da auch noch ein iPhone 15 Pro mitspielen. Allerdings nutze ich das nur mit WLAN, denn meine SIM-Karte bleibt in meinem Pixel ❤️.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--hardware.jpeg" alt="the microsoft logo, the apple logo and the google logo sitting at a round table playing cards" />
&lt;/p>
&lt;p>In meinem Alter hat man auf der Windows Seite schon einige Erfahrungen gesammelt. Einige Highlights:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.productindetail.com/pn/dynabook-toshiba-portege-m200" target="_blank">Toshiba Protege M200&lt;/a>&lt;/li>
&lt;li>Surface Pro 1&lt;/li>
&lt;li>Surface Pro 2&lt;/li>
&lt;li>Surface Book 1&lt;/li>
&lt;li>Surface Book 2&lt;/li>
&lt;li>Dell XPS 15 (i7 11800H mit RTX 3050 TI)&lt;/li>
&lt;/ul>
&lt;p>Aktuell bin ich auf einem top ausgerüsteten Dell XPS 15 (i7 13700H mit RTX 4060) unterwegs. Seit dem Absprung von Windows Phone mit dem Microsoft Lumia 950 XL bin ich beim nativen Google Pixel geblieben (2 Pro, 4 Pro und aktuell 6 Pro). Für kurze Zeit hatte ich ein Apple iPad Air (4th Gen mit USB-C), welches ich gegen ein Samsung Tab S9 FE &amp;ldquo;getauscht&amp;rdquo; habe.&lt;/p>
&lt;p>Wenn unsere Mitarbeiter keinen speziellen Wunsch haben, setzen wir seit einiger Zeit auf HP Elitebooks und auch die habe ich hin und wieder getestet. Im Jahr 2024 setzt Apple noch immer hohe Standards aber eben auch mit &amp;ldquo;wenig&amp;rdquo; Auswahl und passenden Preisen. Auf der Windows Seite gibt es ein breites Spektrum mit jeder Menge &amp;ldquo;Nieten&amp;rdquo;. Im Business Umfeld kann das schnell gefährlich werden und es kann sich rentieren an die etablierten Business Laptop Hersteller zu halten (Dell, Lenovo und HP).&lt;/p>
&lt;p>Mein aktueller Dell muss sich nicht hinter den Apple Geräten verstecken. Der Mac hat eine sehr gute Webcam. Mein Dell leider eine sehr schlecht. Tastatur, Trackpad und die gesamte Verarbeitung sind für mich gleich auf. Die Funktion, das iPhone als Web-Kamera zu verwenden, funktioniert und stürzt nicht nach ein paar Minuten ab wie bei meinem Google Pixel. Allerdings habe ich keinen Nutzen bei der bereits guten Webcam im MacBook selbst.&lt;/p>
&lt;p>&lt;strong>Fazit&lt;/strong>: Hier kann man auf keiner Seite was falsch machen.&lt;/p>
&lt;h2 id="installation">Installation&lt;/h2>
&lt;p>Mein Windows Device ist natürlich per Autopilot via Intune gemanaged und nach der Out-Of-The-Box Experience in 30 Minuten compliant und mit Office/Teams sofort einsetzbar. Die &amp;ldquo;Installation&amp;rdquo; von Windows ist also bei meinen Geräten ein absoluter Traum, aber wir machen so was halt auch &lt;a href="https://www.glueckkanja.com/de/modern-workplace/managed-workplace" target="_blank">professionell&lt;/a>.&lt;/p>
&lt;p>Für Apple Geräte erfordern wir das Onboarding via Apple Business Manager. Bevor ich also den Desktop sehe, MUSS ich mich mit meiner Entra ID anmelden und das Gerät wird via Intune konfiguriert und mit dem Company Portal + Microsoft Edge vorinstalliert. Noch muss ich einen lokalen Benutzer anlegen und ein dediziertes Passwort festlegen. Hier hat der Windows PC noch die Nase vorn. Es folgt das Onboarding von Touch ID und schon ist das Leben ein ganzes Stück leichter. Allerdings gibt es immer wieder Situationen (z.B. Reboot), wo ich das Passwort eingeben muss. Als neuer Benutzer muss man auch die Touch ID Prompts lesen&amp;hellip; sonst gibt man permanent sein Passwort ein, statt sein Fingerabdruck zu verwenden (UAC Like Prompts).&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--setup.png" alt="create account on macos" />
&lt;/p>
&lt;p>Auf dem Desktop angekommen, muss der Business User bei uns das Microsoft Company Portal öffnen und den Mac final onboarden. Gleich noch Microsoft 365 Apps for Enterprise zur Installation angeklickt und dann den Reboot für die Aktivierung des Filevault (Bitlocker für Mac) durchgeführt. Erst jetzt ist der Mac compliant und kann mit dem Entra ID Konto wie auf Windows genutzt werden.&lt;/p>
&lt;p>Beim Zurücksetzen des Mac (zum Beispiel via Intune) ist der Mac in gefühlt wenigen Minuten bereit für den nächsten Benutzer. Die Windowsgeräte brauchen hier schon deutlich länger. Klappt der Reset nicht, dann muss man ins Recovery Menü und die Installation dauert ähnlich lang, wie ein Windows Wipe&amp;amp;Reload.&lt;/p>
&lt;p>&lt;strong>Fazit&lt;/strong>: Die Entra ID Anmeldung, die OOBE und die Softwareverteilung machen Windows für mich zum Gewinner, allerdings nur solange der Mac noch den lokalen Benutzer benötigt. Kein Grund, um nicht zum Mac zu wechseln.&lt;/p>
&lt;h2 id="user-interface">User Interface&lt;/h2>
&lt;p>Die Unterschiede könnten hier nicht deutlicher sein. Es gibt ähnliche Konzepte, aber die Ausführung unterscheidet sich deutlich.&lt;/p>
&lt;h3 id="taskleiste-dock">Taskleiste, Dock&lt;/h3>
&lt;p>Das Dock am unteren Rand erlaubt den schnellen Zugriff auf Anwendungen wie die Taskleiste auf Windows. Hat das Programm ein schwarzen Punkt unter seinem Icon, dann ist es gerade gestartet. Im Dock gibt es rechts neben den gepinnten Apps ein Bereich für &amp;ldquo;empfohlene und zuletzt verwendete Apps&amp;rdquo;. Ich habe mir meine 11 Anwendungen, die ich häufig benötige gepinnt. Der zusätzlich Bereich mit den letzten und empfohlenen Apps hat mich ständig gestört, weil dann nicht relevante Elemente sichtbar sind. Beispiel: Activity Monitor, Preview, &amp;hellip; und mehr. Ich habe den Teil über die Einstellungen ausgeblendet.&lt;/p>
&lt;p>Nach dem ersten Boot sitzen im Dock 17 Anwendungen. Da ich nicht im Ökosystem bin, habe ich 15 davon mühsam über Rechtsklick &amp;ldquo;Option -&amp;gt; Keep in dock&amp;rdquo; ausgeblendet. Im Verlauf meiner Nutzung habe ich gelernt, dass man die Apps auch ins &amp;ldquo;Nichts&amp;rdquo; ziehen kann, um sie aus dem Dock zu entfernen. Macht man nur einmal nach dem Setup, aber man fragt sich immer, ob es nicht eleganter geht.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--dock.png" alt="my dock writing this article" />
&lt;/p>
&lt;p>Ganz rechts im Dock sitzt der Papierkorb, den ich noch nicht einmal gebraucht habe. Daneben sitzt dann der Download Ordner, welcher auch das letzte Element als Preview-Icon anzeigt. Beim Download eines Bildes hat man es also permanent in Sicht. Ich nutze unter Windows den Download Ordner auch recht häufig, aber immer über den &amp;ldquo;Umweg&amp;rdquo; Datei Explorer. Den Download Teil kann man immerhin ausblenden. Den Papierkorb nicht.&lt;/p>
&lt;h3 id="startmenü">Startmenü&lt;/h3>
&lt;p>Das Startmenü des Mac sieht aus wie ein iPad-Homescreen und heißt &amp;ldquo;Launchpad&amp;rdquo;. Das Windows Startmenü hat eine lange Reise hinter sich. Ich war selbst zu Windows 8 Zeiten nicht unzufrieden. Ich persönlich nutze das Startmenü nur wenig. Ich navigiere nicht zu Apps sondern ich Suche und auch wenn es keiner glauben mag: mit Erfolg! Ich habe eine paar Apps ins Windows-Startmenü gepinnt. Das Launchpad wird dann wichtig, wenn man &amp;ldquo;einige&amp;rdquo; Apps deinstallieren will. Im Launchpad einfach die OPTION Taste festhalten, dann fangen die Apps an zu wackeln und kann über den Apps mit Uninstall Option das kleine X Drücken. Ich glaube zu wissen, dass Apps die nicht &amp;ldquo;Wackeln&amp;rdquo; aus dem Finder über den Ordner &amp;ldquo;Applications&amp;rdquo; gelöscht werden können.&lt;/p>
&lt;h3 id="spotlight">Spotlight&lt;/h3>
&lt;p>Meine Mac Kollegen schwören auf Spotlight und finden, dass es auf dem PC keine Alternative gibt. Ich kann das nicht nachvollziehen. Ich bin sicher man kann sich an Spotlight gewöhnen. Ich suche auf meinem Windows entweder eine App, eine Datei oder will eine Websuche starten. Ich bin Microsoft 365 Benutzer und unsere Entra ID-joined Geräte bieten per Default bei der Suche zugriff auf unsere Inhalte in der Cloud. Teams, Groups, Kontakte, Dateien, &amp;hellip; alles da und ich persönlich bin begeistert von der Umsetzung. Es mag sein, dass Spotlight besser in den Lokalen Dateien suchen kann. Ich frage nur: Welche lokalen Dateien? Ja, es mag Use Cases geben, aber das ist mein Bericht und ich habe schon lange nicht mehr nach einer lokalen Datei gesucht. Auf dem Windows nutze ich die Windows Taste, um alle genannten Aktionen zu starten. Auf dem Mac ist es COMMAND + Leertaste. Es ist sicher ein effektives System, aber ich bevorzuge die Integration von Microsoft 365 in meinem Windows Startmenü/Suche.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--spotlight.jpeg" alt="macOS spotlight search for keeper" />
&lt;/p>
&lt;h3 id="window-management-omg">Window-Management OMG&lt;/h3>
&lt;p>Jetzt kommen wir zum Window-Management. Für mich eine der größten Hürden zur persönlichen Prduktivität. Auf dem Windows System ist das über die Jahre immer besser geworden. Ich nutze im Büro ein 34 Zoll Widescreen Bildschirm und bin auf ein gutes Window Handling angewiesen. Nach zwei Wochen habe ich gelernt, mit der Mac-Implementierung zu leben. Lieben kann ich es nicht. Auf dem Hauptbildschirm hilft der Doppelick, um ein Fenster zu &amp;ldquo;maximieren&amp;rdquo;. Auf dem Wide Screen bin ich noch immer auf &amp;ldquo;manuelles&amp;rdquo; Ausrichten und ziehen angewiesen. Wenn ich die letzte Keynote richtig verstanden habe, dann zieht Apple mit der nächsten macOS Version nach und implementiert &amp;ldquo;Snap&amp;rdquo;. So lange versuche ich es auch noch ohne extra Tool. Ein absolutes K.O. Kriterium ist allerdings die Windows Alt-Tab Implementierung von macOS (CONTROL + TAB). Ich nutze den Microsoft Edge als Browser und hab da 8-12 Profile eingerichtet. Auf Windows nutze ich die Edge Beta Version für meine LAB Profile, um eine noch einfachere Unterscheidung zwischen Produktion und LAB zu haben. Jedes Profil ist unter Windows ein eigenes Task Symbol. Ich kann also am Beta Logo sehen, ob LAB oder PROD und das Profilbild zeigt, welcher Kunde/Persona/Use Case damit verbunden ist. Auf dem Mac steckt alles hinter einem Edge Icon (oder zwei mit Beta). Über ein Rechtsklick auf das Icon, kann ich offene Tabs sehen (ohne Profilinformation). COMMAND + TAB bringt einfach den letzten Tab nach vorne. Hier MUSS man mit einem Helper-Tool unterstützen. Alle meine Kollegen haben hier auf &lt;a href="https://alt-tab-macos.netlify.app/" target="_blank">AltTab&lt;/a> verwiesen. Wenn man dann OPTION + TAB benutzt, dann gibt es ein Windows ähnliches Menü. Wenn man seine Edge Profile noch mit Farben versieht, kommt man auf ein nutzbares Niveau.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--alttab.jpeg" alt="alt tab on my system" />
&lt;/p>
&lt;h3 id="fazit">Fazit&lt;/h3>
&lt;p>Wenn Apple das Window Management verbessert, dann kann es auch mit nativen Tools etwas werden. AltTab wird aber wohl noch eine Weile nötig sein. Wächst man als Apple User auf, dann bin ich sicher man hat sich eine andere Arbeitsweise angewöhnt und ist genauso effektive und nutzt vielleicht 8 verschiedene Browser 😆&lt;/p>
&lt;h2 id="userinteraktion">Userinteraktion&lt;/h2>
&lt;p>Das Keyboard des MacBook Pro (M1 &amp;amp; M3) ist OK. Mein Dell XPS 15 hat ein großartiges Keyboard. Es gibt Windowsgeräte mit schlechten oder mittelmäßigem Keyboard. In der Windows Welt gibt es mehr Auswahl, aber eben auch die Chance mal im Mittelmaß zu landen, bei vergleichbarer Preisklasse. Als Windows User fehlen mir PRINT-SCR, POS1, END, PIPE &amp;ldquo;|&amp;rdquo; und noch ein paar Tasten, welche &amp;ldquo;falsch&amp;rdquo; belegt sind. Mit einer externen Tastatur (die ich auch unter Windows nur selten nutze) ist das weniger ein Problem, aber am Ende sicher einfach nur Gewohnheit.&lt;/p>
&lt;p>Eine große Umstellung sind allerdings die Shortcuts, die man über die Zeit gelernt hat. Die Handhaltung für Copy, Cut und Paste ist &amp;ldquo;ungewöhnlich&amp;rdquo;. Nach fast 27 Jahren Berufserfahrung bevorzuge ich die Windows Handhaltung. Wenn man sich unter macOS mal an COMMAND+C(X/V) gewöhnt hat, dann fällt als nächstes auf, dass der Mac das Springen zwischen einzelnen &amp;ldquo;Wörtern&amp;rdquo; mit der OPTION Taste implementiert. Ich bin sehr oft nur mit dem Keyboard unterwegs und will die letzten 3 Worte (C# Code) markieren, ausschneiden und 2 Worte weiter rechts einfügen. Auf dem PC geht das alles mit der STRG Taste (SHIFT + STRG + LINKS + LINKS + LINKS + X -&amp;gt; STRG + RECHTS + RECHTS + V). Auf dem Mac ist COMMAND + Links aber POS1. OPTION + Links sprint ein Wort in die gewünschte Richtung. Besonders bei Textbearbeitung (Word, PowerPoint, Outlook, VS Code) merke ich die Umstellung und bin noch immer nicht 100% flüssig unterwegs. Screenhots sind ebenfalls als Windows User super &amp;ldquo;komisch&amp;rdquo;.&lt;/p>
&lt;ul>
&lt;li>COMMAND + SHIFT + 3 = Ganzer Bildschirm&lt;/li>
&lt;li>COMMAND + SHIFT + 4 = Bildschirmauswahl (wobei der Bildschirminhalt nicht einfriert und &amp;ldquo;stillhält&amp;rdquo;)&lt;/li>
&lt;li>COMMAND + SHIFT + 4 + Spacebar = Fenster auswählen (wobei der Bildschirminhalt nicht einfriert und &amp;ldquo;stillhält&amp;rdquo;)&lt;/li>
&lt;li>COMMAND + SHIFT + 5 = Screenshot App mit ähnlichen Optionen wie Windows Snipping Tool (Screenrecoding, Annotations, &amp;hellip;)
Es kommt hinzu, dass der Screenshot &amp;ldquo;nur&amp;rdquo; auf den Desktop gespeichert wird und nicht parallel ins Clipboard. Dafür muss man zusätzlich die CONTROL Taste festhalten.&lt;/li>
&lt;/ul>
&lt;p>Ich habe noch nie und ich hoffe ich muss auch NIE eine Magic Mouse verwenden. Nicht nur das Ladekabel wäre eine K.O. Kriterium (Lightning), sondern der Wechsel von eine Logitech MX Master (2&amp;amp;3) wäre einfach unfair 😂 Ich spare mit mal mein &amp;ldquo;Fake&amp;rdquo; Dad-Joke zum fehlenden Rechtsklick. Ich hab von einem Mac User gelernt, dass man mit einem 3x Klick der linken Maustaste einen ganzen Block markiert. Mit einer externen Maus gelingt mir das leider nicht wirklich konsistent.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--mouse.png" alt="the holy mouse" />
&lt;/p>
&lt;p>Früher war der Trackpad des Mac ein Riesenvorteil. Heute haben wir im Windows alles kopiert, was wichtig war. Ob Maus oder Trackpad die Scrollrichtung ist als Windows-User falsch, aber man kann es für beide Geräte &amp;ldquo;richtigstellen&amp;rdquo;. Als Windows User gab es sonst hier keine großen Umstellungen.&lt;/p>
&lt;p>&lt;strong>Fazit&lt;/strong>: Die Umstellung fällt recht einfach, wenn man die wichtigsten &lt;a href="https://support.apple.com/en-us/102650" target="_blank">Command&lt;/a> im Kopf behält. Wechselt man immer hin und her, dann wird es etwas komplizierter (in meinem Alter zumindest).&lt;/p>
&lt;h2 id="software">Software&lt;/h2>
&lt;p>Wenn ich an macOS denke, wenn ich Apple und Software höre, dann denke ich an den Apple App Store. Wenn ich jetzt allerdings mein System anschaue, dann kommen weniger als 50% der Apps aus dem App Store. Ich nutze den Mac ja überwiegen als Microsoft 365 Berater und nicht als Privatperson. Mich hat aber schon überrascht, dass ich so &amp;ldquo;wenig&amp;rdquo; aus dem App Store installiert habe. Es war besonders irritieren, wenn ich versucht hab im Store nach Kollegen-Empfehlungen gesucht habe und dann nicht diese Version gefunden habe, sondern ähnliche und Fake-Apps&amp;quot;.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--appstore.png" alt="search for the browser opera" />
&lt;/p>
&lt;p>Für meine Arbeit mit PowerShell (Graph, PnP, Teams, Exchange, &amp;hellip;) bin ich auf einen Terminal angewiesen. Ich habe schon viel gutes vom Terminal auf macOS gehört. Eventuell geht es da aber um das grundlegende Vorhandensein eines echten Terminal. Ich persönlich komme damit nicht klar. Der Terminal unter Windows ist noch recht Jung und erst mit Windows 11 ab Werk integriert, aber ich bin sehr happy mit der Implementierung der verschiedenen Commandlines (CMS, PS5, PS7, VS Cmd, Cloud Shell, ..). Auf macOS habe ich dann den Tipp von einem Kollegen bekommen: &lt;a href="https://www.warp.dev" target="_blank">Warp&lt;/a>. Kostenlos und eine super Unterstützung. Danke Philipp!&lt;/p>
&lt;p>Windows hat irgendwann mit Windows 10 ein eingebautes Multi-Clipboard bekommen. Tatsächlich ist es viel zu unbekannt (alle mal WIN+V drücken). Durch meine Sitznachbarin dachte ich tatsächlich, dass macOS es schon seit Jahren hat. Allerdings war es keine Systemoption, sondern &lt;a href="https://github.com/TermiT/Flycut" target="_blank">flycut&lt;/a>. Ich brauche aber eine Lösung mit Bildersupport. Ich bin dann hier bei &lt;a href="https://maccy.app" target="_blank">maccy&lt;/a> gelandet. Es ist eine dieser Apps, die man via Brew installieren kann ohne zu zahlen oder aber für 10 Euro aus dem App Store.&lt;/p>
&lt;p>Was unter Windows die Tray Icons sind, finden wir im Mac oben rechts in den Menu Bar. Es ist verwunderlich, dass es hier keine Möglichkeit vom System gibt, diese Icons zu verschieben. Auf einem 13&amp;rsquo;&amp;rsquo; Mac (Pro oder Air) mit Notch hat man nur wenig Platz und die Icons verschwinden tatsächlich hinter der Notch. Auf einem MacBook Pro 16&amp;rsquo;&amp;rsquo; ist das Problem nicht ganz so dramatisch, aber die Tatsache, dass man die Reihenfolge nicht verändern kann, ist sehr irritierend. Philipp hat mir hier Bartender empfohlen, aber die 20 Euro !!! haben mich dann doch nach Alternativen suchen lassen. Ich bin dann über Hidden Bar gestolpert und ganz zufrieden. Wenn man einen zweiten Bildschirm hat, dann kann man alle Icons so anordnen wie man will.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--hiddenbar.png" alt="want my windows tray icons back" />
&lt;/p>
&lt;p>Die Microsoft 365 Apps for Enterprise funktinieren natürlich auf dem Mac. In der täglichen Nutzung habe ich aber immer wieder den Eindruck, dass es sich irgendwie anders anfühlt. Es ist vielleicht nur ein Gefühl eines alternden Office 95 Benutzers. Outlook spielt nur eine untergeordnete Rolle in meinem Alltag. Für das Verwalten von geschäftlichen und privaten Terminen ist es aber noch immer das Tool meiner Wahl. Ich bin immer davon ausgegangen, dass es auch auf dem Mac ein &amp;ldquo;New Outlook&amp;rdquo; gibt. Es gibt tatsächlich zwei Versionen von Outlook, aber keine Version entspricht dem &amp;ldquo;New Outlook&amp;rdquo; unter Windows. Ich bin aktuell noch unentschlossen, ob ich deswegen wieder Outlook on the Web als Edge App nutzen soll oder bei der neuen Outlook Version des Mac bleibe.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--outlook.png" alt="not the new outlook you are looking for" />
&lt;/p>
&lt;h3 id="liste-und-links">Liste und Links&lt;/h3>
&lt;ul>
&lt;li>Intune
&lt;ul>
&lt;li>Company Portal&lt;/li>
&lt;li>Microsoft 365 Apps for Enterprise (Outlook, Word, Excel, PowerPoint und Teams)&lt;/li>
&lt;li>Microsoft Edge&lt;/li>
&lt;li>Microsoft Remote Desktop&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Downloads von der Website
&lt;ul>
&lt;li>VS Code &lt;a href="https://code.visualstudio.com/Download" target="_blank">Link&lt;/a>&lt;/li>
&lt;li>Brew &lt;a href="https://brew.sh" target="_blank">Link&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Installation via Brew
&lt;ul>
&lt;li>Terminal Warp: Your terminal, reimagined &lt;a href="https://www.warp.dev" target="_blank">Link&lt;/a>&lt;/li>
&lt;li>Stats a better ressource monitor &lt;a href="https://github.com/exelban/stats" target="_blank">Link&lt;/a>&lt;/li>
&lt;li>Maccy a multi clipboard with picture support &lt;a href="https://github.com/p0deje/Maccy" target="_blank">Link&lt;/a>&lt;/li>
&lt;li>AltTab &lt;a href="https://alt-tab-macos.netlify.app" target="_blank">Link&lt;/a>&lt;/li>
&lt;li>PowerShell 7 &lt;a href="https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4" target="_blank">Link&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>App Store
&lt;ul>
&lt;li>Hidden Bar [Link]https://apps.apple.com/de/app/hidden-bar/id1452453066?l=en-GB&amp;amp;mt=12&lt;/li>
&lt;li>Keeper Password manager &lt;a href="https://apps.apple.com/de/app/keeper-password-manager/id414781829?l=en-GB&amp;amp;mt=12" target="_blank">Link&lt;/a>&lt;/li>
&lt;li>WhatsApp &lt;a href="https://apps.apple.com/de/app/whatsapp-messenger/id310633997?l=en-GB" target="_blank">Link&lt;/a>&lt;/li>
&lt;li>Lightshot a screenshot tool &lt;a href="https://apps.apple.com/de/app/lightshot-screenshot/id526298438?l=en-GB&amp;amp;mt=12" target="_blank">Link&lt;/a>&lt;/li>
&lt;li>Azure VPN Client &lt;a href="https://apps.apple.com/de/app/azure-vpn-client/id1553936137?l=en&amp;amp;mt=12" target="_blank">Link&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Ich habe auch nach etwas wie Zoomit gesucht aber leider nicht gefunden. Allerdings gibt es eine Teil-Lösung für den Zoom aus dem System (Accessability)&lt;/p>
&lt;ul>
&lt;li>System Settings - Zoom - Finger double tap&lt;/li>
&lt;/ul>
&lt;h3 id="gaming">Gaming&lt;/h3>
&lt;p>Auf meinem Windows ist das kein Problem. Ich habe eine Xbox und seit Jahren ein Xbox Ultimate Abo. Meine Kids und ich können so mit eigenem Konto auf der Xbox eine Menge Games nutzen. Das Ultimate Abo unterstützt auch Windows und so nutze ich immer wieder Games aus dem Angebot (Minecraft, Age of Empires und zuletzt Valheim). Auf dem Mac gibt es keines der Angebote lokal. Durch das Xbox Cloud Gaming gibt es die Möglichkeit, die Spiele aus der Cloud zu streamen.&lt;/p>
&lt;p>Meine Steam Library ist nicht riesig, aber es sind schon ein paar Games enthalten. Es gibt einige Spiele die automatisch mit einer macOS Version kommen. Ich habe Stelaris und Age of Wonders - Planetfall getestet. Aktuelle im Angebot für 2,49 Euro ist X-Com 2. Es hat funktioniert. Leider sind Spiele wie Counter Strike 2 nicht nativ verfügbar. Auf dem PC spiele ich ab und an Age Of Wonders 4 und genau das Spiel gibt es nicht für macOS.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--ageofwonders4.png" alt="no age of wonders 4" />
&lt;/p>
&lt;p>Auf dem PC kann ich dank einer RTX 4060 eine Menge spiele gute Gewissens kaufen und spielen. Ich mache es selten, aber ein Wechsel auf macOS würde bedeuten, dass ich einige Spiele nicht spielen kann oder neu kaufen muss.&lt;/p>
&lt;h2 id="performance">Performance&lt;/h2>
&lt;p>Ich nutze die Systeme im Business Kontext. Microsoft ist weit gekommen, was das Mac Management angeht, aber es ist offensichtlich, dass auf Windows viel mehr Kontrolle möglich ist. Wir nutzen auf Windows die volle Palette aus dem Security Stack. Überall steckt der Defender drin und passt auf uns auf. Auf keinem meiner Systeme hatte ich aber über die letzten Jahre den Eindruck, dass ich behindert wurde. Meine Development Tasks sind aber alle sehr Windows nah (Azure Function mit C#). Microsoft Teams mit viel Video und vielen Teams war der Performance Killer der letzten Jahre. Nach 3 Wochen und am Ende mit einem Low Tier Apple MacBook Air 13&amp;rsquo;&amp;rsquo; (8 GB RAM, 265 GB Disk für ca 1.300 Euro) bin ich von der Performance beindruckt. Allerding fühlt sich auch das MacBook 13&amp;rsquo;&amp;rsquo; M1 (16 GB) und M3 (16 GB) nicht viel schneller an. Es geht hier um meinen Einsatzzweck ohne Video Editing oder ähnlichen Medien lastigen Aufgaben. Wir nutzen auch auf dem Mac alles, was im Defender und Microsoft Security Stack geht. Meine Kollegen sagen mir aber immer, dass noch längst nicht alle geht. Vielleicht braucht der Mac das auch gar nicht&amp;hellip; bekomme ich immer wieder zu hören. Ich sehe hier also keinen klaren Vorteil, was die reine Rechenleistung für meine tägliche Arbeit angeht.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--performance.jpeg" alt="windows and apple racing" />
&lt;/p>
&lt;p>Im Bereich Akkuleistung muss ich den Hut ziehen. Alles was man hört ist wahr. Das kleine MacBook Air hat gerade VS Code, Hugo Server, Teams, Outlook, 5 Edgeprofile mit einiges Tabs offen und ich sitze seit 2 Stunden auf der Couch und schreibe den Artikel. Das Gerät ist warm. Aber ich habe noch immer 64% Akku. Mein Dell XPS 15 wäre nach 1 Stunde bei 10%. Wenn ich den Hugo Server stoppe, dann wäre die Laufzeit nochmal länger. Steckdosen sind für Mac User nicht so relevant wie für uns Windows User. Vielleicht wird es mit den neuen Snapdragon X Elite/Pro besser, aber der Mac ist der deutliche Gewinner im Bereich mobile Nutzung.&lt;/p>
&lt;h2 id="resümee">Resümee&lt;/h2>
&lt;p>Jedes System hat seine Stärken und Schwächen. Ich nutze nicht nur Windows, sondern bin auch privat im Microsoft und Google Ökosystem verwurzelt, so dass ein Wechsel für mich kein Sinn macht. Bei glueckkanja leben wir schon seit vielen Jahren mit einer großen Zahl an macOS Benutzern. Microsoft 365 und Apple funktionieren zusammen. In meiner Rolle fehlen, dann aktuell noch ein paar Stücke Software, um wirklich wechseln zu können. Ich werde weiter in der Nähe von Steckdosen meine erarbeitete Produktivität genießen und von einer ARM-basierten Revolution im Windows-Lager warten.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20240627-getting-into-macos-as-a-windows-it-pro--mslovesapple.jpeg" alt="Microsoft Loves Apple" />
&lt;/p>
&lt;p>Ich hoffe meine Gedanken und Experimente helfen anderen schneller in der Plattform Fuß zu fassen. Ich bin sehr an euren Kommentaren interessiert und an euren Geschichten. Meldet euch doch via Twitter oder LinkedIn.&lt;/p></description></item><item><title>Microsoft Teams Incoming Webhook update required</title><link>https://marcoscheel.de/post/2021/01/20210127-microsoftteams-webhookupdate/</link><pubDate>Wed, 27 Jan 2021 08:08:08 +0100</pubDate><guid>https://marcoscheel.de/post/2021/01/20210127-microsoftteams-webhookupdate/</guid><description>&lt;p>With the &lt;a href="https://admin.microsoft.com/Adminportal/Home?#/MessageCenter/:/messages/MC234048" target="_blank">Message Center Notification MC234048&lt;/a> Microsoft announced a change to the Microsoft Teams App &amp;ldquo;Incoming Webhook&amp;rdquo;. The URL currently used will be deprecated by mid of April 2021. The exact wording is:&lt;/p>
&lt;blockquote>
&lt;p>We will begin transitioning to the new webhook URLs on Monday January 11, 2021; however, existing webhooks URLs will continue to work for three (3) months to allow for migration time
Source (as of 2021-01-26): &lt;a href="https://admin.microsoft.com/Adminportal/Home?#/MessageCenter/:/messages/MC234048" target="_blank">https://admin.microsoft.com/Adminportal/Home?#/MessageCenter/:/messages/MC234048&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>If you created a webhook prior January 11, 2021 you will need to update your existing connector configuration!&lt;/strong>&lt;/p>
&lt;p>This app is in regular use by most companies, if not disabled by a Teams App permission policy in the tenant. The app is a very easy option to post a message to a team. The URI of a webhook is cryptic and the only security in place. If you send a well-crafted HTTP message to the endpoint, you will create a Teams post in the channel the app is connected to. Here is the &lt;a href="https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook" target="_blank">Microsoft documentation&lt;/a> and a great &lt;a href="https://d365dotblog.com/2021/01/18/post-message-to-teams-using-incoming-webhook/" target="_blank">community article&lt;/a>.&lt;/p>
&lt;p>Currently Microsoft is using a non-tenant specific URI (outlook.office.com). The new URI will be tenant related (YOURTENANT.webhook.office.com).&lt;/p>
&lt;p>This feature is communicated for Microsoft Teams, but it is also a Microsoft 365 Group Connector feature so these might also affected.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210127-microsoftteams-webhookupdate--title.png" alt="image" />
&lt;/p>
&lt;h2 id="check-if-the-app-is-used">Check if the app is used&lt;/h2>
&lt;p>It could be a good idea to check, if the app is active in your tenant. As a Teams administrator you can &lt;a href="https://admin.teams.microsoft.com/policies/manage-apps/203a1e2c-26cc-47ca-83ae-be98f960b6b2/" target="_blank">check the application in your admin center&lt;/a>.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210127-microsoftteams-webhookupdate--app.png" alt="image" />
&lt;/p>
&lt;p>Even if you checked the app and the Teams App Permission policy you could still have the app installed prior this configuration. It is easy to check if the application is installed in a Microsoft Team. To query for installed apps we will need to use the &lt;a href="https://www.powershellgallery.com/packages/MicrosoftTeams/" target="_blank">preview version of the MicrosoftTeams module (as of writing 1.1.10-preview)&lt;/a>. Using the Teams PowerShell you can get a list of Teams the app is installed in.&lt;/p>
&lt;p>Get the application ID and more details:&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">Get-TeamsApp | Where-Object { $_.DisplayName -eq &amp;quot;Incoming Webhook&amp;quot;}
&lt;/code>&lt;/pre>
&lt;p>Result:&lt;/p>
&lt;pre>&lt;code>ExternalId Id DisplayName DistributionMethod
---------- -- ----------- ------------------
203a1e2c-26cc-47ca-83ae-be98f960b6b2 Incoming Webhook store
&lt;/code>&lt;/pre>
&lt;p>With the application id we now can query all teams and check if the app is installed:&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">Get-Team | ForEach-Object {
$team = $_;
$apps = Get-TeamsAppInstallation -TeamId $team.GroupId | Where-Object { $_.TeamsAppId -eq &amp;quot;203a1e2c-26cc-47ca-83ae-be98f960b6b2&amp;quot;};
if ($apps -ne $null){
$team;
}
}
&lt;/code>&lt;/pre>
&lt;p>Result for my two teams with the app installed:&lt;/p>
&lt;pre>&lt;code>GroupId DisplayName Visibility Archived MailNickName Description
------- ----------- ---------- -------- ------------ -----------
a6687ed4-c1a6-4c7b-9171-2d625a60b76e GK Malachor MSDN Public False GKMalachorMSDN Check here for or…
75366f42-6fc6-4857-90d1-3283236789b6 20200906 Demo Acc… Private False 20200906DemoAcces… 20200906 Demo Acc…
&lt;/code>&lt;/pre>
&lt;p>Based on this information we now can contact the owners/members of a team and make them check if they use the app and need to update the URI. Currently I am not aware of a method to get the specific channel the webhook is attached to. The user needs to check all the channels to find the connectors.&lt;/p>
&lt;h2 id="how-to-fix-the-problem">How to fix the problem&lt;/h2>
&lt;p>The user needs to navigate to the team and check for the connector of all channels:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210127-microsoftteams-webhookupdate--channel.png" alt="image" />
&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210127-microsoftteams-webhookupdate--channel-configure.png" alt="image" />
&lt;/p>
&lt;p>Open the &amp;ldquo;x configured&amp;rdquo; (1) if available and click on the &amp;ldquo;Manage&amp;rdquo; (2) button for the specific implementation:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210127-microsoftteams-webhookupdate--channel-configured.png" alt="image" />
&lt;/p>
&lt;p>This will show you the current configuration of the webhook:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210127-microsoftteams-webhookupdate--fix.png" alt="image" />
&lt;/p>
&lt;p>You need to click on &amp;ldquo;Update URL&amp;rdquo; and you will receive a new URI with the tenant specific part. The connector page did not refresh automatically. I quite the page and reopened the dialog. Now the page is not complaining about a required update and I could copy the new webhook URI:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210127-microsoftteams-webhookupdate--fixed.png" alt="image" />
&lt;/p>
&lt;p>Now you just need to remember and find the app you integrated the webhook in :)&lt;/p>
&lt;p>&lt;strong>NOTE:&lt;/strong> I was not able to update the incoming webhook, if the account that created the webhook is not the account updating the webhook. You can see the account that did the setup in the connector list and you will notice the &amp;ldquo;Save&amp;rdquo; button is disabled. In this case an easy option is to delete webhook and recreate it with the same name.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210127-microsoftteams-webhookupdate--unfixable.png" alt="image" />
&lt;/p>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Check your tenant (admin) or teams (power users) for the configuration of incoming webhook. Remember as soon as you update the URL the webhook for this will stop working and not accept messages. Updating the URL is only solving 50% of the problem. You also need to update your Power Automate flows, Azure Functions, Azure Automation Runbooks or your PowerShell scripts in your on-prem servers task scheduler.&lt;/p>
&lt;h2 id="bonus">Bonus&lt;/h2>
&lt;p>Get the owners of the groups to send an email:&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">Get-Team | ForEach-Object {
$team = $_;
$apps = Get-TeamsAppInstallation -TeamId $team.GroupId | Where-Object { $_.TeamsAppId -eq &amp;quot;203a1e2c-26cc-47ca-83ae-be98f960b6b2&amp;quot;};
if ($apps -ne $null){
Get-TeamUser -GroupId $team.GroupId -Role Owner | ForEach-Object {
$owner = $_;
$fields = @{
Team = $team.DisplayName
OwnerEmail = $owner.User
}
New-Object -TypeName PSObject -Property $fields;
}
}
}
&lt;/code>&lt;/pre>
&lt;p>Result:
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210127-microsoftteams-webhookupdate--owneremail.png" alt="image" />
&lt;/p></description></item><item><title>Create your Azure AD application via script - M365.TeamsBackup</title><link>https://marcoscheel.de/post/2021/01/20210124-m365teamsbackup-aadapp/</link><pubDate>Mon, 25 Jan 2021 10:10:10 +0100</pubDate><guid>https://marcoscheel.de/post/2021/01/20210124-m365teamsbackup-aadapp/</guid><description>&lt;p>If you are using Azure AD authentication for your scripts, apps, or other scenarios at some point you will end up creating your own application in your directory. Normally you open the Azure portal and navigate to the &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app" target="_blank">&amp;ldquo;App registrations&amp;rdquo;&lt;/a> part of AAD. This is fine during development, but if you want to share the solution or a customer wants to run the software in their own tenant, things get complicated and error prone. For my Microsoft Teams backup solution this is very real because you need to hit all required permissions and configure the public client part otherwise the solution will not run.&lt;/p>
&lt;p>This post provides you will all the needed information to create your own script. I&amp;rsquo;m using my &lt;a href="https://github.com/marcoscheel/M365.TeamsBackup" target="_blank">M365 Teams Backup&lt;/a> solution as a reference. The key components are:&lt;/p>
&lt;ul>
&lt;li>Install the Azure CLI or the Azure AD Preview PowerShell module&lt;/li>
&lt;li>The scripts to setup the app
&lt;ul>
&lt;li>&lt;a href="https://github.com/marcoscheel/M365.TeamsBackup/blob/main/deploy/create-aadapp-cli.ps1" target="_blank">create-aadapp-cli.ps1&lt;/a> via Azure CLI&lt;/li>
&lt;li>or &lt;a href="https://github.com/marcoscheel/M365.TeamsBackup/blob/main/deploy/create-aadapp.ps1" target="_blank">create-aadapp.ps1&lt;/a> via PowerShell&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210124-m365teamsbackup-aadapp--title.jpg" alt="image" />
&lt;/p>
&lt;h2 id="choose-a-scripting-environment-azure-cli-vs-azure-ad-ps">Choose a scripting environment (Azure CLI vs Azure AD PS)&lt;/h2>
&lt;p>During my day job I created some applications based on &lt;a href="https://docs.microsoft.com/en-us/graph/overview" target="_blank">Microsoft Graph&lt;/a> and I tried a few approaches to script the Azure AD app creation. It is important to understand that an Azure AD application consists of two parts. The application registration is like a blueprint for your app. The enterprise application is the implementation of your blueprint.&lt;/p>
&lt;p>The application permissions are defined in the &amp;ldquo;App registration&amp;rdquo;. Here you select the permissions that your app will request from users in the tenant. Without a consent the permissions are not in effect. If your only have an app registered but not received consent the app will not be able to use the requested permissions. Check the &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent" target="_blank">Microsoft documentation&lt;/a> for a deeper look at the consent framework.&lt;/p>
&lt;p>Most of my applications leverage &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#permission-types" target="_blank">application permissions&lt;/a> or require admin consent for delegate permissions. The �M365.TeamsBackup� solution is using a bunch of Microsoft Graph permissions and some of them are pretty powerful. If you have an application with this kind of permission requirements it is needed to have &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#admin-restricted-permissions" target="_blank">admin consent&lt;/a> given by a (best case) global administrator.&lt;/p>
&lt;p>If your apps are like mine, it might be the best to use the Azure CLI because this is as of my knowledge the only way to script the admin consent. I am not a CLI guy. I am a PowerShell fan. I struggled in the past integrating the CLI and its output into my scripting flow. That is why I wanted to show you what and how it can be done. If you are OK with opening the portal to give admin consent or you don&amp;rsquo;t want to give admin consent during application setup, I also have an Azure AD PowerShell version of the script.&lt;/p>
&lt;h3 id="setup-azure-cli-and-connect">Setup Azure CLI and connect&lt;/h3>
&lt;p>The Azure CLI is not purely targeted at Azure AD. It is the other way around because the CLI is used to script all the Azure things available. There is great Microsoft docs on &lt;a href="https://docs.microsoft.com/en-us/cli/azure/install-azure-cli" target="_blank">installing the Azure CLI&lt;/a>. I&amp;rsquo;m running on Windows, so I typically go the MSI route:&lt;/p>
&lt;ul>
&lt;li>Download the release version of the MSI (that is what I&amp;rsquo;m running)&lt;/li>
&lt;li>Install the MSI (bring some extra time because the installation is slow)&lt;/li>
&lt;li>After the download open a new PowerShell (this ensured the path is set and available)&lt;/li>
&lt;li>You can check if the installation worked using the &amp;lsquo;az &amp;ndash;version&amp;rsquo; command&lt;/li>
&lt;/ul>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210124-m365teamsbackup-aadapp--setup-cli.png" alt="image" />
&lt;/p>
&lt;p>As you can see my version is not up to date. As with most tools you need to keep these tools at the latest version. The Azure CLI can be updated by installing the newest MSI or by running an admin command using this command &amp;lsquo;az upgrade&amp;rsquo;. The upgrade command will download the MSI and start the installation for you.&lt;/p>
&lt;p>Installation is finish and now it is time to login to your tenant. The CLI is different from your normal &amp;ldquo;PowerShell Connect-SERVICE&amp;rdquo; (SharePoint, AD, Teams, &amp;hellip;) command. The Azure CLI will remember your last login. If you close and open your terminal you will still be logged in. If you use the Azure CLI just for the one-time setup, please consider a logout after you finish any script. But first lets login. I&amp;rsquo;m a big fan of &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code" target="_blank">device code authentication&lt;/a> where possible. &lt;a href="https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-windows?tabs=azure-cli#run-the-azure-cli" target="_blank">Azure CLI is supporting&lt;/a> this flow so that is how I roll:&lt;/p>
&lt;ul>
&lt;li>Login:
&lt;ul>
&lt;li>az login &amp;ndash;use-device-code &amp;ndash;allow-no-subscriptions&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Check current login:
&lt;ul>
&lt;li>az account show&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Logout:
&lt;ul>
&lt;li>az logout&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210124-m365teamsbackup-aadapp--setup-cliaccount.png" alt="image" />
&lt;/p>
&lt;p>Check my script using the Azure CLI:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/marcoscheel/M365.TeamsBackup/blob/main/deploy/create-aadapp-cli.ps1" target="_blank">create-aadapp-cli.ps1&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="setup-azure-ad-powershell-and-connect">Setup Azure AD PowerShell and connect&lt;/h3>
&lt;p>Azure AD PowerShell versioning is complicated. For my job (M365 Modern Collaboration) I am always using the AzureADPreview module and this is what I recommend in most cases. The AzureADPreview cannot be installed side by side with the &lt;a href="https://docs.microsoft.com/en-us/powershell/module/azuread/?view=azureadps-2.0-preview" target="_blank">AzureADPreview&lt;/a>, so at some point you will have to move to the AzureADPreview. As the Azure CLI is not PowerShell based I am using my Windows Terminal default that is PowerShell 7. The Azure AD modules are not yet ready for PowerShell 7 so you will need to open your old school PowerShell 5.&lt;/p>
&lt;p>&lt;a href="https://docs.microsoft.com/en-us/powershell/azure/active-directory/install-adv2?view=azureadps-2.0-preview" target="_blank">Installing the Azure AD module&lt;/a> is like most modern modules and relies on the Powershell gallery.&lt;/p>
&lt;ul>
&lt;li>Open your PowerShell as an administrator and execute
&lt;ul>
&lt;li>Install-module AzureADPreview&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Check your version opening a non admin session
&lt;ul>
&lt;li>Get-Module AzureADPreview -ListAvailable&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210124-m365teamsbackup-aadapp--setup-ps.png" alt="image" />
&lt;/p>
&lt;p>If you are not on the latest version, you need to upgrade the module like any other module:&lt;/p>
&lt;ul>
&lt;li>Open your PowerShell as an administrator and execute
&lt;ul>
&lt;li>Update-Module AzureADPreview&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20210124-m365teamsbackup-aadapp--setup-psupdate.png" alt="image" />
&lt;/p>
&lt;p>To connect to Azure AD you cannot rely on device authentication and you will need to login directly on the script execution. If you need to execute multiple scripts, check if you want to disable the login command &amp;ldquo;Connect-AzureAD&amp;rdquo; in the script to prevent multiple logins (incl. MFA).&lt;/p>
&lt;ul>
&lt;li>Open your PowerShell and execute
&lt;ul>
&lt;li>Connect-AzureAD&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Check my script using the Azure CLI:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/marcoscheel/M365.TeamsBackup/blob/main/deploy/create-aadapp.ps1" target="_blank">create-aadapp.ps1&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="script-the-creation-process">Script the creation process&lt;/h2>
&lt;p>Now we are prepared, and we can create our application. The easy part is to create an &amp;ldquo;App registration&amp;rdquo;. If your app need permissions the trouble begins. There are two challenges:&lt;/p>
&lt;ul>
&lt;li>Setting the permission in the two scripts&lt;/li>
&lt;li>Getting the permission definition in the first place&lt;/li>
&lt;/ul>
&lt;p>Getting the permission translated from the nice Azure AD portal UX to a script-ready solution is harder to research than expected. I&amp;rsquo;ve done a &lt;a href="https://marcoscheel.de/post/2019/07/186138885112-app-permissions-f%C3%BCr-microsoft-graph-calls/" target="_blank">blog post&lt;/a> (in German) about this in the past. In the next section I will show you how to get the ID of the Microsoft Graph application and the IDs of the required permissions.&lt;/p>
&lt;p>My Teams Backup solution requires many permissions from the Microsoft Graph (this time delegation because app permissions for &lt;a href="https://docs.microsoft.com/en-us/graph/teams-protected-apis" target="_blank">some require Microsoft approval&lt;/a>) so let�s have a look at a non-error prone implementation that is also easy to read and extend.&lt;/p>
&lt;h3 id="azure-cli">Azure CLI&lt;/h3>
&lt;p>For reference: &lt;a href="https://github.com/marcoscheel/M365.TeamsBackup/blob/main/deploy/create-aadapp-cli.ps1" target="_blank">create-aadapp-cli.ps1&lt;/a>
Microsoft docs: &lt;a href="https://docs.microsoft.com/en-us/cli/azure/reference-index?view=azure-cli-latest" target="_blank">az command overview&lt;/a>&lt;/p>
&lt;p>Use the Azure CLI to query the Azure Active Directory for the service principal with the name of the Microsoft Graph.&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">$servicePrincipalName = &amp;quot;Microsoft Graph&amp;quot;;
$servicePrincipalId = az ad sp list --filter &amp;quot;displayname eq '$servicePrincipalName'&amp;quot; --query '[0].appId' | ConvertFrom-Json
&lt;/code>&lt;/pre>
&lt;p>Using the query parameter we select the first result (there is only one Microsoft Graph) and &amp;ldquo;cast&amp;rdquo; the app ID. Using the ConvertFrom-JSON makes it easy to parse the result and we receive &amp;ldquo;00000003-0000-0000-c000-000000000000&amp;rdquo; as the value for the app id.&lt;/p>
&lt;p>Next, we need to get the ID for each required permission. This info is part of the &amp;ldquo;oauth2Permissions&amp;rdquo; property from the MS Graph service principal:&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">$servicePrincipalNameOauth2Permissions = @(&amp;quot;Channel.ReadBasic.All&amp;quot;, &amp;quot;ChannelMember.Read.All&amp;quot;, &amp;quot;ChannelMessage.Read.All&amp;quot;, &amp;quot;ChannelSettings.Read.All&amp;quot;, &amp;quot;Group.Read.All&amp;quot;, &amp;quot;GroupMember.Read.All&amp;quot;, &amp;quot;Team.ReadBasic.All&amp;quot;, &amp;quot;TeamMember.Read.All&amp;quot;, &amp;quot;TeamSettings.Read.All&amp;quot;, &amp;quot;TeamsTab.Read.All&amp;quot;);
(az ad sp show --id $servicePrincipalId --query oauth2Permissions | ConvertFrom-Json) | ? { $_.value -in $servicePrincipalNameOauth2Permissions} | % {
$permission = $_
$delPermission = @{
id = $permission.Id
type = &amp;quot;Scope&amp;quot;
}
$reqGraph.resourceAccess += $delPermission
}
&lt;/code>&lt;/pre>
&lt;p>Using the &amp;ldquo;-in&amp;rdquo; filter we receive all specified entries for the array we need. To use the IDs in the next command the script creates a hashtable that can be converted in the needed JSON file (correct a file). The permissions are added as &amp;ldquo;Scope&amp;rdquo; representing &amp;ldquo;Delegation&amp;rdquo; permission. The &amp;ldquo;az ad app create&amp;rdquo; command will require a file with the permissions.&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">Set-Content ./required_resource_accesses.json -Value (&amp;quot;[&amp;quot; + ($reqGraph | ConvertTo-Json) + &amp;quot;]&amp;quot;)
$newapp = az ad app create --display-name $appName --available-to-other-tenants false --native-app true --required-resource-accesses `@required_resource_accesses.json | ConvertFrom-Json
&lt;/code>&lt;/pre>
&lt;p>This creates an app that is only valid in your tenant &amp;ldquo;&amp;ndash;available-to-other-tenants false&amp;rdquo; and allows the login as a public client &amp;ldquo;&amp;ndash;native-app true&amp;rdquo;. The result is a JSON representing the new application.&lt;/p>
&lt;p>The benefit of using the Azure CLI is the possibility to grant admin consent for the newly created app&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">az ad app permission admin-consent --id $newapp.appId
&lt;/code>&lt;/pre>
&lt;h3 id="powershell-with-azure-ad">PowerShell with Azure AD&lt;/h3>
&lt;p>For reference: &lt;a href="https://github.com/marcoscheel/M365.TeamsBackup/blob/main/deploy/create-aadapp.ps1" target="_blank">create-aadapp.ps1&lt;/a>
Microsoft docs: &lt;a href="https://docs.microsoft.com/en-us/powershell/module/azuread/?view=azureadps-2.0#applications" target="_blank">Azure AD Application command overview&lt;/a>&lt;/p>
&lt;p>To get the ID for the Microsoft Graph Service principal we query the current directory and filter to the display name.&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">$servicePrincipalName = &amp;quot;Microsoft Graph&amp;quot;;
$servicePrincipal = Get-AzureADServicePrincipal -All $true | ? { $_.DisplayName -eq $servicePrincipalName };
&lt;/code>&lt;/pre>
&lt;p>Where the Azure CLI requires a file to setup permission, the PowerShell version requires a .NET object. The Microsoft Graph service principal ID is the ResourceAppID.&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">$reqGraph = New-Object -TypeName &amp;quot;Microsoft.Open.AzureAD.Model.RequiredResourceAccess&amp;quot;;
$reqGraph.ResourceAppId = $servicePrincipal.AppId;
&lt;/code>&lt;/pre>
&lt;p>From the returned object we can select the &amp;ldquo;Oauth2Permissions&amp;rdquo; property to filter on our array with the required permissions. For each permission another .NET object is created and added to the collection named &amp;ldquo;ResourceAccess&amp;rdquo;.&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">$servicePrincipalNameOauth2Permissions = @(&amp;quot;Channel.ReadBasic.All&amp;quot;, &amp;quot;ChannelMember.Read.All&amp;quot;, &amp;quot;ChannelMessage.Read.All&amp;quot;, &amp;quot;ChannelSettings.Read.All&amp;quot;, &amp;quot;Group.Read.All&amp;quot;, &amp;quot;GroupMember.Read.All&amp;quot;, &amp;quot;Team.ReadBasic.All&amp;quot;, &amp;quot;TeamMember.Read.All&amp;quot;, &amp;quot;TeamSettings.Read.All&amp;quot;, &amp;quot;TeamsTab.Read.All&amp;quot;);
$servicePrincipal.Oauth2Permissions | ? { $_.Value -in $servicePrincipalNameOauth2Permissions} | % {
$permission = $_
$delPermission = New-Object -TypeName &amp;quot;Microsoft.Open.AzureAD.Model.ResourceAccess&amp;quot; -ArgumentList $permission.Id,&amp;quot;Scope&amp;quot; #delegate permission (oauth) are always &amp;quot;Scope&amp;quot;
$reqGraph.ResourceAccess += $delPermission
}
&lt;/code>&lt;/pre>
&lt;p>Now it is time to setup the application (only in this directory and as public client) and retrieve the ID of the new app:&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">New-AzureADApplication -DisplayName $appName -AvailableToOtherTenants:$false -PublicClient:$true -RequiredResourceAccess $reqGraph;
&amp;quot;ClientId: &amp;quot; + $newapp.AppId;
&amp;quot;TenantId: &amp;quot; + (Get-AzureADTenantDetail).ObjectId;
&amp;quot;Check AAD app: https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/CallAnAPI/appId/&amp;quot; + $newapp.AppId + &amp;quot;/objectId/&amp;quot; + $newapp.ObjectId + &amp;quot;/isMSAApp/&amp;quot;;
&lt;/code>&lt;/pre>
&lt;p>The last line creates a link to the Azure AD to grant admin consent.&lt;/p>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>You can check out my linked solution to get the full picture from the client code using the app to the setup required for authentication. I would recommend checking out the Azure CLI because it is the most complete solution even though it does not feel natural to me as a PowerShell guy. The example should give you an idea how to get the needed IDs and how to constructed the required objects/file to create the app. Let me know how you setup Azure AD apps and if there are other options. I&amp;rsquo;ve ignored the &lt;a href="https://docs.microsoft.com/en-us/powershell/module/az.resources/new-azadapplication" target="_blank">PowerShell AZ module&lt;/a> because you are not able to grant admin consent too and chances are higher you may have AzureAD PowerShell installed already.&lt;/p></description></item><item><title>Microsoft Teams backup your channel messages with Microsoft Graph</title><link>https://marcoscheel.de/post/2020/12/20201130-m365teamsbackup/</link><pubDate>Sun, 13 Dec 2020 00:21:00 +0100</pubDate><guid>https://marcoscheel.de/post/2020/12/20201130-m365teamsbackup/</guid><description>&lt;p>I have sat down for four weekends in a row to come up with a solution for two problem I encountered in the past:&lt;/p>
&lt;ul>
&lt;li>I wanted to save all images from a beautiful Teams channel message. Teams is saving these inline images not to SharePoint. The only way to download is to click on each image.&lt;/li>
&lt;li>We are doing a Tenant to Tenant migration at &lt;a href="https://glueckkanja-gab.com/en/" target="_blank">glueckkanja-gab&lt;/a> after our merger. Most of the migration tools will support the migration of Teams chat, but not all tools are available, and some implementations are lacking features for a more flexible approach.&lt;/li>
&lt;/ul>
&lt;p>I started my career as a developer and my heart is still thinking Visual Basic. Do not be afraid, I migrated my dev skills to C# a long time ago and my array starts at 0 not 1.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201130-m365teamsbackup--title.png" alt="image" />
&lt;/p>
&lt;p>I really wanted to try a few things regarding Microsoft Graph, the Microsoft Graph SDK and Microsoft Teams. The Microsoft Teamwork part of the API has a solid starting point (if you look at the beta version). The API is getting &lt;a href="https://docs.microsoft.com/en-us/graph/teams-concept-overview" target="_blank">very mature set of capabilities&lt;/a>. I&amp;rsquo;m a huge fan of &lt;a href="https://azure.microsoft.com/en-us/services/functions/" target="_blank">Azure Functions&lt;/a> and I&amp;rsquo;ve done quite a few projects that are talking to the Microsoft Graph using &lt;a href="https://docs.microsoft.com/en-us/graph/auth/auth-concepts#microsoft-graph-permissions" target="_blank">Application Permissions&lt;/a>. I&amp;rsquo;ve checked the documentation and if I wanted to go this route I would have to request &lt;a href="https://docs.microsoft.com/en-us/graph/teams-protected-apis" target="_blank">special permissions&lt;/a> from Microsoft to access the content without a real user. For now I decided to go with a console application and a &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code" target="_blank">Azure AD Device Code flow&lt;/a>.&lt;/p>
&lt;p>I have published the source code at GitHub. Maybe this will get your own solution a kickstart. Just a quick disclaimer: A lot of this stuff is first time code for me (DI in a console, Graph Auth provider, logging, &amp;hellip;). I think at some points I over-engineered the solution and I got distracted from my real business problems ;)&lt;/p>
&lt;p>&lt;a href="https://github.com/marcoscheel/M365.TeamsBackup" target="_blank">https://github.com/marcoscheel/M365.TeamsBackup&lt;/a>&lt;/p>
&lt;p>In the following sections I will show you how I approached the problem, how the result of the backup looks, how to setup and how to run it for yourself.&lt;/p>
&lt;h2 id="check-your-migration-vendor-of-choice-first">Check your migration vendor of choice first!&lt;/h2>
&lt;p>I have only limited experience with the following tools. But these vendors are the big players, and you can easily get in touch with them to get a demo or further information.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.avepoint.com/products/hybrid/office-365-migration/fly" target="_blank">AvePoint&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.quest.com/solutions/teams/" target="_blank">Quest&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://sharegate.com/products/sharegate-desktop/teams-migration" target="_blank">ShareGate&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>It is ok if you stop here if your migration needs are satisfied by one of these vendors. If you are interested in my approach it might still be worth reading on ;)&lt;/p>
&lt;h2 id="my-goal">My goal&lt;/h2>
&lt;p>Since the beginning of the first lockdown in April we at Glück &amp;amp; Kanja did a cooking event for a social online gathering. We are still doing it and we created a lot of content since the first meeting. The event is hosted on Microsoft Teams Channel meeting every Monday. Check out our &lt;a href="https://www.glueckkanja.com/blog/gk/homeoffice/collaboration/2020/04/kochen-mit-zeba/" target="_blank">blog post (german)&lt;/a>. The event created a ton of beautifully pictures but they were stuck inside a Teams thread without easy access like SharePoint (if you consider SharePoint an easy access method). The backup should save all the attachments to the file system. Sneak preview of the result:
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201130-m365teamsbackup--backupimages.jpg" alt="image" />
&lt;/p>
&lt;p>For our migration to the new tenant, we are running a set of tools. The tooling we have at hand has some limits regarding channel message migration. We wanted to preserve that chat messages for a Team without polluting the new target team. In some cases, we also want to archive the Team to a central location (a single SharePoint site collection) for archiving purposes. For this case we would need to export the chat to some readable and searchable format preserving most of the content.&lt;/p>
&lt;p>My goal is not to provide a ready to use backup solution. For some of your scenarios this could work. I wanted to also provide a code base to accommodate your more specific requirements. We don&amp;rsquo;t rely on extensive app integration in our teams, so handling the &lt;a href="https://docs.microsoft.com/en-us/graph/api/resources/chatmessageattachment?view=graph-rest-1.0" target="_blank">adaptive cards in a chat message&lt;/a> is not really a part of the HTML generation solution. But the JSON from the Microsoft Graph will have all or some information included. If you need to handle adaptive card content this solution could be a great kickstart so you don&amp;rsquo;t have to write a lot of boilerplate code to get to the message attachment properties.&lt;/p>
&lt;p>The solution will try to preserve as much information as needed from the Microsoft Graph and dump it to disk. From this data you can run multiple HTML conversions to address the need for the content representation. The HTML generation is no longer interacting with the Microsoft Graph and could be reparsed month after the original content was deleted (decommissioning of the old tenant).&lt;/p>
&lt;p>My current focus is on the following data:&lt;/p>
&lt;ul>
&lt;li>Basic team metadata including members&lt;/li>
&lt;li>Channel metadata including members for private channels&lt;/li>
&lt;li>Messages and replies with author and dates&lt;/li>
&lt;li>Message body and inline pictures (hosted content)&lt;/li>
&lt;/ul>
&lt;h2 id="my-approach">My approach&lt;/h2>
&lt;p>I mentioned it a few times. I split the solution in two parts. The first part is talking to the Microsoft Graph and storing the response to a JSON file. For every Team I create a folder with the ID of the group. The response of the &lt;a href="https://docs.microsoft.com/en-us/graph/api/resources/team?view=graph-rest-beta" target="_blank">team request&lt;/a> will be stored in the folder with the name &amp;ldquo;team.json&amp;rdquo;. For every channel I create a folder with the channel ID and the &lt;a href="https://docs.microsoft.com/en-us/graph/api/resources/channel?view=graph-rest-beta" target="_blank">channel response&lt;/a> will be stored as &amp;ldquo;channel.json&amp;rdquo;. For every message (entry point of a thread if replies are available) I create a folder with the message ID and the &lt;a href="https://docs.microsoft.com/en-us/graph/api/resources/chatmessage?view=graph-rest-beta" target="_blank">message response&lt;/a> will be stored as &amp;ldquo;message.json&amp;rdquo;. For every reply to a message I create another file with the pattern &amp;ldquo;message.{messageid}.json&amp;rdquo;. Every message will be checked if inline content is available. This is called &lt;a href="https://docs.microsoft.com/en-us/graph/api/resources/chatmessagehostedcontent?view=graph-rest-beta" target="_blank">hosted content&lt;/a> and I treat every item as an inline image represented as an PNG-file. Because the ID for a hosted content item is very long, I decided to use an MD5 hash of the ID to use in the filename. For the root message the file is named &amp;ldquo;hostedcontent.{hostedcontenidMD5}.png&amp;rdquo; and for replies &amp;ldquo;hostedcontent.{messageid}.{hostedcontenidMD5}.png&amp;rdquo;&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201130-m365teamsbackup--jsonfiles.png" alt="image" />
&lt;/p>
&lt;p>Of cause all this needs to happen with some kind of authentication. As mentioned, I&amp;rsquo;m big fan of application permission because there is no user involved. But the current graph implementation only offers access to chat messages if you apply for an app with protected API access. Read more about this &lt;a href="https://docs.microsoft.com/en-us/graph/teams-protected-apis" target="_blank">here&lt;/a>. I tried to apply but 4 weeks later I still don&amp;rsquo;t have feedback for my request (single tenant app should be easy) and I implemented the access using delegate permission based on the device flow. Based on this approach I made this into a feature. The tool will backup (by default) all teams the account is a member of. This way you can add the account to a Team as an admin or even the owner of Team can do this to &amp;ldquo;request&amp;rdquo; chat backup.&lt;/p>
&lt;p>The other console application is taking care of building the HTML from the JSON files. Because all the heavy lifting is already done in the first part, the generation of HTML is really fast. The application needs the source directory and the HTML template for the output. The HTML templates currently has some inline styles to make it easy to move around and keep the dependencies low. The application is creating a HTML file for each channel and optionally a HTML file for every thread. Based on the configuration the HTML file will contain all &lt;a href="https://www.w3docs.com/snippets/html/how-to-display-base64-images-in-html.html" target="_blank">images inline&lt;/a> or as a separate file. If you go with the inline images you get a very portable version of the backup, but also a big file if you have many images or a long chat history. The combination of inline images and every thread as an HTML file will give you a great choice out of the box. If you would like to customize the HTML look and feel have a peak at the &lt;a href="https://github.com/marcoscheel/M365.TeamsBackup/blob/main/template/template.html" target="_blank">template file&lt;/a>. With a few tweaks in the CSS styles you can enhance readability and change it to your preferences. I hopefully selected some easy-to-understand selectors.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201130-m365teamsbackup--htmltemplate.png" alt="image" />
&lt;/p>
&lt;h2 id="the-code">The code&lt;/h2>
&lt;p>Let’s have a quick look at the code and what it takes to get it compiled, if you pull it from GitHub. I am doing all my development in Visual Studio &amp;ldquo;proper&amp;rdquo;. The solution was created with &lt;a href="https://visualstudio.microsoft.com/vs/preview/" target="_blank">Visual Studio 2019 Enterprise (Preview)&lt;/a> but the community non preview version should also be fine. I write most of my code in C# and so is this code. As &lt;a href="https://devblogs.microsoft.com/dotnet/announcing-net-5-0/" target="_blank">.NET 5 is now available&lt;/a> this is my first solution using this version, but I think you can get it running on .NET Core 3.1 if you downgrade the solution and packages. The final solution is hosted on GitHub and you are welcome to open an issue or create a pull request. Just have a little bit of patience as this is just a side hustle for me.&lt;/p>
&lt;p>Normally I write Azure Functions and dependency injection is not yet in my DNA. If you look at the code this might feel a little awkward. I spend way too much time to get the &lt;a href="https://docs.microsoft.com/en-us/dotnet/core/extensions/generic-host" target="_blank">console app make use of the DI concepts&lt;/a>. For a start it feels OK and I had a lot of fun learning to code this, but I&amp;rsquo;m not sure this is 100% correct. Let’s put it this way: It works! Also, a thing I love about Azure Functions is the native Microsoft Extension Logging integration. So, it was natural to also rely on my normal code to write logs. In the cloud logging to a file on disk is not really a thing and that might be the reason why Microsoft does not have an out of the box solution for that. That’s my excuse why all of my logs are only on the console for the moment. I am looking into NLog or Serilog. The biggest benefit is to configure the &lt;a href="https://docs.microsoft.com/en-us/dotnet/core/extensions/logging" target="_blank">logs levels&lt;/a> very easy. Check out the application.json for a sample. The configuration system is also based on Microsoft standards. The console is loading the application.json settings and during development an argument can be passed in to respected the correct JSON file. A Special thanks to &lt;a href="https://dfederm.com/building-a-console-app-with-.net-generic-host/" target="_blank">David Feldman for his blog post&lt;/a> which got me started on the console DI thing.&lt;/p>
&lt;p>As of now we didn&amp;rsquo;t write any business relevant code (developer love to write non relevant code 😁) so let’s get our hands dirty. Getting the data from Microsoft Teams is done via the Microsoft Graph. I&amp;rsquo;m using the &lt;a href="https://docs.microsoft.com/en-us/graph/sdks/use-beta?tabs=CS" target="_blank">beta SDK&lt;/a> because for the Teams workload some feature are only available in the non-production endpoint. Also, I like to play with fire. The authentication (as mentioned: I had to go with the device code) is provided by the MSAL libraries. For my &amp;ldquo;daemon apps” (Azure Functions) I rely on the pure MSAL implementation, but for this application I tried something new and used the &lt;a href="https://github.com/microsoftgraph/msgraph-sdk-dotnet-auth" target="_blank">Microsoft Graph Auth&lt;/a> libraries. The NuGet is still in preview, but this was the easiest solution to get the device code up and running in minutes. I plan to use this library in the future for my other projects. One thing was missing and was really annoying: I had to authenticate on every debug run, so I copied some code to &lt;a href="https://github.com/marcoscheel/M365.TeamsBackup/blob/main/src/Core/Services/Util/TokenCacheHelper.cs" target="_blank">persist the token&lt;/a> to a file. This code is also standard Microsoft code, and it will put the token in a locally protected file. For the generation of the HTML file I visited an old friend: &lt;a href="https://html-agility-pack.net/" target="_blank">HTML Agility Pack (HAP)&lt;/a>. This is an awesome library and working with the HTML DOM is a breeze! The HTML from the Teams chat message can contain images (hosted content) pointing to the Microsoft Graph endpoint. Using the HTML Agility Pack, I search the images and replace the src with as base64 encoded version or a local file reference.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201130-m365teamsbackup--nuget.png" alt="image" />
&lt;/p>
&lt;h2 id="the-result">The result&lt;/h2>
&lt;p>Here is a side-by-side comparison. The original channel in Microsoft Teams and the HTML backup generated from the Microsoft Graph API.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201130-m365teamsbackup--originalvsbackup.png" alt="image" />
&lt;/p>
&lt;p>The HTML file will contain the Team name, creation date and the member count. The Channel name is also part of every file and if it is a private channel also the member count. Every post will contain the creation (+ edit if available) time, the author and the body including images. Links to documents are not modified and the file will not be downloaded. The content of an adaptive card is available in the JSON, but currently the output is not rendered in HTML. The adaptive cards rendering will be added later.&lt;/p>
&lt;p>After the complete run you have a set of JSON files representing Microsoft Graph SDK classes. I recommend putting them in to a ZIP file (there are a lot of files) and place them next to the HTML output. Based on your data and configuration the output can be stored in a SharePoint library or on a file based archive.&lt;/p>
&lt;h2 id="your-setup">Your setup&lt;/h2>
&lt;p>Currently the setup is not download and ready to run. First I don&amp;rsquo;t want to offer a &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/single-and-multi-tenant-apps" target="_blank">multi-tenant application in my Azure AD&lt;/a>. Therefor you need to talk to your admin to register the application in the first place. Based on the permission the app needs the admin consent in any way. Please check out the project &lt;a href="https://github.com/marcoscheel/M365.TeamsBackup" target="_blank">Readme.md&lt;/a> to get the needed permissions and put the needed details in the application settings file. The binaries can be downloaded from the &lt;a href="https://github.com/marcoscheel/M365.TeamsBackup/releases" target="_blank">release page&lt;/a> of the GitHub project. You will need to have the &lt;a href="https://dotnet.microsoft.com/download/dotnet-core/5.0/runtime/?utm_source=getdotnetcore&amp;amp;utm_medium=referral" target="_blank">.NET 5 runtime&lt;/a> installed.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201130-m365teamsbackup--run.png" alt="image" />
&lt;/p>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>I had a blast writing the solution from start to end. I will tweak the solution in the near future. These are the next ideas I want to code:&lt;/p>
&lt;ul>
&lt;li>Save images with the date in the name and add EXIF data with the author information&lt;/li>
&lt;li>Allow the use of a non-interactive AAD login (confidential client)&lt;/li>
&lt;li>Integrate features in an Azure Function and maybe trigger from a Teams Message Extension for an ad-hoc export for every user&lt;/li>
&lt;/ul>
&lt;p>I created the solution for a very specific use case (our tenant migration), but I hope in making the source code available you will be able to solve your problems. If you have feedback, please let me know. Create an issue, hit me up on &lt;a href="https://twitter.com/marcoscheel" target="_blank">Twitter&lt;/a> or &lt;a href="https://www.linkedin.com/in/marcoscheel" target="_blank">LinkedIn&lt;/a>.&lt;/p></description></item><item><title>Eigene Vorlagen für Microsoft Teams</title><link>https://marcoscheel.de/post/2020/11/20201103-microsoftteams-customtemplates/</link><pubDate>Sun, 08 Nov 2020 10:00:00 +0100</pubDate><guid>https://marcoscheel.de/post/2020/11/20201103-microsoftteams-customtemplates/</guid><description>&lt;p>Microsoft hat im &lt;a href="https://techcommunity.microsoft.com/t5/microsoft-teams-blog/create-teams-quickly-with-templates-in-microsoft-teams/ba-p/1394163" target="_blank">Mai angekündigt&lt;/a>, dass man in Kürze auf Microsoft definierten Templates bei der Anlage zurückgreifen kann und in Zukunft auch eigene Templates im Admin-Center erstellen kann. In der Vergangenheit brauchte man eine Teams Provisioning Lösung und konnte nicht auf die eingebauten Dialoge zurückgreifen. &lt;a href="https://laurakokkarinen.com/provisioning-teams-with-a-site-design-flow-and-microsoft-graph/" target="_blank">Hier ein Beispiel&lt;/a>, wie man über ein Site Design ein Microsoft Flow startet, um mit Teams zu interagieren.&lt;/p>
&lt;p>In meinem Lab-Tenant ist nun endlich die Erstellung eigener Templates angekommen. Ich zeige euch, was es mit den Templates von Microsoft auf sich hat und was ihr mit den eigenen Templates erreichen könnt.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--title.png" alt="image" />
&lt;/p>
&lt;h2 id="microsoft-templates">Microsoft Templates&lt;/h2>
&lt;p>Microsoft bietet aktuell 13 Templates an, die man im Tenant auswählen kann. Die Templates werden mit einer &amp;ldquo;Industry&amp;rdquo; Information versehen. Auch wenn euer Unternehmen nicht aus dem Bereich stammt, sind die Templates trotzdem sinnvoll. Hier findet ihr die Dokumentation, was das einzelne Template ausmacht:&lt;/p>
&lt;p>&lt;a href="https://docs.microsoft.com/en-us/microsoftteams/get-started-with-teams-templates#what-are-base-template-types" target="_blank">Get started with Teams templates using Microsoft Graph - Teams template capabilities&lt;/a>&lt;/p>
&lt;p>Aus der User-Sicht startet ihr über den normalen Dialog zum Erstellen eines Teams. Habt ihr die &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/enterprise-users/groups-settings-cmdlets#template-settings" target="_blank">Self-Service Creation&lt;/a> abgeschaltet, dann sollten wir mal ein ernstes Wort &lt;a href="https://twitter.com/marcoscheel" target="_blank">reden&lt;/a>. Wenn ihr alles &amp;ldquo;Richtig&amp;rdquo; gemacht habt, dann sieht der User folgendes:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--user-createteam.png" alt="image" />
&lt;/p>
&lt;p>Auf dieser Seite kann der Benutzer sich über eine kurze Beschreibung über das Template informieren. Ist die Entscheidung gefallen, dann kommen beim Klick weitere Details zum Template:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--user-createteam-templatedetails.png" alt="image" />
&lt;/p>
&lt;p>Ab hier geht es wie gewohnt weiter. Klassifizierung + Privacy auswählen und den Namen für das Team festlegen:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--user-createteam-templatename.png" alt="image" />
&lt;/p>
&lt;p>Jetzt kommen die ersten Unterschiede. Ohne Template ist das Team in Sekunden erstellt und ich kann weitere Benutzer auswählen. Bei der Verwendung einer Vorlage dauert das Erstellen deutlich länger. Es geht jetzt nicht um Stunden aber der Prozess ist ab jetzt asynchron. Der Benutzer sieht folgende Meldung, welche in meinem Test sich auch nach Minuten nicht verändert hat. Das Schließen des Dialoges ist also nicht optional, wie angedeutet.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--user-createteam-progress.png" alt="image" />
&lt;/p>
&lt;p>Das fertige Team sieht dann so aus:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--user-createteam-completed.png" alt="image" />
&lt;/p>
&lt;p>In meinem Test hat das System am Ende immer &amp;ldquo;undefinded&amp;rdquo; an den gewählten Namen angehängt, aber als Owner kann man den Namen ja jederzeit ändern.&lt;/p>
&lt;p>In der aktuellen Implementierung kann man keine der Microsoft Templates ausblenden. Es gibt auch keine Möglichkeit Templates an eine Zielgruppe zu verteilen. Alle Templates sind immer für alle Benutzer zu sehen. Ich bin gespannt, wie es hier weiter geht.&lt;/p>
&lt;h2 id="templates-administrieren">Templates administrieren&lt;/h2>
&lt;p>Als Microsoft Teams Administrator kann ich ab sofort eigene Templates erstellen und in den gezeigten Dialog integrieren. Die eigenen Templates werden immer vor den Microsoft Templates angezeigt. Hier könnt ihr die Microsoft Dokumentation einsehen:&lt;/p>
&lt;p>&lt;a href="https://docs.microsoft.com/en-us/MicrosoftTeams/get-started-with-teams-templates-in-the-admin-console" target="_blank">Get started with Teams templates in the admin center&lt;/a>&lt;/p>
&lt;p>In der aktuelle Implementierung ist der Funktionsumfang recht überschaubar. Ihr könnt Kanäle vordefinieren, Tabs in die Kanäle hängen und generell Apps in das Team einfügen.&lt;/p>
&lt;p>Im Admin Center gibt es im Bereich &amp;ldquo;Teams&amp;rdquo; einen neuen Navigationspunkt:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--admin-navigation.png" alt="image" />
&lt;/p>
&lt;p>Hier kann man ein neues Template erstellen. Aktuell hat man drei Optionen:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://docs.microsoft.com/en-us/MicrosoftTeams/create-a-team-template" target="_blank">Create a custom team template&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.microsoft.com/en-us/MicrosoftTeams/create-template-from-existing-template" target="_blank">Create a team template from an existing team template&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.microsoft.com/en-us/MicrosoftTeams/create-template-from-existing-team" target="_blank">Create a template from an existing team&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--admin-createtemplate.png" alt="image" />
&lt;/p>
&lt;h3 id="eigene-template-definieren">Eigene Template definieren&lt;/h3>
&lt;p>Die erste Option &amp;ldquo;Create a custom team template&amp;rdquo; führt uns durch den folgenden Dialog. Name des Template, Beschreibung für den Endbenutzer und Hinweise für die Kollegen im Admin Team sind verpflichtend:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--admin-createtemplatedetails.png" alt="image" />
&lt;/p>
&lt;p>Auf der folgenden Seite kann ich jetzt einen Kanal anlegen und gleichzeitig auch Tabs (Apps) hinzufügen:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--admin-createtemplatechannel.png" alt="image" />
&lt;/p>
&lt;p>Sollte eine App nicht über einen Tab hinzugefügt werden, dann kann ich diese auch direkt in das Team einfügen:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--admin-createtemplateapp.png" alt="image" />
&lt;/p>
&lt;p>Ihr könnt den erstellten Kanälen (z.b. dem Standard-Kanal) nachträglich Apps hinzufügen:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--admin-createtemplateeditchannel.png" alt="image" />
&lt;/p>
&lt;p>Hier seht ihr die fertige Definition des Templates:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--admin-createtemplateoverview.png" alt="image" />
&lt;/p>
&lt;h3 id="eigenes-template-von-einem-bestehenden-template">Eigenes Template von einem bestehenden Template&lt;/h3>
&lt;p>Die zweite Option &amp;ldquo;Create a team template from an existing team template&amp;rdquo; schaltete vor die eigentliche Definition des Templates die Auswahl eines anderen (Microsoft oder eigenes) Template vor:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--admin-createtemplatefromtemplate.png" alt="image" />
&lt;/p>
&lt;p>Dann geht es weiter wie bei der Definition eins leeren Template.&lt;/p>
&lt;h3 id="eigenes-template-von-einem-bestehendem-team">Eigenes Template von einem bestehendem Team&lt;/h3>
&lt;p>Die dritte Option &amp;ldquo;Create a template from an existing team&amp;rdquo; erlaubt es ein bestehendes Team auszuwählen:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201103-microsoftteams-customtemplates--admin-createtemplatefromteam.png" alt="image" />
&lt;/p>
&lt;p>Dann geht es weiter wie bei der Definition eins leeren Template.&lt;/p>
&lt;p>In dieser Auswahl werden aber auch nur die Channels, Tabs und die Apps übernommen. Inhalte wie Chat, Tab-Konfigurationen oder Dateien kommen nicht mit.&lt;/p>
&lt;h2 id="zusammenfassung">Zusammenfassung&lt;/h2>
&lt;p>Es ist eine willkommene Option mit viel Potential für die Zukunft. Wenn ihr kein eigenes Teams Provisioning machen wollt, ist das die erste Möglichkeit euren Usern vorgefertigte Strukturen an die Hand zu geben. Es fehlen aber ganz essenzielle Dinge. Ich kann keine Dateien vorprovisionieren und zum Beispiel als Tab integrieren. Tabs können nicht mit Inhalten gefüllt werden. Ein &amp;ldquo;Website&amp;rdquo; Tab bekommt einen Namen, aber man kann nicht die URL hinterlegen.&lt;/p>
&lt;p>Es ist gut zu wissen, dass man hier „out-of-the-box“ Funktionen hat, aber solange Microsoft folgende Punkte nicht adressiert, wird es eine Nischenlösung bleiben:&lt;/p>
&lt;ul>
&lt;li>Teams Eigenschaften verändern (Moderation, etc.)&lt;/li>
&lt;li>Erstellungsdialog muss schneller werden&lt;/li>
&lt;li>Kein User/Group Targeting für Templates -&amp;gt; Heute sehen alle User alle Templates&lt;/li>
&lt;li>Die Verwendung eines Templates kann nicht erzwungen werden, der User kann immer noch &amp;ldquo;From scratch&amp;rdquo; wählen und sein eigenes Ding machen&lt;/li>
&lt;li>Microsoft Templates können nicht ausgeblendet werden&lt;/li>
&lt;li>Keine Inhalte (Tabs, Dateien, &amp;hellip;)&lt;/li>
&lt;/ul></description></item><item><title>Microsoft Teams Recording mit Externen teilen</title><link>https://marcoscheel.de/post/2020/11/20201101-microsoftteams-recording-sharing/</link><pubDate>Sun, 01 Nov 2020 10:06:51 +0100</pubDate><guid>https://marcoscheel.de/post/2020/11/20201101-microsoftteams-recording-sharing/</guid><description>&lt;p>Microsoft arbeitet an einer &lt;a href="https://techcommunity.microsoft.com/t5/microsoft-stream-blog/a-new-vision-for-microsoft-stream/ba-p/1686304" target="_blank">neuen Version von Microsoft Stream&lt;/a>. Microsoft Teams nutzte bis vor kurzem genau dieses Video-Backend für die Ablage der Meeting Recordings. Seit heute (01.11.2020) beginnt der Rollout für alle Tenants, es sei denn ihr habt per Meeting Policy ein &lt;a href="https://marcoscheel.de/post/2020/10/20201020-microsoftteams-recording-onedrive/#einschalten-im-tenant">Opt-Out&lt;/a> für eure Benutzer gesetzt. Was das Recording in OneDrive/Teams bedeutet habe ich euch in &lt;a href="https://marcoscheel.de/post/2020/10/20201020-microsoftteams-recording-onedrive/">folgendem Blogpost&lt;/a> demonstriert.&lt;/p>
&lt;p>Das Meeting Recording liegt also im SharePoint (für Channel Meetings) oder im OneDrive (für alle anderen Meetings). Ist damit der Blog bereits zu Ende? Teilen auf SharePoint kann doch jeder, oder? Hier gibt es die &lt;a href="https://support.microsoft.com/de-de/office/teilen-von-sharepoint-dateien-oder-ordnern-1fe37332-0f9a-4719-970e-d2578da4941c?ui=de-de&amp;amp;rs=de-de" target="_blank">Doku von Microsoft&lt;/a>. Natürlich kann ich die Datei einfach über einen neuen Sharing Link teilen. Wenn der externe Benutzer aber im Meeting-Chat auf das Recording klickt, dann gibt es folgenden Fehler, den wir aber &amp;ldquo;einfach&amp;rdquo; Lösen können.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201101-microsoftteams-recording-sharing--title.jpg" alt="image" />
&lt;/p>
&lt;h2 id="meeting-recordings-richtig-berechtigen">Meeting Recordings richtig berechtigen&lt;/h2>
&lt;p>Microsoft nutzt die normalen Share-Features für das Teilen des Recordings für interne Benutzer. Wenn ihr jetzt einfach den Share-Dialog am Video nutzt, dann kann der externe über den Link aus diesem Sharing (wird normal per E-Mail verschickt) zugreifen. Versucht er aber vielleicht später über Teams und den Meeting-Chat zuzugreifen, dann kommt es wieder zum Fehler, da dort ein anderer Sharing-Link hinterlegt ist:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--host-sharing-wrongish.jpg" alt="image" />
&lt;/p>
&lt;p>Jetzt zeige ich euch, wie man den Link im Meeting-Chat auch für Externe konfiguriert. Wenn ihr die Datei im SharePoint oder OneDrive geöffnet habt, dann könnt ihr über &amp;ldquo;Manage access&amp;rdquo; die aktuellen Sharing Links einsehen. Es gibt viele Möglichkeiten &amp;ldquo;Manage access&amp;rdquo; zu erreichen. In der Ordneransicht klickt ihr &amp;ldquo;&amp;hellip;&amp;rdquo; auf der entsprechenden Videodatei und wählt dann &amp;ldquo;Manage access&amp;rdquo; aus:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201101-microsoftteams-recording-sharing--manage-access.png" alt="image" />
&lt;/p>
&lt;p>Ihr seht die aktuell konfigurierten Freigaben:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--host-recording-manage-access.jpg" alt="image" />
&lt;/p>
&lt;p>Die Freigabe für die Anzeige der Datei (&amp;ldquo;View&amp;rdquo;-Berechtigung) könnt ihr über die &amp;ldquo;&amp;hellip;&amp;rdquo; Option aufrufen:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--host-manage-access-add-guest.jpg" alt="image" />
&lt;/p>
&lt;p>Gebt die E-Mail des Gasts ein und bestätigt mit &amp;ldquo;Save&amp;rdquo;:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--host-manage-access-guest-add.jpg" alt="image" />
&lt;/p>
&lt;p>Wenn ich (als Gast der Besprechung) nun über den Meeting-Chat den Link aufrufe, dann bekomme ich keine Fehlermeldung beim Zugriff:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--guest-has-access.jpg" alt="image" />
&lt;/p>
&lt;h2 id="zusammenfassung">Zusammenfassung&lt;/h2>
&lt;p>Die meisten Benutzer werden einfach im SharePoint auf &amp;ldquo;Share&amp;rdquo; klicken. Der Zugriff für externe Benutzer ist ein tolles Feature und ich will nicht meckern. Sollten eure Benutzer über das Verhalten meckern, dann könnt ihr sie nun über den richtigen Weg aufklären und das Nutzererlebnis verbessern.&lt;/p></description></item><item><title>Microsoft Teams Recording jetzt in SharePoint statt Microsoft Stream</title><link>https://marcoscheel.de/post/2020/10/20201020-microsoftteams-recording-onedrive/</link><pubDate>Sat, 24 Oct 2020 12:35:35 +0200</pubDate><guid>https://marcoscheel.de/post/2020/10/20201020-microsoftteams-recording-onedrive/</guid><description>&lt;p>Auf der Ignite 2020 wurde angekündigt, dass man Microsoft Stream &lt;del>einstellen&lt;/del> neu erfinden wird. Ich bin Feuer und Flamme für die Idee, wie ihr hier sehen könnt:&lt;/p>
&lt;blockquote class="twitter-tweet">&lt;p lang="de" dir="ltr">Migration vom &lt;a href="https://twitter.com/SharePoint?ref_src=twsrc%5Etfw">@SharePoint&lt;/a> Video Portal schon begonnen? Alle Videos in &lt;a href="https://twitter.com/MicrosoftStream?ref_src=twsrc%5Etfw">@MicrosoftStream&lt;/a> angekommen? Jetzt geht&amp;#39;s wieder zurück 🤣 Aber ich finde das super. Endlich eine Video API natürlich mit &lt;a href="https://twitter.com/microsoftgraph?ref_src=twsrc%5Etfw">@microsoftgraph&lt;/a>! Und Meetingrecording von &lt;a href="https://twitter.com/MicrosoftTeams?ref_src=twsrc%5Etfw">@MicrosoftTeams&lt;/a>! &lt;a href="https://t.co/ZKZsjWaDhP">https://t.co/ZKZsjWaDhP&lt;/a>&lt;/p>&amp;mdash; Marco Scheel (@marcoscheel) &lt;a href="https://twitter.com/marcoscheel/status/1308496002761056259?ref_src=twsrc%5Etfw">September 22, 2020&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8">&lt;/script>
&lt;p>Den Microsoft Blogpost mit allen Details &lt;a href="https://techcommunity.microsoft.com/t5/microsoft-stream-blog/a-new-vision-for-microsoft-stream/ba-p/1686304" target="_blank">findet ihr hier&lt;/a>. Heute wollen wir uns die Auswirkungen auf die Meeting Recordings in Microsoft Teams anschauen. In der &amp;ldquo;Vergangenheit&amp;rdquo; hatten wir folgende Probleme mit der Ablage in Microsoft Stream:&lt;/p>
&lt;ul>
&lt;li>Externe Teilnehmer konnte nie auf die Aufnahmen zugreifen, da Microsoft Steam (&lt;a href="https://docs.microsoft.com/en-us/stream/" target="_blank">Classic&lt;/a>) keinen &lt;a href="https://docs.microsoft.com/en-us/stream/portal-share-video#external-sharing" target="_blank">Zugang für externe ermöglicht&lt;/a> und es immer ein Konto aus dem Unternehmen für den Zugriff brauchte.&lt;/li>
&lt;li>Wer die Aufnahme starten wollte, brauchte nicht nur die &lt;a href="https://docs.microsoft.com/en-us/microsoftteams/meeting-policies-in-teams#allow-cloud-recording" target="_blank">Teams Meeting Policy&lt;/a> dazu, sondern auch das &lt;a href="https://docs.microsoft.com/en-us/stream/restrict-uploaders" target="_blank">Recht Videos in Stream hochzuladen&lt;/a>.&lt;/li>
&lt;li>Es gibt keine offizielle API&lt;/li>
&lt;/ul>
&lt;p>Mit dem neuen Microsoft Stream gehören diese Probleme der Vergangenheit an und es werden noch viele Funktionen in der nahen Zukunft ergänzt. Zum Start bekommen wir aber eine sehr rudimentäre Implementierung mit ihren eigenen Problemen. Wir schauen einmal auf die entsprechende Implementierung Stand Oktober 2020. Microsoft hat zur Ignite eine &lt;a href="https://myignite.microsoft.com/sessions/087d135a-64ae-41ab-8b15-f0a965223d5b" target="_blank">dedizierte Session zum Thema Besprechungsaufzeichnung&lt;/a> erstellt in der ihr viele Details findet.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--title.jpg" alt="image" />
&lt;/p>
&lt;h2 id="im-meeting">Im Meeting&lt;/h2>
&lt;p>Ich habe für euch ein Meeting dokumentiert und zeige wo die Unterschiede liegen. Im Microsoft Teams Client bleibt während der Besprechung alles beim Alten. Über die erweiterten Funktionen (&amp;hellip;) kann jeder Moderator aus dem einladenden Unternehmen das Recording starten &amp;ldquo;Start recording&amp;rdquo;:
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--host-start-recording.jpg" alt="image" />
&lt;/p>
&lt;p>Im Meeting sehen wir:&lt;/p>
&lt;ul>
&lt;li>Luke (Meeting Organizer) - luke ät gkmm.org&lt;/li>
&lt;li>Leia - leia ät gkmm.org&lt;/li>
&lt;li>Rey - rey ät gkmm.org&lt;/li>
&lt;li>Kylo - kylo ät gkmm.org&lt;/li>
&lt;li>Marco (Gast) - marco.scheel ät glueckkanja.com&lt;/li>
&lt;/ul>
&lt;p>Die Benutzer werden wie üblich mit einem Banner über den Start der Aufnahme informiert:
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--meeting-recording-started.jpg" alt="image" />
&lt;/p>
&lt;p>Wird die Aufzeichnung während des Meetings beendet, dann werden die Benutzer über das Speichern informiert:
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--meeting-recording-saved.jpg" alt="image" />
&lt;/p>
&lt;p>Die Aufzeichnung wird im Meeting Chat verlinkt.
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--meeting-recording-completed.jpg" alt="image" />
&lt;/p>
&lt;h2 id="recording-ansehen">Recording ansehen&lt;/h2>
&lt;p>Hier kommt die erste Neuerung! Das Video ist deutlich schneller verfügbar. Microsoft Teams erzeugt das Video als MP4 in der Cloud und hat es in der Vergangenheit an Microsoft Steam übergeben. Stream hat dann die &lt;a href="https://azure.microsoft.com/de-de/services/media-services/" target="_blank">Azure Media Services&lt;/a> bemüht, um das Video aufzubereiten und für ein &lt;a href="https://docs.microsoft.com/en-us/azure/media-services/previous/media-services-portal-vod-get-started" target="_blank">adaptives Streaming&lt;/a> auszuliefern. Simple gesagt: Stream hat das Video in verschiedenen Auflösungen gerechnet und kann nahtlos zwischen den Bitraten hin und her wechseln. Das neue Stream wirft einfach das MP4 in SharePoint (oder OneDrive for Business) und stellt es dann über einen einfachen HTML Player zur Verfügung. Es sollte klar werden, dass ohne die Integration der Azure Media Services in dieser ersten Version einige Funktionen entfallen:&lt;/p>
&lt;ul>
&lt;li>Wiedergabegeschwindigkeit. Nicht jeder redet so schnell wie ich und dann kann man schon ein 60 Minuten Video auf 45 Minuten reduzieren, wenn man es in 1,5x wiedergibt.&lt;/li>
&lt;li>Transkription (Sprache zu Text). Für ein Meeting Recording ziemlich relevant, um zum Beispiel im 2 Stunden Meeting den Moment zu finden, als es um Produkt X ging.&lt;/li>
&lt;li>Bandbreiten- und Performanceabhängiges Adaptives Streaming (wechseln von 1.1 Mbps bis 58Kbps). Für ein Meeting Recording nicht besonders relevant.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Anfang 2020 hatten unsere Video Recordings in Stream noch alle Bitraten. Aktuell sind auch alle Stream Videos (Meeting Recording) nur in der Original 1.1 Mbps (1080p) Auflösung verfügbar und macht somit kein adaptives Streaming. Corona lässt grüßen?&lt;/p>
&lt;/blockquote>
&lt;p>Der folgende Screenshot zeigt Lukes Browser bei der Wiedergabe, nachdem er im Chat auf &amp;ldquo;Open in OneDrive&amp;rdquo; klickt.
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--host-recording-access.jpg" alt="image" />
&lt;/p>
&lt;p>Genau so wird heute bereits jedes andere Video in SharePoint und OneDrive dargestellt. In der Zukunft wird der Content Typ für Video im SharePoint aufgewertet und die Darstellung, die Metadaten und der Lifecycle werden optimiert.&lt;/p>
&lt;p>Für alle Meeting Teilnehmer aus der einladenden Organisation wird das Sharing der Datei automatisch eingerichtet:
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--host-recording-manage-access.jpg" alt="image" />
&lt;/p>
&lt;p>Teams vergibt immer zwei Berechtigungen für die Video Datei. Es wird unterschieden in &lt;a href="https://support.microsoft.com/de-de/office/rollen-in-einer-teams-besprechung-c16fa7d0-1666-4dde-8686-0a0bfe16e019" target="_blank">Moderator und Teilnehmer&lt;/a>. Moderatoren erhalten Edit Berechtigungen. Teilnehmer des Meetings erhalten nur View Berechtigungen.&lt;/p>
&lt;p>Gäste werden nicht berücksichtig. Für mich als Gast endet der Versuch das Recording anzusehen so:
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--guest-noaccess.jpg" alt="image" />
&lt;/p>
&lt;p>In diesem Blogpost gehe ich auf den &lt;a href="https://marcoscheel.de/post/2020/11/20201101-microsoftteams-recording-sharing/">richtig Umgang mit Gästen und dem Recording ein&lt;/a>.&lt;/p>
&lt;h2 id="die-videodatei">Die Videodatei&lt;/h2>
&lt;p>Es bleibt zu beantworten, wo die Datei dann eigentlich liegt! Wenn man im Chat ein Video angeklickt, dann öffnet sich in Teams die Video Datei und wird abgespielt. Keine gute Idee, denn jede Interaktion mit Teams führt zum Abbruch der Wiedergabe und man muss von vorne anfangen. Also am besten gleich die &amp;ldquo;&amp;hellip;&amp;rdquo; anklicken und &amp;ldquo;Open in OneDrive&amp;rdquo; auswählen:
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--host-access-file.jpg" alt="image" />
&lt;/p>
&lt;p>Die Datei liegt also im OneDrive und wird in einem Ordner mit dem Namen &amp;ldquo;Recordings&amp;rdquo; (bestimmt auch irgendwo &amp;ldquo;Aufzeichungen&amp;rdquo; oder &amp;ldquo;grabación&amp;rdquo;). OneDrive ist immer eine persönliche Ablage. Sie gehört einem Benutzer! Keine schöne Lösung. Also ein &amp;ldquo;Meet now&amp;rdquo; oder ein geplanter Termin landen im OneDrive eines Benutzers. Welcher Benutzer? Meeting Organizer oder der Benutzer der &amp;ldquo;Start recording&amp;rdquo; klickt. Es ist tatsächlich das OneDrive des Benutzers, der am schnellsten Klicken kann. Ich hätte den Meeting Organizer bevorzugt, da er auch der Besitzer des Termins ist. Hier hatte Stream mit seiner &amp;ldquo;neutralen&amp;rdquo; Ablageplattform klare Vorteile. Verlässt ein Benutzer das Unternehmen und sein OneDrive wird gelöscht, verschwinden alle Meeting Recordings mit seinem OneDrive! Microsoft hat angekündigt, dass es Mechanismen geben wird, welche automatisch &amp;ldquo;alte&amp;rdquo; Aufzeichnungen löschen wird. Der Speicherverbrauch auf SharePoint soll so reduziert werden. Eventuell kommen hier Retention Policies zum Einsatz. Diese Policies können nicht nur Dateien löschen, sondern auch für einen bestimmten Zeitraum garantiert Vorhalten. Es kann also sein, dass es hier auch eine Lösung für das Löschen eines OneDrives geben wird.&lt;/p>
&lt;p>Meetings können aber auch alternativ in einem &lt;a href="https://support.microsoft.com/en-us/office/tip-meet-in-a-channel-519ad2a0-9b74-49bb-97ee-0d4c4494a7c5" target="_blank">Teams Kanal geplant&lt;/a> werden. Diese Channel-Meetings speichern ihr Recording in dem entsprechenden Ordner im Kanal. Wenn ich also im &amp;ldquo;General&amp;rdquo; Kanal aufzeichne, dann liegt die Datei hier &amp;ldquo;/sites/YOURTEAMSITE/Shared Documents/General/Recordings&amp;rdquo;. Ich bin semi-zufrieden. Die Ablage im Team löst die Probleme beim Zugriff und die Frage wem die Datei gehört. Solltet ihr aber zum Beispiel den Ordner General per OneDrive Client auf eurem Rechner syncen und immer alles Offline wollen&amp;hellip; dann kommen jetzt auch größere Videodateien mit. Aber man kann nicht alles haben und ich hoffe, dass Microsoft in Zukunft diese Szenarien weiter optimiert.&lt;/p>
&lt;p>Das Label der Schaltfläche im Meeting Chat heißt immer &amp;ldquo;Open in OneDrive&amp;rdquo; und ändert sich für ein Channel Meeting NICHT in &amp;ldquo;Open in SharePoint&amp;rdquo;. Auch hier gibt es die Chance auf Besserung in der Zukunft.&lt;/p>
&lt;p>Schauen wir mal direkt auf die Datei. Hier ein Screenshot der erweiterten MP4 Eigenschaften:
&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201020-microsoftteams-recording-onedrive--mp4-details.jpg" alt="image" />
&lt;/p>
&lt;p>Die Aufzeichnung ist etwas unter 5 Minuten lang und verbraucht ca. 25 MB. Das Video besitzt eine FullHD (1080p) Auflösung. Wenn ich mir den Dateinamen anschaue, dann bin ich super happy. In Stream waren besonders die Titel der Channel Meetings oft Nichtssagend z.B. &amp;ldquo;Meeting in General&amp;rdquo;. So baut sich der Dateiname im neuen Stream auf:&lt;/p>
&lt;ul>
&lt;li>Demo Luke and Leia-20201024_152149-Meeting Recording.mp4
&lt;ul>
&lt;li>TitelDesMeeting-yyyyMMdd_HHmmss-Meeting Recording&lt;/li>
&lt;li>TitelDesMeeting = Demo Luke and Leia&lt;/li>
&lt;li>yyyyMMdd_HHmmss = Start der Aufnahme (Lokale Zeit und nicht UTC), also der Moment in dem &amp;ldquo;Start recording&amp;rdquo; geklickt wird&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Meeting in _Workplace_-20201023_100348-Meeting Recording.mp4
&lt;ul>
&lt;li>MeetingInKanal&amp;ndash;yyyyMMdd_HHmmss-Meeting Recording&lt;/li>
&lt;li>MeetingInKanal = Der Kanal heißt Workplace und in dem Fall wurde leider der Titel des Meetings nicht übernommen.&lt;/li>
&lt;li>yyyyMMdd_HHmmss = Start der Aufnahme (Lokale Zeit und nicht UTC), also der Moment in dem &amp;ldquo;Start recording&amp;rdquo; geklickt wird&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="einschalten-im-tenant">Einschalten im Tenant&lt;/h2>
&lt;p>Microsoft hat &lt;a href="https://docs.microsoft.com/en-us/MicrosoftTeams/tmr-meeting-recording-change" target="_blank">aktuelle Dokumentation&lt;/a> wann es wie weiter geht. Aktuell kann ein Tenant Admin den Opt-In durchführen und in wenigen Stunden ist der Tenant bereit und alle neuen Meeting Recordings landen direkt im OneDrive/SharePoint. Wenn der Admin kein Opt-In oder Opt-Out macht, dann wird ab Mitte Q4 2020 die Funktion für den Tenant konfiguriert. Habt ihr für euren Tenant ein Opt-Out konfiguriert, dann ist trotzdem im Q1 2021 Schluss und das Recording auf OneDrive/SharePoint wird auch für euren Tenant umgestellt. Bedeutet, dass mit Start Q2 2021 alle Meeting Recordings nur noch im neuen Microsoft Stream (aka SharePoint) laden.&lt;/p>
&lt;p>Für den &lt;a href="https://docs.microsoft.com/en-us/MicrosoftTeams/tmr-meeting-recording-change#set-up-the-meeting-recording-option-for-onedrive-for-business-and-sharepoint" target="_blank">Opt-In&lt;/a> braucht ihr die Skype for Business PowerShell, um die entsprechende Meeting Policy zu setzen. Seit der Ignite 2020 sind die CommandLets aber auch in das Microsoft Teams PowerShell Modul integriert.&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">Import-Module SkypeOnlineConnector
$sfbSession = New-CsOnlineSession
Import-PSSession $sfbSession
Set-CsTeamsMeetingPolicy -Identity Global -RecordingStorageMode &amp;quot;OneDriveForBusiness&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>Da es eine Meeting Policy ist, kann man das Feature auch erstmal nur für einzelne Benutzer freischalten.&lt;/p>
&lt;p>Für den Op-Out setzt ihr den Wert einfach auf &amp;ldquo;Stream&amp;rdquo;:&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">Set-CsTeamsMeetingPolicy -Identity Global -RecordingStorageMode &amp;quot;Stream&amp;quot;
&lt;/code>&lt;/pre>
&lt;h2 id="zusammenfassung">Zusammenfassung&lt;/h2>
&lt;p>Microsoft Teams läutet eine neue Video Ära in Microsoft 365 ein. Die Meeting Recordings können ab sofort für all oder einzelne Benutzer nach SharePoint/OneDrive umgeleitet werden. Der Funktionsverlust ist angesichts der neuen Freiheit beim Teilen der Aufzeichnungen zu verschmerzen. Folgende Punkte sind also zu beachten:&lt;/p>
&lt;ul>
&lt;li>Aufzeichnungen im Benutzer OneDrive können verloren gehen, wenn das OneDrive gelöscht wird (Mitarbeiter verlässt das Unternehmen)&lt;/li>
&lt;li>Kein x-fache Wiedergabegeschwindigkeit&lt;/li>
&lt;li>Keine adaptive Bandbreitenanpassung (aktuell auch in Stream nicht gegeben)&lt;/li>
&lt;li>Keine Integration in die aktuelle Stream Mobile App&lt;/li>
&lt;li>&lt;strong>Wird eine Datei umbenannt, verschoben oder gelöscht, dann geht der Link im Meeting Chat kaputt&lt;/strong>&lt;/li>
&lt;li>Das richtige Teilen mit Externen erfordert einige Klicks (&lt;a href="https://marcoscheel.de/post/2020/11/20201101-microsoftteams-recording-sharing/">Blogpost&lt;/a> &lt;del>coming soon&lt;/del>)&lt;/li>
&lt;li>Keine Möglichkeit alle Meeting Recordings auf einen Blick zu sehen, man muss jedes Mal den Meeting Chat suchen&lt;/li>
&lt;/ul></description></item><item><title>Teilnehmer in Microsoft Teams für immer stumm schalten</title><link>https://marcoscheel.de/post/2020/10/20201017-unmute-attendee/</link><pubDate>Sat, 17 Oct 2020 17:33:05 +0200</pubDate><guid>https://marcoscheel.de/post/2020/10/20201017-unmute-attendee/</guid><description>&lt;p>Wer kennt es nicht: Das Meeting startet und plötzlich &amp;ldquo;piiiiiiiiep-piiiiiep-piiep-piep&amp;rdquo; &amp;hellip; der Projektleiter parkt rückwärts ein. Die Flexibilität in der Teilnahme an einem Teams Meeting ist &amp;ldquo;nahezu&amp;rdquo; unbegrenzt. Die Freiheitsgrade sind aber für viele neu und ungeübt. Der geübte Umgang mit dem Meeting Equipment ist noch in weiter Ferne. Im optimalen Fall setzen wir alle nur Microsoft Teams zertifizierte Geräte ein und Hardware + Software arbeiten in Harmonie. Wenn ich zu spät in ein Meeting komme, dann hoffentlich &amp;ldquo;on mute&amp;rdquo;. Die Realität sieht noch immer anders aus. Besonders in großen Meetings war es ein Problem, dass Teilnehmer jederzeit das Mikrofon öffnen konnten. Ein &lt;a href="https://marcoscheel.de/post/2020/03/614015532121931776-microsoft-teams-live-events-f%C3%BCr-krisen-vortr%C3%A4ge/" target="_blank">Microsoft Teams Live-Events&lt;/a> waren oft keine Lösung, da die Interaktivität in einem späteren Moment fehlte. Durch die Einführung des &lt;a href="https://www.microsoft.com/en-us/microsoft-365/roadmap?rtc=1&amp;amp;market=en&amp;amp;filters=&amp;amp;searchterms=66575" target="_blank">Roadmap Item 66575&lt;/a> ist das Problem lösbar:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Prevent attendees from unmuting in Teams Meetings&lt;/strong>&lt;/p>
&lt;p>Gives meeting organizers the ability to mute one to many meeting participants while removing the muted participants&amp;rsquo; ability to unmute themselves.&lt;/p>
&lt;/blockquote>
&lt;p>Hier der Screenshot zum Feature:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201017-unmute-attendee--demo.jpg" alt="image" />
&lt;/p>
&lt;h2 id="teilnehmer-attendee-vs-moderatorpresenter">Teilnehmer (Attendee) vs Moderator(Presenter)&lt;/h2>
&lt;p>Microsoft Teams kennt in einem Meeting &lt;a href="https://support.microsoft.com/de-de/office/rollen-in-einer-teams-besprechung-c16fa7d0-1666-4dde-8686-0a0bfe16e019?ui=de-de&amp;amp;rs=de-de&amp;amp;ad=de" target="_blank">drei wesentliche Rollen&lt;/a>. Für unser Szenario sind nur zwei Rollen interessant. Das Unternehmen kann vorgeben, wie strikt die &lt;strong>Moderator&lt;/strong>-Rolle (Presenter) gehandhabt wird. Im Standard ist jeder Benutzer dieser Rolle zugeordnet und kann damit das Meeting unterstützen oder empfindlich stören. Im Meeting selbst kann jeder Moderator andere Benutzer zum &lt;strong>Teilnehmer&lt;/strong> herabstufen. Teilnehmer können nicht präsentieren und keine Benutzer aus der Konferenz werfen. Für die genau Übersicht checkt diesen &lt;a href="https://support.microsoft.com/de-de/office/rollen-in-einer-teams-besprechung-c16fa7d0-1666-4dde-8686-0a0bfe16e019?ui=de-de&amp;amp;rs=de-de&amp;amp;ad=de" target="_blank">Link&lt;/a>.&lt;/p>
&lt;p>Welche Optionen das Unternehmen zur Vorgabe hat, findet ihr mit &lt;a href="https://docs.microsoft.com/en-us/microsoftteams/meeting-policies-in-teams#meeting-policy-settings---designated-presenter-role-mode" target="_blank">allen Details hier&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>Jeder&lt;/li>
&lt;li>Jeder aus dem Unternehmen&lt;/li>
&lt;li>Nur der Organisator&lt;/li>
&lt;/ul>
&lt;h2 id="meeting-planen">Meeting planen&lt;/h2>
&lt;p>Wenn ihr ein Meeting &lt;strong>fertig geplant&lt;/strong> habt, könnt ihr nachträglich in die Meeting Optionen schauen. In Skype for Business konnte man das schon direkt beim Planen, aber Microsoft hat es sich hier &amp;ldquo;einfach&amp;rdquo; gemacht und springt einfach im Browser auf diese Optionen. Im Beschreibungstext des Termins neben dem Teilnahme-Link, kann der Organisator auch aus allen anderen Programmen auf diese Optionen zugreifen:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201017-unmute-attendee--teams-meetinginvite.jpg" alt="image" />
&lt;/p>
&lt;p>Hier die Meeting Optionen im Browser:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201017-unmute-attendee--teams-meetingoptions.png" alt="image" />
&lt;/p>
&lt;p>Wer kann präsentieren? Hier ist der Unternhemnsstandard vorgegeben und ihr könnt den Wert nach euren Vorlieben anpassen.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201017-unmute-attendee--teams-meetingoptions-presenter.png" alt="image" />
&lt;/p>
&lt;p>Solltet ihr die Option &amp;ldquo;Specific people&amp;rdquo; auswählen, konnte ich in meinem Test nur eingeladenen Personen aus dem Unternehmen selbst auswählen. Je nachdem wer den Termin tatsächlich steuert, müsst ihr hier aufpassen, wenn ihr zum Beispiel durch einen externen Projektleiter unterstützt werden, der normalerweise das Meeting leitet.&lt;/p>
&lt;p>Jetzt kommen wir zum eigentlichen Feature, wenn ihr schon zur Planung die Entscheidung treffen könnt, dann stellt ihr hier die Option &amp;ldquo;Allow attendees to unmute&amp;rdquo; aus.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201017-unmute-attendee--teams-meetingoptions-unmute.png" alt="image" />
&lt;/p>
&lt;h2 id="im-meeting">Im Meeting&lt;/h2>
&lt;p>Während des Teams Meetings kann ein Moderator die Option zum &amp;ldquo;Stumm-schalten&amp;rdquo; der Teilnehmer direkt im Client bedienen. In der Teilnehmerliste kann man über das &amp;ldquo;&amp;hellip;&amp;quot;-Menü die Benutzergruppe stumm schalten.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201017-unmute-attendee--meeting-unmute.jpg" alt="image" />
&lt;/p>
&lt;p>Für den Teilnehmer wird es im Client kurz signalisiert, dass Sie aktuell stumm sind. Ein &amp;ldquo;Unmute&amp;rdquo; über zum Beispiel zertifizierte Hardware-Button wird sofort wieder zurückgesetzt und das Headset (Dongle) zeigt weiterhin Mute (Rot) an.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201017-unmute-attendee--meeting-me-unmute.jpg" alt="image" />
&lt;/p>
&lt;p>Für mich als Teilnehmer ist das Symbol zum &amp;ldquo;Unmuten&amp;rdquo; ausgegraut und nicht bedienbar. Der Rest der Teilnehmer wird ebenfalls als deaktiviert angezeigt.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201017-unmute-attendee--meeting-me-unmute-disabled.jpg" alt="image" />
&lt;/p>
&lt;p>In meinem Test kann man übrigens sehen, dass noch nicht alles rund läuft. Für ein kurzen Moment war mein Mikrofon noch offen (wie beim berühmten Double-Mute) aber Teams hatte mich im Client schon stumm geschaltet. In dem Moment hat mich der Client dann drauf hingewiesen, dass ich noch mute bin, obwohl ich es ja nicht ändern kann :) Wird schon noch werden.&lt;/p>
&lt;p>Ein Moderator kann jederzeit die Option wieder für alle entfernen oder einzelne Teilnehmer zum Moderator befördern.&lt;/p>
&lt;h2 id="abschluss">Abschluss&lt;/h2>
&lt;p>Ich kannte die Funktion bisher nur von WebEx und wurde schon das eine oder andere Mal darauf angesprochen. Bisher war meine Antwort eine Kombination aus Live-Event und Teams Meeting im Anschluss. Durch diese neue Funktion wird es für alle viel einfacher. Ich würde trotzdem sparsam mit dem Setting umgehen, da die Tücke im Detail liegt. Aktuell können zum Beispiel nur die Web- und Desktop-Versionen damit umgehen. Auf einem &lt;a href="https://docs.microsoft.com/de-de/microsoftteams/rooms/" target="_blank">Microsoft Teams Room System&lt;/a> oder dem Mobile Clients (Android/iOS) gibt es die Funktion Stand Oktober 2020 noch nicht. Es kann also passieren, dass ein Meeting nicht stattfinden kann, weil die Teilnehmer nicht zu Wort kommen können. Wie so oft kann man durch gute User-Erziehung mehr erreichen als durch harte Regulation.&lt;/p>
&lt;p>Microsoft hat wie so oft in letzter Zeit hervorragen Dokumentation zum Feature Online. Schaut also selbst nochmal rein.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://support.microsoft.com/de-de/office/verwalten-von-audioberechtigungen-f%c3%bcr-teilnehmer-in-teams-besprechungen-f9db15e1-f46f-46da-95c6-34f9f39e671a?ui=de-de&amp;amp;rs=de-de&amp;amp;ad=de" target="_blank">Verwalten von audioberechtigungen für Teilnehmer in Teams-Besprechungen&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://support.microsoft.com/en-us/office/manage-attendee-audio-permissions-in-teams-meetings-f9db15e1-f46f-46da-95c6-34f9f39e671a" target="_blank">Manage attendee audio permissions in Teams meetings&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>My blog has moved - From Tumblr to Hugo on GitHub Pages</title><link>https://marcoscheel.de/post/2020/10/20201011-my-blog-has-moved/</link><pubDate>Sun, 11 Oct 2020 19:53:06 +0200</pubDate><guid>https://marcoscheel.de/post/2020/10/20201011-my-blog-has-moved/</guid><description>&lt;p>My blog now has a new home. It is no longer hosted on Tumblr.com and it is now hosted on GitHub Pages. The main reason to get of Tumblr is the poor image handling. The overall experience was OK. I liked the editor and best of all it is all free including running on your own domain! Having my own name was a key driver. I was running my blog on my own v-server back in the days. I tried a lot of platforms (blogger.com, wordpress.com and prior Tumblr I ran on a &amp;ldquo;self&amp;rdquo; hosted WordPress instance). The only constant was and will be my RSS hosting. Believe it or not I&amp;rsquo;m still running Feedburner from Google. One service that is still not (yet?) killed by search giant (RIP Google Reader). With all the previous choices there was also on driving factor: &lt;strong>I&amp;rsquo;m cheap, can I get it for free? Yes and it will stay 100% free for you and me!&lt;/strong>&lt;/p>
&lt;p>Today is the day I switched to a static website! It is 2020 and the hipster way to go. So, what does it take to run a blog on a static site generator?&lt;/p>
&lt;ul>
&lt;li>A static site generator: &lt;a href="https://gohugo.io" target="_blank">https://gohugo.io&lt;/a>&lt;/li>
&lt;li>A place to host the source files: &lt;a href="https://github.com" target="_blank">https://github.com&lt;/a>&lt;/li>
&lt;li>A place to host the generated website: &lt;a href="https://pages.github.com" target="_blank">https://pages.github.com&lt;/a>&lt;/li>
&lt;li>A method to publish after I committed a new blog post: This but later &lt;a href="https://github.com/features/actions" target="_blank">https://github.com/features/actions&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Main benefits:&lt;/p>
&lt;ul>
&lt;li>Still free&lt;/li>
&lt;li>I own my content 100%&lt;/li>
&lt;li>Better image handling (high-res with zoom)&lt;/li>
&lt;li>Better inline code handling and highlighting&lt;/li>
&lt;li>Learning new stuff&lt;/li>
&lt;/ul>
&lt;h2 id="hugo">HUGO&lt;/h2>
&lt;blockquote>
&lt;p>Hugo is one of the most popular open-source static site generators. With its amazing speed and flexibility, Hugo makes building websites fun again.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201011-my-blog-has-moved-hugo--logo-wide.svg" alt="image" />
&lt;/p>
&lt;p>Why &lt;a href="https://gohugo.io" target="_blank">Hugo&lt;/a> and not &lt;a href="https://jekyllrb.com/" target="_blank">Jekyll&lt;/a>? Because there are blogs out there that I&amp;rsquo;m reading, and I liked the idea of being one of them :) Who?&lt;/p>
&lt;ul>
&lt;li>Andrew Connell: &lt;a href="https://www.andrewconnell.com/blog/hosting-hugo-on-azure" target="_blank">https://www.andrewconnell.com/blog/hosting-hugo-on-azure&lt;/a>&lt;/li>
&lt;li>Maximilian Melcher: &lt;a href="https://melcher.dev/2017/11/bye-bye-wordpress-hello-hugo" target="_blank">https://melcher.dev/2017/11/bye-bye-wordpress-hello-hugo&lt;/a>&lt;/li>
&lt;li>Matthew McDermott: &lt;a href="https://www.ableblue.com/blog/archive/2019/02/20/learning-hugo-on-azure-part-1" target="_blank">https://www.ableblue.com/blog/archive/2019/02/20/learning-hugo-on-azure-part-1&lt;/a>&lt;/li>
&lt;li>Jason Hand: &lt;a href="https://dev.to/jasonhand/10-tips-for-building-and-deploying-hugo-websites-on-azure-static-web-apps-307l" target="_blank">https://dev.to/jasonhand/10-tips-for-building-and-deploying-hugo-websites-on-azure-static-web-apps-307l&lt;/a>&lt;/li>
&lt;li>Aaron Wislang: &lt;a href="https://www.aaronmsft.com/posts/static-sites-hugo-azure-cloudflare" target="_blank">https://www.aaronmsft.com/posts/static-sites-hugo-azure-cloudflare&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>There is even content on Microsoft Docs on hosting Hugo on Azure Static Websites: &lt;a href="https://docs.microsoft.com/en-us/azure/static-web-apps/publish-hugo" target="_blank">https://docs.microsoft.com/en-us/azure/static-web-apps/publish-hugo&lt;/a>&lt;/p>
&lt;p>It was easy to start. Just follow the steps on the &lt;a href="https://gohugo.io/getting-started/quick-start/" target="_blank">Getting started&lt;/a> using &lt;a href="https://gohugo.io/getting-started/installing#chocolatey-windows" target="_blank">choco installation for Windows users&lt;/a>.&lt;/p>
&lt;p>I&amp;rsquo;ve chosen the &lt;a href="https://github.com/amzrk2/hugo-theme-fuji/" target="_blank">Fuji theme&lt;/a> as a great staring point and integrated it as a git submodule. As mentioned in the docs I copied the settings into my config.toml and I was ready to go.&lt;/p>
&lt;pre>&lt;code>hugo new post/hugo/2020/10/my-blog-has-moved.md
hugo server -D
&lt;/code>&lt;/pre>
&lt;p>Open localhost:1313 in your browser of choice and check the result.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201011-my-blog-has-moved-hugo--hugo-server.jpg" alt="image" />
&lt;/p>
&lt;h3 id="my-tweaks">My tweaks&lt;/h3>
&lt;p>To get result in the picture above I needed some tweaks. Also, some other settings are notable if you are like me :)&lt;/p>
&lt;p>The chosen theme is not very colorful and I really wanted a site image. I&amp;rsquo;m sure it is my missing knowledge about Hugo and theming but I ended up messing this the CSS to get a header image. I have put a classic CSS file in my &amp;ldquo;static/css&amp;rdquo; folder.&lt;/p>
&lt;pre>&lt;code class="language-CSS">header {
background-image: url(/bg-skate-2020.jpg);
background-size: cover;
}
body header a {
color: #ffffff;
white-space: normal;
}
body header .title-sub{
color: #ffffff;
white-space: normal;
}
body .markdown-body strong{
color: #000000;
}
&lt;/code>&lt;/pre>
&lt;p>To integrate this into your theme we use partials. To not mess with my theme (it is a submodule and controlled by the original author) I had to copy the &amp;ldquo;head.html&amp;rdquo; from my theme into &amp;ldquo;layouts/_partials&amp;rdquo; and I added the link to my CSS at the end of the file. While I&amp;rsquo;m in here I will also add the RSS tag to my FeedBurner account.&lt;/p>
&lt;pre>&lt;code class="language-CSS">...
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://cdn.jsdelivr.net/npm/disqusjs@1.3/dist/disqusjs.css&amp;quot; /&amp;gt;
{{ end }}
{{ partial &amp;quot;analytic-gtag.html&amp;quot; . }}
{{ partial &amp;quot;analytic-cfga.html&amp;quot; . }}
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/css/custom.css&amp;quot;&amp;gt;
&amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; href=&amp;quot;http://feeds.marcoscheel.de/marcoscheel&amp;quot;&amp;gt;
&lt;/code>&lt;/pre>
&lt;p>I also modified the Google Analytics integration in the same way. I copied the &amp;ldquo;analytic-gtag.html&amp;rdquo; file to my partials folder and added the attribute &amp;ldquo;anonymize_ip&amp;rdquo; to anonymize the IP address.&lt;/p>
&lt;pre>&lt;code class="language-HTML">...
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', '{{ . }}', {'anonymize_ip': true});
&amp;lt;/script&amp;gt;
&amp;lt;script async src=&amp;quot;https://www.googletagmanager.com/gtag/js?id={{ . }}&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code>&lt;/pre>
&lt;p>To &lt;a href="https://github.com/amzrk2/hugo-theme-fuji/#-favicon" target="_blank">get a favicon&lt;/a> I followed the instructions on my theme site doc.&lt;/p>
&lt;p>By default, the RSS feed generated will include only a summary (I HATE THAT) and return all items. I&amp;rsquo;ve found this &lt;a href="https://www.godo.dev/tutorials/hugo-full-text-rss/" target="_blank">post about solving my RSS &amp;ldquo;problem&amp;rdquo;&lt;/a>. This time we had to grab the content from the Hugo website and copy the file into &amp;ldquo;layouts/_default/rss.xml&amp;rdquo;. Switch from &amp;ldquo;.Summary&amp;rdquo; to &amp;ldquo;.Content&amp;rdquo; and switched the description of the RSS feed to my site description. Also, I configured the XML feed to only return 25 items.&lt;/p>
&lt;pre>&lt;code class="language-XML">...
&amp;lt;description&amp;gt;{{.Site.Params.subTitle}}&amp;lt;/description&amp;gt;
...
&amp;lt;pubDate&amp;gt;{{ .Date.Format &amp;quot;Mon, 02 Jan 2006 15:04:05 -0700&amp;quot; | safeHTML }}&amp;lt;/pubDate&amp;gt;
{{ with .Site.Author.email }}&amp;lt;author&amp;gt;{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}&amp;lt;/author&amp;gt;{{end}}
&amp;lt;guid&amp;gt;{{ .Permalink }}&amp;lt;/guid&amp;gt;
&amp;lt;description&amp;gt;{{ .Content | html }}&amp;lt;/description&amp;gt;
&lt;/code>&lt;/pre>
&lt;p>config.toml&lt;/p>
&lt;pre>&lt;code class="language-INI">rssLimit = 25
&lt;/code>&lt;/pre>
&lt;h3 id="content-migration">Content migration&lt;/h3>
&lt;p>I also need to take care about my old content living on Tumblr and if possible, on WordPress. It was kind of easy. I checked the &lt;a href="https://gohugo.io/tools/migrations/" target="_blank">migration article on the Hugo docs&lt;/a> site.&lt;/p>
&lt;p>Tumblr: &lt;a href="https://gohugo.io/tools/migrations/#tumblr" target="_blank">https://gohugo.io/tools/migrations/#tumblr&lt;/a>&lt;br/>
All of the solutions require a Tumblr app registration, so I created on. To not mess with my fresh Windows install I enabled WSL2 and used the Ubuntu distro. This way I was able to clone the &lt;a href="https://github.com/carlmjohnson/tumblr-importr" target="_blank">tumblr-importr&lt;/a> repo and build my application. The important part was to place the GO binary into the right location. Otherwise the command was unknown. After that I was able to generate the needed files.&lt;/p>
&lt;pre>&lt;code class="language-BASH">git clone https://github.com/carlmjohnson/tumblr-importr
cd tumblr-importr
go build
sudo cp tumblr-importr $GOPATH/bin
tumblr-importr -api-key 'MYAPIKEYHERE' -blog 'marcoscheel.de'
&lt;/code>&lt;/pre>
&lt;p>I copied the files into a subfolder named &amp;ldquo;tmblr&amp;rdquo; in my &amp;ldquo;content/post&amp;rdquo; folder. My main problem was that the content was not markdown. The files used HTML. I ended up opening all the blog posts on Tumblr in edit mode and switched to markdown mode and copied the source to the corresponding .md file. I only had 12 posts, so the work was doable and the result is clean. The main benefit of the conversion was that the front-matter attributes were pre-generated I did not have to recreate those (title, old URL as alias, tags, date, &amp;hellip;)&lt;/p>
&lt;pre>&lt;code class="language-INI">date = 2019-08-02T19:41:30Z
title = &amp;quot;Manage Microsoft Teams membership with Azure AD Access Review&amp;quot;
slug = &amp;quot;manage-microsoft-teams-membership-with-azure-ad&amp;quot;
id = &amp;quot;186728523052&amp;quot;
aliases = [ &amp;quot;/post/186728523052/manage-microsoft-teams-membership-with-azure-ad&amp;quot; ]
tags = [ &amp;quot;Microsoft 365&amp;quot;, &amp;quot;Azure AD&amp;quot;, &amp;quot;Microsoft Teams&amp;quot;]
&lt;/code>&lt;/pre>
&lt;p>The Tumblr export generated an image mapping JSON. I used the JSON (converted to a CSV) to rewrite my images to the downloaded (still to small) version.&lt;/p>
&lt;pre>&lt;code class="language-CSV">&amp;quot;OldURI&amp;quot;:&amp;quot;NewURI&amp;quot;
&amp;quot;https://64.media.tumblr.com/023c5bd633c51521feede1808ee7fc20/eb22dd4fa3026290-d8/s540x810/36e4547d82122343bec6a09acf4075bb15eae1c1.png&amp;quot;: &amp;quot;tmblr/6b/23/64d506172093d1d548651e196cf7.png&amp;quot;
&lt;/code>&lt;/pre>
&lt;pre>&lt;code class="language-PowerShell">$images = Import-Csv -Delimiter &amp;quot;:&amp;quot; -Path &amp;quot;.\image-rewrites.csv&amp;quot;;
Get-ChildItem -Filter &amp;quot;*.md&amp;quot; -Recurse | ForEach-Object {
$file = $_;
$content = get-content -Path $file.FullName -Raw
foreach ($image in $images) {
$content = $content -replace $image.OldURI, $image.NewURI
}
Set-Content -Value $content -Path ($file.FullName)
}
&lt;/code>&lt;/pre>
&lt;p>WordPress: &lt;a href="https://gohugo.io/tools/migrations/#wordpress" target="_blank">https://gohugo.io/tools/migrations/#wordpress&lt;/a>&lt;br/>
Once again, I used my handy WSL2 instance to not mess with not loved language. So a save route was to use the WordPress export feature and the repo &lt;a href="https://github.com/wooni005/exitwp-for-hugo" target="_blank">exitwp-for-hugo&lt;/a>. I cloned the repo and a few &amp;ldquo;sudo apt-get&amp;rdquo; later I was ready to run the python script. I placed my downloaded XML into the &amp;ldquo;wordpress-xml&amp;rdquo; folder. I ended up changing the exitwp.py file to ignore all tags and replace it with a single &amp;ldquo;xArchived&amp;rdquo;.&lt;/p>
&lt;pre>&lt;code class="language-Bash">git clone https://github.com/wooni005/exitwp-for-hugo.git
cd exitwp-for-hugo
./exitwp.py
&lt;/code>&lt;/pre>
&lt;p>At the end, my &amp;ldquo;content/post&amp;rdquo; folder looks like to following.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201011-my-blog-has-moved-hugo--hugo-content-posts.jpg" alt="image" />
&lt;/p>
&lt;h2 id="github">Github&lt;/h2>
&lt;p>Now that the content is available on my local drive and I&amp;rsquo;m able to generate the static files. It is already a git repo so where to host the primary authority? So, the Hugo site with all config and logic will go to GitHub. There are only two choices for me. GitHub or Azure DevOps. Microsoft is owning both services. Private repos are free in both services. It looks like in the future Azure DevOps will not get all the love and that is why my website source code is hosted on GitHub: &lt;a href="https://github.com/marcoscheel/marcoscheel-de" target="_blank">https://github.com/marcoscheel/marcoscheel-de&lt;/a>&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201011-my-blog-has-moved-hugo--github-private.png" alt="image" />
&lt;/p>
&lt;h2 id="github-pages">GitHub Pages&lt;/h2>
&lt;p>Next up is to generate the final HTML and put it out there on the internet. Generating the content is as easy as running this command.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201011-my-blog-has-moved-hugo--githubpages-hugo.png" alt="image" />
&lt;/p>
&lt;p>Now we need to decide how to host the content. My first try was to setup a new Azure Pay-As-You-Go subscription with a 200$ starting budget for the first month and my personal credit card from here. Based on &lt;a href="https://www.andrewconnell.com/blog/hosting-hugo-on-azure/" target="_blank">Andrew Connell blog&lt;/a> I setup a storage account and enabled the &lt;a href="https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website" target="_blank">static website&lt;/a>. I could setup a &lt;a href="https://docs.microsoft.com/en-us/azure/storage/blobs/storage-custom-domain-name?tabs=azure-portal" target="_blank">custom domain&lt;/a> for the blob store, but I created a &lt;a href="https://docs.microsoft.com/en-us/azure/cdn/cdn-create-new-endpoint" target="_blank">Azure CDN (MS Standard)&lt;/a> to optimize traffic and reduce potential cost. I also checked for &lt;a href="https://www.cloudflare.com/plans/" target="_blank">Cloudflare CDN&lt;/a>. All options allowed to have a custom domain and easy HTTPS with build in certificates. At the end it was my credit card and if something went really wrong (too much traffic due to non-paid internet fame?) I would be paying a life lesson with real money. I took the easy route instead. GitHub Pages to the rescue.&lt;/p>
&lt;blockquote>
&lt;p>Websites for you and your projects. Hosted directly from your GitHub repository. Just edit, push, and your changes are live.&lt;/p>
&lt;/blockquote>
&lt;p>For every account GitHub is offering &lt;strong>one&lt;/strong> &lt;a href="https://pages.github.com/" target="_blank">GitHub Pages&lt;/a> repository. I created the repository at: &lt;a href="https://github.com/marcoscheel/marcoscheel.github.io" target="_blank">https://github.com/marcoscheel/marcoscheel.github.io&lt;/a>&lt;/p>
&lt;p>Normally the content will be server on the github.io domain, but through the settings we can add a CNAME to the site. To achieve this we need to put a file called &amp;ldquo;CNAME&amp;rdquo; into the root directory. For my Hugo site and the publish process I placed the file into the &amp;ldquo;static&amp;rdquo; folder so every time the site is generated the file will be copied to the root of the site. Once the CNAME is in place we configure the HTTPS redirect.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/img/20201011-my-blog-has-moved-hugo--githubpages-https.png" alt="image" />
&lt;/p>
&lt;p>Custom domain. HTTPS. No credit card. Everything is good.&lt;/p>
&lt;h2 id="publishing">Publishing&lt;/h2>
&lt;p>In the future I&amp;rsquo;m looking forward to enable GitHub Actions to publish my site. For the moment I rely on my local environment pushing content from my Hugo site to the GitHub Pages repository. I integrated the GitHub Pages repo as a submodule and with the publish process I put the files into &amp;ldquo;public/docs&amp;rdquo;.&lt;/p>
&lt;pre>&lt;code class="language-INI">publishDir = &amp;quot;public/docs&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>A quick &amp;ldquo;hugo&amp;rdquo; on the Windows Terminal and a fresh version is ready to be pushed into the right repo.&lt;/p>
&lt;pre>&lt;code class="language-Bash">hugo
cd public
git add -A &amp;amp;&amp;amp; git commit -m &amp;quot;Ready for go live&amp;quot;
git push
&lt;/code>&lt;/pre></description></item><item><title>Enable Unified Labeling for Microsoft 365 Groups (and Teams) in your tenant via PowerShell script</title><link>https://marcoscheel.de/post/2020/08/626684661029044224-enable-unified-labeling-for-microsoft-365-groups/</link><pubDate>Mon, 17 Aug 2020 08:31:05 +0000</pubDate><guid>https://marcoscheel.de/post/2020/08/626684661029044224-enable-unified-labeling-for-microsoft-365-groups/</guid><description>&lt;p>Microsoft announced end of June 2020 the “General Availability” of the Microsoft Information Protection integration for Group labeling. Unified labeling is now available für all Microsoft 365 Groups (Teams, SharePoint, &amp;hellip;).&lt;/p>
&lt;blockquote>
&lt;p>Microsoft Information Protection is a built-in, intelligent, unified, and extensible solution to protect sensitive data across your enterprise – in Microsoft 365 cloud services, on-premises, third-party SaaS applications, and more. Microsoft Information Protection provides a unified set of capabilities to know your data, protect your data, and prevent data loss across Microsoft 365 apps (e.g. Word, PowerPoint, Excel, Outlook) and services (e.g. Teams, SharePoint, and Exchange).&lt;/p>
&lt;/blockquote>
&lt;p>Source: &lt;a href="https://techcommunity.microsoft.com/t5/microsoft-security-and/general-availability-microsoft-information-protection/ba-p/1497769" target="_blank">https://techcommunity.microsoft.com/t5/microsoft-security-and/general-availability-microsoft-information-protection/ba-p/1497769&lt;/a>&lt;/p>
&lt;p>The feature is currently an opt-in solution. The previous Azure AD based group classification is still available and supported. If you want to switch to the new solution to apply sensitivity labels to your groups you need to run some lines of PowerShell. This is the Microsoft documentation:&lt;/p>
&lt;p>&lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/groups-assign-sensitivity-labels#enable-sensitivity-label-support-in-powershell" target="_blank">https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/groups-assign-sensitivity-labels#enable-sensitivity-label-support-in-powershell&lt;/a>&lt;/p>
&lt;p>The feature is configured with the same commands as the AAD based classification. You have to set the value for “EnableMIPLabels“ to true.The documentation is expecting that you already have Azure AD directory settings for the template “Group.Unified“. If this is not the case you can also follow the instructions on the Azure AD directory settings for Groups:&lt;/p>
&lt;p>&lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/groups-settings-cmdlets#create-settings-at-the-directory-level" target="_blank">https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/groups-settings-cmdlets#create-settings-at-the-directory-level&lt;/a>&lt;/p>
&lt;p>To make it easier for my customers and for you, I’ve created a PowerShell that will help and work in any configuration. Check out the latest version of my script in this GitHub repository:&lt;/p>
&lt;p>&lt;a href="https://github.com/marcoscheel/snippets/blob/master/m365-enable-ul-groups/enable-ulclassification.ps1" target="_blank">https://github.com/marcoscheel/snippets/blob/master/m365-enable-ul-groups/enable-ulclassification.ps1&lt;/a>&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">$tenantdetail = $null;
$tenantdetail = Get-AzureADTenantDetail -ErrorAction SilentlyContinue;
if ($null -eq $tenantdetail)
{
#connect as gloabl admin
Connect-AzureAD
$tenantdetail = Get-AzureADTenantDetail -ErrorAction SilentlyContinue;
}
if ($null -eq $tenantdetail)
{
Write-Host &amp;quot;Error connecting to tenant&amp;quot; -ForegroundColor Red;
Exit
}
$settingIsNew = $false;
$setting = Get-AzureADDirectorySetting | Where-Object { $_.DisplayName -eq &amp;quot;Group.Unified&amp;quot;};
if ($null -eq $setting){
Write-Host &amp;quot;Not directory settings for Group.Unified found. Create new!&amp;quot; -ForegroundColor Green;
$settingIsNew = $true;
$aaddirtempid = (Get-AzureADDirectorySettingTemplate | Where-Object { $_.DisplayName -eq &amp;quot;Group.Unified&amp;quot; }).Id;
$template = Get-AzureADDirectorySettingTemplate -Id $aaddirtempid;
$setting = $template.CreateDirectorySetting();
}
else{
Write-Host &amp;quot;Directory settings for Group.Unified found. Current value for EnableMIPLabels:&amp;quot; -ForegroundColor Green;
Write-Host $setting[&amp;quot;EnableMIPLabels&amp;quot;];
}
$setting[&amp;quot;EnableMIPLabels&amp;quot;] = &amp;quot;true&amp;quot;;
if (-not $settingIsNew){
#Reset AAD based classsification?
#$setting[&amp;quot;ClassificationList&amp;quot;] = &amp;quot;&amp;quot;;
#$setting[&amp;quot;DefaultClassification&amp;quot;] = &amp;quot;&amp;quot;;
#$setting[&amp;quot;ClassificationDescriptions&amp;quot;] = &amp;quot;&amp;quot;;
}
if ($settingIsNew){
New-AzureADDirectorySetting -DirectorySetting $setting;
Write-Host &amp;quot;New directory settings for Group.Unified applied.&amp;quot; -ForegroundColor Green;
$setting = Get-AzureADDirectorySetting | Where-Object { $_.DisplayName -eq &amp;quot;Group.Unified&amp;quot;};
}
else{
Set-AzureADDirectorySetting -Id $setting.Id -DirectorySetting $setting;
Write-Host &amp;quot;Updated directory settings for Group.Unified.&amp;quot; -ForegroundColor Green;
$setting = Get-AzureADDirectorySetting | Where-Object { $_.DisplayName -eq &amp;quot;Group.Unified&amp;quot;};
}
$setting.Values;
&lt;/code>&lt;/pre></description></item><item><title>Beware of the Teams Admin center to create new teams (and assign owners)</title><link>https://marcoscheel.de/post/2020/07/624267623460454400-beware-of-the-teams-admin-center-to-create-new/</link><pubDate>Tue, 21 Jul 2020 16:13:19 +0000</pubDate><guid>https://marcoscheel.de/post/2020/07/624267623460454400-beware-of-the-teams-admin-center-to-create-new/</guid><description>&lt;p>The &lt;a href="https://admin.teams.microsoft.com/teams/manage" target="_blank">Microsoft Teams Admin Center&lt;/a> can be used to create a new Team. The initial dialog allows you to set multiple owners for the Team. This feature was added over time and is a welcome addition to make the life of an administrator easier. But the implementation has a big shortcoming: The specified owners in this dialog will not become a member of the underlying Microsoft 365 Group in Azure Active Directory. As a result all Microsoft 365 group services checking for members will not behave as expected. For example: These owners will not be able to access Planner. Other services like Teams and SharePoint work by accident.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/2a/8a/ee93247423d6326e5e728bed8116.png" alt="image" />
&lt;/p>
&lt;p>Let’s start with some basic information. &lt;strike>Office &lt;/strike>&lt;a href="https://docs.microsoft.com/en-us/microsoft-365/admin/create-groups/office-365-groups?view=o365-worldwide" target="_blank">Microsoft 365 Groups&lt;/a> use a special AAD group type. But it is still a group in Azure Active Directory. A group in &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-groups-create-azure-portal" target="_blank">AAD&lt;/a> is very similar to the &lt;a href="https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/active-directory-security-groups" target="_blank">old-school AD&lt;/a> group in our on-premises directories. The group is made of members. In most on-premises cases these groups are managed by your directory admins. But also in AD you can specify owners of a group that will then be able to manage these groups&amp;hellip; if they have the right tool (dsa.msc, &amp;hellip;). In the cloud Microsoft (and myself) is pushing towards self-service for group management. This “self-service-first approach” is obvious since the introduction of now &lt;strike>Office&lt;/strike> Microsoft 365 Groups. Teams being one of the most famous M365 Group services is also pushing to the owner/member model where end users are owners of a Team (therefor an AAD group). All end user facing UX from Microsoft is abstracting away how the underlying AAD group is managed. Teams for example will group owners and members in two sections:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/91/0e/616b767aa86b3b6963ac6a5582c6.png" alt="image" />
&lt;/p>
&lt;p>But if you look at the underlying AAD group you will find, that every owner is also a member:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/37/d7/447064c0fbe9e64a2dff09972fb4.png" alt="image" />
&lt;/p>
&lt;p>And the Azure AD portal shows a dedicated section to manage owners of the group:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/01/2e/048040cbe43ce2d0a828c47629ef.png" alt="image" />
&lt;/p>
&lt;p>The Microsoft Admin portal also has dedicated sections for members and owners:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/9c/25/5cace9e88c2498b9ea0189259af0.png" alt="image" />
&lt;/p>
&lt;p>In general it is important that your administrative staff is aware how group membership (including ownership) is working. The problem with the Teams Admin portal as mentioned in the beginning is the result of this initial dialog leaving the group in an inconsistent state without making that admin aware of this misalignment. Lets check the group created in the initial screenshot using the Teams admin center. We specified 5 admin users and one member after the initial dialog. Non of the admin users was added as a member in AAD (Microsoft 365 Admin portal screenshot):
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/f5/da/ce8a12184ab61762d188d83a1098.png" alt="image" />
&lt;/p>
&lt;p>But looking at the teams Admin center won’t show this “misconfiguration”:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/28/05/d1b21d2dbbaa8b5afb97780cb423.png" alt="image" />
&lt;/p>
&lt;p>If Leia wants to access the associated Planner service for this Team/Group the following error will show:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/5e/9f/bd402486dfaa834994758b729245.png" alt="image" />
&lt;/p>
&lt;p>Planner is checking against group membership. Only is the user is a member Planner (and other services) will check if the user is also an owner and then show administrative controls. Teams itself looks ok. In SharePoint implemented a hack and the owners of the AAD group are granted Site Collection Admin permission so every item is accessible, because that is what Site Collection Admins are for. If your users are reporting problem like this and based on the Teams Admin center everything looks ok, go check “a better” portal like AAD.&lt;/p>
&lt;p>To fix the problem in the Teams Admin center the owner has to be demoted to member state and then promoted to being a owner again.&lt;/p>
&lt;p>A quick test with the SharePoint admin center shows that the system is managing membership as intended and every owner will also be a member. SharePoint requires one owner (Leia) in the first dialog and the second dialog allows additional owners and members:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/c9/a7/42afe4c28f1853faaf2e59d921a0.png" alt="image" />
&lt;/p>
&lt;p>The result for members in AAD is correct as all owners are also added as members:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/74/16/01df708d5a5c8dc340788cefe576.png" alt="image" />
&lt;/p>
&lt;p>Until this &lt;strike>bug&lt;/strike> design flaw is fixed we recommend to not add more owners in the initial dialog. The currently logged-in admin user will be added as the only owner of the created group. In the next step remove your admin and add the requested users as members and promote them to owners. If you rely on self-service this should is not a problem. If you have a custom creation process automated hopefully you add all owner as member, but you should be good most of the time. We at glueckkanja-gab are supporting many customers with our custom lifecycle solution. We are adding a option to report this problem and a optional config switch to fix any detected misalignments.&lt;/p>
&lt;p>I’ve created a UserVoice “idea” for this “bug”. So please lets go: vote!&lt;/p>
&lt;p>&lt;a href="https://microsoftteams.uservoice.com/forums/555103-public/suggestions/40951714-add-owners-also-as-members-aad-group-in-the-init" target="_blank">https://microsoftteams.uservoice.com/forums/555103-public/suggestions/40951714-add-owners-also-as-members-aad-group-in-the-init&lt;/a>&lt;/p></description></item><item><title>Microsoft Teams Live Events für (Krisen-)Vorträge</title><link>https://marcoscheel.de/post/2020/03/614015532121931776-microsoft-teams-live-events-f%C3%BCr-krisen-vortr%C3%A4ge/</link><pubDate>Mon, 30 Mar 2020 12:20:42 +0000</pubDate><guid>https://marcoscheel.de/post/2020/03/614015532121931776-microsoft-teams-live-events-f%C3%BCr-krisen-vortr%C3%A4ge/</guid><description>&lt;p>Online Meetings sind aus den heutigen Unternehmen nicht mehr wegzudenken. Microsoft Teams ist die Meeting-Lösung im Microsoft 365 Service. Ein &lt;strong>Teams Meeting&lt;/strong> ermöglicht es allen Teilnehmern, &lt;strong>aktiv&lt;/strong> an der Besprechung teilzunehmen. Es gibt nur wenig Kontrolle für den Besprechungsleiter. Die Teilnehmer müssen die Disziplin aufbringen und sich im Meeting “korrekt” verhalten. Durch die aktuelle Corona-Krise wird aber deutlich, dass sich viele Teilnehmer schwerer damit tun als gedacht. &lt;strong>Besonders für Neulinge sind die verschiedenen Optionen in der Software ungewohnt und Grundregeln für ein gutes Meeting eventuell unbekannt&lt;/strong>. Es wäre toll, wenn die Software hier besser unterstützt, aber der aktuelle Stand (”Mute all”, &amp;hellip;) wird sich kurzfristig nicht ändern.&lt;/p>
&lt;p>Ich möchte euch heute eine &lt;strong>Alternative zum klassischen Meeting&lt;/strong> zeigen. Es wird nicht für jede Situation passen, aber ihr solltet es kennenlernen und selbst entscheiden. Ich wurde von einer Schule angesprochen, welche Optionen es gibt, die Schüler Online zu unterrichten. Die Zielgruppe ist nicht besonders gut ausgebildet, wenn es um eine gute Meeting-Kultur geht :) Die Eltern und die Schüler dürften oft Anfänger sein und da passieren automatisch Fehler. In dieser Situation kann es sin machen auf ein &lt;strong>Microsoft Teams Live Event&lt;/strong> auszuweichen.&lt;/p>
&lt;h2 id="microsoft-teams-live-event">Microsoft Teams Live Event&lt;/h2>
&lt;p>Ein Live Event kann über den Teams Client geplant und durchgeführt werden. Anders als in einem normalen Meeting gibt es eine klare Trennung zwischen Meeting Organisator und Teilnehmern. Der Organisator wird zum &lt;strong>Producer&lt;/strong> des Events (Meetings) und &lt;strong>muss den Microsoft Team Client nutzen&lt;/strong>. Er kann weitere Personen als Producer einladen und das macht auch Sinn, damit man so ein Meeting professionelle über die Bühne bekommt. Die &lt;strong>Teilnehmer verwenden den Browser&lt;/strong> (ohne Plugins oder ähnlicher) oder falls vorhanden den Teams Client. Im schulischen Szenario kann man sehr wenig Rückschlüsse über die technischen Möglichkeiten der Teilnehmer ziehen. Es ist also gut, dass die Lösung eigentlich mit allen Optionen zurechtkommt.&lt;/p>
&lt;p>Für die Teilnahme am Meeting gibt es zwei Links. Einmal der Link für den Producer (so ähnlich wie ein normaler Teams Meeting-Link) und &lt;strong>nur über den Teams Client kommt man an den Teilnehmerlink&lt;/strong>. Das &lt;strong>Meeting&lt;/strong> (besser Live Event) &lt;strong>muss&lt;/strong> nach dem Beitritt des Producers nochmal über die Software &lt;strong>gestartet werden&lt;/strong>, sonst sehen die Teilnehmer nichts.&lt;/p>
&lt;p>Das Meeting wird mit einem &lt;strong>Zeitversatz&lt;/strong> (10-40 Sekunde) an die Teilnehmer gestreamt. Die Teilnehmer können nur über die eingebaute Frage und Antwort-Funktion (&lt;strong>Q&amp;amp;A&lt;/strong>) mit den Producern kommunizieren. Die Zuschauer können das Meeting jederzeit **pausieren &lt;strong>und &lt;strong>zurück spulen&lt;/strong>. Es stehen mehr als 50 Sprachen für optionalen&lt;/strong> &lt;a href="https://support.microsoft.com/en-us/office/use-live-captions-in-a-live-event-1d6778d4-6c65-4189-ab13-e2d77beb9e2a?ui=en-us&amp;amp;amp;rs=en-us&amp;amp;amp;ad=us" target="_blank">Live-Untertitel&lt;/a> **zur Verfügung.&lt;/p>
&lt;p>Übersicht der Limits&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://docs.microsoft.com/en-us/microsoftteams/limits-specifications-teams#meetings-and-calls" target="_blank">Microsoft Teams Meeting&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.microsoft.com/en-us/microsoftteams/limits-specifications-teams#teams-live-events" target="_blank">Microsoft Teams Live Events&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="live-event-vorbereiten">Live Event vorbereiten&lt;/h2>
&lt;p>Der Benutzer benötigt eine Office 365 Lizenz (E1 oder höher, A3 oder höher) und der Administrator kann über eine Live Event Policy im Admin-Center festlegen, wer Events erstellen kann. &lt;strong>Im Standard sind externe Benutzer nicht erlaubt&lt;/strong>. Für das Schul-Szenario ist es also wichtig, dass dieses Setting verändert wird.&lt;/p>
&lt;p>Teams Admin Center - Meetings - Live event policies - Global (Org-wide default)&lt;/p>
&lt;p>“Who can join scheduled live events” = “Everyone” statt “Everyone in your organization“.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/12/cd/0e8fd1eea5d55b533c6da1738237.png" alt="image" />
&lt;/p>
&lt;h2 id="live-event-planen">Live Event Planen&lt;/h2>
&lt;p>In der Teams App wechselt ihr auf den &lt;strong>Kalender&lt;/strong> und könnt dann oben rechts das DropDown auslösen und “&lt;strong>Live event&lt;/strong>” wählen:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/a1/19/c38aec3a6450e52fd7b55ef4ebaf.png" alt="image" />
&lt;/p>
&lt;p>Über &lt;strong>Yammer&lt;/strong> kann man ebenfalls ein Live Event starten. Begebt euch in die entsprechende Gruppe/Community und dann findet ihr rechts im Bereich “&lt;strong>Group Actions&lt;/strong>” die Möglichkeit ein Live Meeting zu planen.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/99/39/ec8dd97721c1ca95f96869e94fab.png" alt="image" />
&lt;/p>
&lt;p>Über &lt;strong>Microsoft Stream&lt;/strong> kann man zwar Live Events starten, allerdings muss man hier spezielle Software verwenden und kann &lt;strong>nicht Microsoft Teams als Producer&lt;/strong> wählen.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/01/ab/c0ffb6ef6c35212ce9a01ea06579.png" alt="image" />
&lt;/p>
&lt;p>Wir wählen den Weg über Microsoft Teams und erstellen ein Live Event. &lt;a href="https://support.microsoft.com/en-us/office/schedule-a-teams-live-event-7a9ce97c-e1cd-470f-acaf-e6dfc179a0e2" target="_blank">Hier findet ihr die Anleitung von Microsoft&lt;/a>. Es muss wie bei jedem Meeting ein **Titel **angegeben werden und die &lt;strong>Start- sowie Endzeit&lt;/strong>. Die optionale &lt;strong>Ortsangabe&lt;/strong> (Location) könnt ihr offenlassen, Microsoft Teams oder Online eintragen. An dieser Stelle ladet ihr auch die weiteren Presenter ein. Diese Personen stammen aus eurer Organisation und unterstützen euch später beim Erzeugen der Inhalte im Meeting.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/15/a2/69ec01bfea48d8fd81a25abfd921.png" alt="image" />
&lt;/p>
&lt;p>Auf der nächsten Seite werdet ihr nach den **Berechtigungen **gefragt. Wenn euer Administrator die richtigen Voreinstellungen getroffen hat, dann könnt ihr “Public” (Öffentlich) auswählen. Für das Scenario Schule ist **Public **zwingend erforderlich. Setzt ihr ein Live Event für eure Kollegen auf, dann könnt ihr natürlich auch &lt;strong>Org-wide&lt;/strong> oder &lt;strong>einzelne Personen&lt;/strong> auswählen. In beiden letzten Fällen wird ein Login des Unternehmens benötigt. &lt;strong>Wichtig:&lt;/strong> Hier geht es um Berechtigungen und nicht darum, wer eingeladen wird. Teilnehmen kann an einem Org-wide Meeting nur wer auch den Teilnahme-Link erhalten hat!
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/ad/84/5e0862a87850aebbb5d4a20ce1ce.png" alt="image" />
&lt;/p>
&lt;p>Das Live Event ist bereits als Teams Event gekennzeichnet und erlaubt so auch nur die Teams relevanten Einstellungen. Trefft eure Entscheidung, ob die &lt;strong>Aufzeichnung&lt;/strong> für alle Teilnehmer verfügbar gemacht werden soll. Je nach Publikum bietet es sich an, dass “Live-&lt;strong>Untertitel&lt;/strong>” angeboten werden. Es stehen mehr als 50 Sprachen zur Verfügung, aber ein Event kann immer nur 6 gleichzeitig anbieten. Ihr müsst hier entscheiden, welche Sprache gesprochen wird und in welche Sprache übersetzt werden kann. Die Konfiguration des &lt;strong>Teilnehmer-Berichtes&lt;/strong> erlaubt es nach dem Meeting zu sehen (CSV), wer teilgenommen hat sowie wann und wie oft beigetreten wurde. Die Option für die “&lt;strong>Frage&amp;amp;Antwort&lt;/strong>” Funktion (Q&amp;amp;A) sollte immer gewählt sein, damit Teilnehmer und Producer interagieren können.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/e2/ac/dbdc19ff8afd1c60238ef4593312.png" alt="image" />
&lt;/p>
&lt;p>Das Erstellen des Live Events ist abgeschlossen und wird angezeigt.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/9f/63/e157dc99df45f2541d3a16fc2f2d.png" alt="image" />
&lt;/p>
&lt;p>Über die Anzeige kann man dann auch den &lt;strong>Teilnehmerlink kopieren&lt;/strong>. Dieser link muss dann an alle externen (oder internen) Teilnehmer weitergeleitet werden. Am besten wählt man hier den üblichen Kommunikationskanal (Teams, Email, WhatsApp, &amp;hellip;) für die Teilnehmergruppe.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/c8/51/26662fe8c7adfa060bd2ef468b8a.png" alt="image" />
&lt;/p>
&lt;p>Der Link zum Teilnehmen sieht ungefähr so aus wie jeder andere Meeting Link:
&lt;a href="https://teams.microsoft.com/l/meetup-join/19%3ameeting" target="_blank">https://teams.microsoft.com/l/meetup-join/19%3ameeting&lt;/a>_&amp;hellip;
aber für die Teilnehmer-Links endet der Link mit
&lt;strong>IsBroadcastMeeting&lt;/strong>=true&lt;/p>
&lt;h2 id="live-event-produzieren">Live Event produzieren&lt;/h2>
&lt;p>&lt;strong>Rechtzeitig vor Beginn&lt;/strong> des eigentlichen Live Events sollten sich alle Producer ins Meeting einwählen und die nötigen Vorbereitungen zum Start des Events durchführen. Für den Producer sieht der Beitritt so aus wie bei jeden anderen Meeting (Abweichung über dem Titel: “Als Produzent teilnehmen”). Wollt ihr euer Video übermitteln, so müsst ihr natürlich die Webcam aktivieren. &lt;strong>Hinweis&lt;/strong>: Leider gibt es kein Background-Blur in Live Meetings. Achtet also auf eure Umgebung!
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/5a/e6/2ec4b8f34ef6c1ac50f6d00d6a07.png" alt="image" />
&lt;/p>
&lt;p>Über die **Einstellungen **(Zahnrad mit dem aktuellen Audiogerät als Name) könnt ihr das passende Audiogerät verwenden. Es ist extrem wichtig hier die hochwertigsten Komponenten zu verwenden. Laptop Mikrophone und Lautsprecher erzeugen in der Regel das schlechteste Ergebnis. Ein Kopfhörer mit entsprechendem Mikro macht es für alle einfacher und reduzieren Nebengeräusche. Der Auditorium-Modus sollte in Zeiten von Social Distancing nicht relevant sein, aber eventuell für zukünftige Ereignisse von Interesse sein, um Publikum nicht durch Teams rausrechnen zu lassen. &lt;strong>Hinweis&lt;/strong>: Wenn ihr unsicher seid, dann testet eure Optionen mit einem &lt;strong>Testanruf&lt;/strong>!
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/08/d6/493410c5dba950089f99105152df.png" alt="image" />
&lt;/p>
&lt;p>Seid ihr dem Live Event beigetreten, dann seht ihr die &lt;strong>Producer Oberfläche&lt;/strong> und spätestens jetzt wird klar, dass es kein normales Meeting ist und warum ihr das vorher üben solltet :) Es gibt zwei Inhaltsanzeigen. Links befindet sich der Inhalt, der noch nicht Live gesendet wird. Hier bereitet ihr die Szene vor, welche dann Live geschaltet wird. Rechts seht ihr, was die Teilnehmer sehen werden und sich gerade “On-Air” befindet. Mit dem Beitritt zum Live Event wird das Meeting also noch nicht gestartet! Hierfür muss man erstmal die Inhalte anordnen.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/8f/80/b37c08f4851dc6bcb5e558522363.png" alt="image" />
&lt;/p>
&lt;p>Wenn ihr eure Webcam übertragen wollt, dann schaltet auf das entsprechende &lt;strong>Layout&lt;/strong> unten links um.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/75/b9/fd3d944c6a0fb2c94ac2c0ad0c00.png" alt="image" />
&lt;/p>
&lt;p>Jetzt könnt ihr aus dem unteren Bereich eure &lt;strong>Webcam&lt;/strong> nach oben in den kleinen Bereich des linken Fensters ziehen. Genau so geht das auch mit den Inhalten, die ihr teilen wollt. Ihr könnt ein einzelnes &lt;strong>Fenster&lt;/strong> freigeben oder den ganzen Desktop. Ich empfehle immer den **Desktop **freizugeben, da es kompliziert wird, wenn man auch andere Dinge zeigen möchte. Es kommt schneller als man denkt.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/35/e9/5da2fde2a6104c4129e822ff9e68.png" alt="image" />
&lt;/p>
&lt;p>Oben: Fenster freigeben | Unten: Desktop freigeben
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/18/a8/6487e7f59f61630649bbaa034222.png" alt="image" />
&lt;/p>
&lt;p>Wie in jedem anderen Meeting wird nun das geteilte Element &lt;strong>rot umrandet&lt;/strong> und es gibt im oberen Bereich die Möglichkeit weitere &lt;strong>Kontrollen&lt;/strong> einzustellen oder abzubrechen.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/ec/23/f3444702dc0b0756ea6471e993be.png" alt="image" />
&lt;/p>
&lt;p>In der Producer-Ansicht habt ihr nun Video und Inhalt ausgerichtet. Wenn die Zeit gekommen ist, dann muss man die Inhalte “&lt;strong>Live schalten&lt;/strong>”.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/02/6b/3c0af6296cc2238f0d3826036ad1.png" alt="image" />
&lt;/p>
&lt;p>Das Live Event ist aber noch immer nicht für die Teilnehmer sichtbar. Erst mit einem weiteren Klick auf “&lt;strong>Start&lt;/strong>” werden die Inhalte (Audio und Video) an die Teilnehmer übermittelt. Auf der linken Seite, kann zum Beispiel ein weiterer Producer das nächste Layout (Speaker, Speaker-Runde, &amp;hellip;) vorbereitet und gegebenenfalls sofort “&lt;strong>Live schalten&lt;/strong>&amp;quot;
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/a2/fa/147c2b90b4108d23cb856c8dad5d.png" alt="image" />
&lt;/p>
&lt;p>Es ist ein Microsoft Produkt also wird nochmal nachgefragt!
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/2f/6a/a705c1b8892e7a0189edbc404cb3.png" alt="image" />
&lt;/p>
&lt;p>In der Producer-Ansicht wird der sichtbare Teil für die Teilnehmer rot umrandet.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/c2/24/f994f58473ce0a26d189d97d77f2.png" alt="image" />
&lt;/p>
&lt;p>Stoppt der aktuelle Benutzer seine Freigabe, dann wird sein Video in Vollbilddarstellung gebracht.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/70/0c/62202478af0c9e3ac54f47dc6c60.png" alt="image" />
&lt;/p>
&lt;p>In der rechten Leiste der Produceransicht gibt es verschiedene Reiter mit Informationen zum Meeting.&lt;/p>
&lt;p>&lt;strong>Staus und Leistung&lt;/strong>
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/f7/b4/682e83895ce9f200ab5ac39ac71a.png" alt="image" />
&lt;/p>
&lt;p>&lt;strong>Frage und Antwort&lt;/strong>
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/a1/7f/0480d1a4803275ff6bf54c33ee7d.png" alt="image" />
&lt;/p>
&lt;p>Teilnehmer können hier Fragen stellen und Producer können diese privat beantworten. ist eine Frage/Antwort für alle Teilnehmer interessant, dann kann der Producer die Frage (samt Antwort) veröffentlichen und so allen zugänglich machen.&lt;/p>
&lt;p>&lt;strong>Besprechungsnotizen&lt;/strong>
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/fd/e0/e32cf8e417e651d169c58429f096.png" alt="image" />
&lt;/p>
&lt;p>Die Notizen werden wie aus Meetings bekannt, über die &lt;strong>Wiki&lt;/strong>-Funktion abgewickelt.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/3b/8d/b3586959ca1eae5b1ac8e13fbd28.png" alt="image" />
&lt;/p>
&lt;p>Es gibt eine rudimentäre Struktur und Formatierung der Inhalte für die Teilnehmer. Die Notizen können nur vom Producer erstellt werde und sind sofort für die Teilnehmer sichtbar.&lt;/p>
&lt;p>&lt;strong>Besprechungschat (nur Producer)&lt;/strong>
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/0f/70/9958f28b3b7097bb4ab90c9bdea9.png" alt="image" />
&lt;/p>
&lt;p>Der Chat ist nur für Producer und kann nicht von Teilnehmern eingesehen werden. Teilnehmer können nur über die Frage&amp;amp;Antwort Funktion interagieren. Eine Interaktion unter Teilnehmern ist ausgeschlossen.&lt;/p>
&lt;p>&lt;strong>Kontakte&lt;/strong>
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/ea/82/37c4fed8fd46d385cb147ff2beea.png" alt="image" />
&lt;/p>
&lt;p>Hier werden alle Producer aufgelistet. Teilnehmer sind hier nicht sichtbar.&lt;/p>
&lt;p>&lt;strong>Geräteeinstellungen&lt;/strong>
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/7c/96/72cda81685fc537748743d3c728b.png" alt="image" />
&lt;/p>
&lt;p>Hier kann das Audio und Webcam Setup (Producer) verändert werden. Es können auch nachträglich die Live-Untertitel abgeschaltet werden.&lt;/p>
&lt;p>&lt;strong>Besprechungsdetails&lt;/strong>
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/ae/91/35229cd210d3e0a78c1d85c86fdc.png" alt="image" />
&lt;/p>
&lt;p>Wie in jedem Meeting werden auch hier die Einwahlinformationen für das Meeting angezeigt. &lt;strong>Hinweis&lt;/strong>: Diese Einladung ist nur für Producer und nicht für Teilnehmer geeignet!&lt;/p>
&lt;h2 id="live-event-teilnehmen">Live Event teilnehmen&lt;/h2>
&lt;p>Die Teilnahme an einem Live Event kann mit einem Browser oder Microsoft Teams Client durchgeführt werden. &lt;a href="https://support.office.com/en-us/article/get-started-with-microsoft-teams-live-events-d077fec2-a058-483e-9ab5-1494afda578a#bkmk_systemreq" target="_blank">Hier findet ihr die Systemanforderungen&lt;/a>. Mit dem Teilnehmerlink kommt man auf eine Website, welcher dem normalen Meeting Beitritt sehr ähnelt. Über “Watch on the web instead” kann man über alle modernen Browser teilnehmen, &lt;strong>ohne extra Software&lt;/strong> zu installieren.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/e8/35/6dff415f591f0826a8bf5079af22.png" alt="image" />
&lt;/p>
&lt;p>Wenn man über ein Teams Account (Azure AD) verfügt, dann kann dieser genutzt werden oder ihr tretet anonym bei.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/72/c8/8f25cd3f1b5709a4ccd1c67a5662.png" alt="image" />
&lt;/p>
&lt;p>Nach dem Beitritt seht ihr den aktuell geteilten Inhalt. Die Ansicht ähnelt einem normalen Meeting. Der Teilnehmer kann aber jederzeit Pause machen oder sogar zurückspulen.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/05/44/08f69ff629f49bb9575a3e8b9877.png" alt="image" />
&lt;/p>
&lt;p>Über die Einstellungen im Wiedergabefenster können die optionalen Untertitel eingeschaltet werden.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/7a/b0/faa02c02b5954f419add7b4062ed.png" alt="image" />
&lt;/p>
&lt;p>Die Auswahl entspricht den Einstellungen, welche zum Setup des Live Events gemacht wurden.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/6b/23/64d506172093d1d548651e196cf7.png" alt="image" />
&lt;/p>
&lt;p>Hier sehen wir den englischen Untertitel.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/3e/06/7ed21732fddde7c957f6f80546f8.png" alt="image" />
&lt;/p>
&lt;p>&lt;strong>Frage &amp;amp; Antwort&lt;/strong>&lt;/p>
&lt;p>Hier haben wir die Teilnehmersicht der Q&amp;amp;A Funktion. Der Teilnehmer kann seine Fragen stellen und bekommt gegebenenfalls Antworten vom Producer Team. Der Teilnehmer kann sich für die Frage einen Namen geben oder aber anonym schreiben.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/c0/a4/e6b5913a66625c2c1694ba79a45f.png" alt="image" />
&lt;/p>
&lt;p>Die Fragen können weiter “verfeinert” werden.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/c0/4c/b88e37179c72e0a7061ba2cc30e1.png" alt="image" />
&lt;/p>
&lt;p>Hier sehen wir die &lt;strong>Producer Ansicht&lt;/strong> für die gestellt Frage. Die Frage kann ignoriert oder veröffentlicht werden (sichtbar für alle Teilnehmer).
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/4a/98/1319962eff3a9e5bfe035142986e.png" alt="image" />
&lt;/p>
&lt;p>Wird die Frage (inclusive Antwort) veröffentlicht, dann wird sie im Bereich “Featured” angezeigt. Hier gibt es die Möglichkeit für die Teilnehmer eine Frage zu “liken” und damit Feedback in die Runde zu geben.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/04/16/bb6555a4643831bcce9978389962.png" alt="image" />
&lt;/p>
&lt;p>Ist das Live Event beendet, dann wird es entsprechend im Stream angezeigt.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/d5/0e/b3240338b8edccf309afc95a562d.png" alt="image" />
&lt;/p>
&lt;h2 id="zusammenfassung">Zusammenfassung&lt;/h2>
&lt;p>Live Events sind eine sehr spezielle Form von Meetings in Microsoft 365. Der Einsatz macht nur in wenigen Szenarien Sinn, aber es ist wichtig, diese Option zu kennen. Besonders mit vielen “Meeting” Anfängern kann es die Situation vereinfachen, wenn eventuell zwei Meetings aufgesetzt werden. Ein Live Meeting für den Transport der Inhalte mit absoluter Kontrolle über die Präsentation ohne störende Zwischenrufe und ein anschließendes Ad-Hoc Q&amp;amp;A Meeting im normalen Teams Meeting Modus, damit jeder sprechen kann und sich auch per Video präsentiert.&lt;/p></description></item><item><title>Is Microsoft Teams a remote support tool?</title><link>https://marcoscheel.de/post/2020/03/613300443898068992-is-microsoft-teams-a-remote-support-tool/</link><pubDate>Sun, 22 Mar 2020 14:54:41 +0000</pubDate><guid>https://marcoscheel.de/post/2020/03/613300443898068992-is-microsoft-teams-a-remote-support-tool/</guid><description>&lt;p>My buddy &lt;a href="https://twitter.com/okieselb" target="_blank">Oliver Kieselbach&lt;/a> did a &lt;a href="https://oliverkieselbach.com/2020/03/03/quick-assist-the-built-in-remote-control-in-windows-10/" target="_blank">blog post about the capabilities of Microsoft Quick Assist&lt;/a> (as part of the current operation system). In his post he raised the question if Microsoft Teams is not enough for this kind of IT support scenarios. Check out his blog to see it live in action and what the biggest shortcoming is. Microsoft Teams is not a good option for anything &lt;a href="https://en.wikipedia.org/wiki/User_Account_Control" target="_blank">UAC&lt;/a> related. Even without the so called &lt;a href="https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation" target="_blank">secure desktop&lt;/a> feature Microsoft Teams will not allow the support staff to enter admin credentials if needed. I also would suggest (for the most customers) to pick a proper IT support tool for these scenarios.&lt;/p>
&lt;p>Microsoft Teams is the hub for teamwork, but that doesn’t mean you could not support your colleagues, if they are experiencing non admin related issues. But first things first, we should check, if your tenant settings are ready to allow remote control during a desktop sharing session. In quite a few customer environments I’ve noticed that remote sharing is restricted or completely disabled.&lt;/p>
&lt;p>Desktop sharing and remote control is configured through the tenant meeting policies. Check out your teams admin center:
Meeting policies - Pick a policy (”Global - Org Wide Default”) - Content sharing
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/bc/3f/d50611157e32b0a4692f0f61c999.png" alt="image" />
&lt;/p>
&lt;p>Ensure that “Screen sharing mode“ is set to “Entire screen” (1) otherwise remote control will be limited to a single window. I’ve seen people struggle using the single app sharing mode more than once. For a remote support scenario please enable “Allow a participant to give or request control” (2)! If your users are asking for support from a valuable and skilled colleague, don’t waste their time yelling what button to press next. The last option needs a decision, if you want to allow the same privilege to be granted for people outside of your organization. I’m a fan of enabling “Allow an external participant to give or request control” (3), because I’m often the external user trying to help, but please align with your corporate security requirements. By the way: Settings (1) and (2) are configured like shown by default in any tenant!&lt;/p>
&lt;h2 id="11">1:1&lt;/h2>
&lt;p>Now that we have setup the prerequisites let’s have a look at the user experience. In my scenario Luke is trying to organize a new funding round to order some spaceships. Now he tries to prepare a nice Excel to present at the next procurement meeting, but he is not happy with the visual display of one of his charts. He needs help from an expert and he is in contact with Leia (she is running the rebellion so she is awesome in Excel!). Luke is starting a chat to make his point:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/2e/65/97c816e91655fce21a096972278e.png" alt="image" />
&lt;/p>
&lt;p>To start the screen sharing in a 1:1 session you will find the icon for screen sharing (1) in the top right corner. Luke needs to start it and share the complete screen (2):&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/99/cd/901327ac292dedcdd50e5f74e696.png" alt="image" />
&lt;/p>
&lt;p>Leia will receive a request to accept the screen sharing session. You should only accept a request if you talked/chatted with the person! Otherwise you could end up seeing things you don’t want to see.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/ec/e1/7f9efec379d54aa4aee47d53b988.png" alt="image" />
&lt;/p>
&lt;p>If you started through chat the system will asked you if it is a good idea to add audio to the conversation. Normally this is a good idea. Especially if you are not willing to give control to the person you request help from.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/aa/a6/4700b5fe482f2153285b7150d708.png" alt="image" />
&lt;/p>
&lt;p>Because Leia is a busy employee and has lots of stuff to do she will request control, because the particular action to execute is hard to describe and maybe takes some poking around with various settings. So Leia requests to have control over the screen/application that was shared. In the far right part of the call control bar you will find the option to request control. If this option is missing, talk to your Teams admins! They didn’t execute all prerequisites as described above:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/56/a6/f5cd2e97da22706bf96369c32a92.png" alt="image" />
&lt;/p>
&lt;p>Luke will see the request at the top of the shared content and has the option to accept or deny sharing. Sometimes meeting participants accidently hit the button so think twice if this is what you want:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/8f/63/f45b450a86b2808a67802eb72ade.png" alt="image" />
&lt;/p>
&lt;p>Now comes a really impressive upgrade from previous Skype for Business based screen sharing. Both parties are represented by their Teams profile avatar (in my case the Office 365 profile pictures). You will always see what the other is pointing at or clicking.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/27/bc/b8cc8ce8fac0a50688b86ffe9ca1.png" alt="image" />
&lt;/p>
&lt;p>I often prefer in a support case that the requesting party will do all the clicks and I’m just advising what&amp;rsquo;s up next and where to find it on screen. With this solution I think it is a great learning opportunity and I can gently show where to click instead of yelling where not to click :)&lt;/p>
&lt;p>Here are the two screens side by side (Luke on the left vs Leia on the right):
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/32/e4/4f78d3573a3f6e45d7f1088c6ca1.png" alt="image" />
&lt;/p>
&lt;p>Leia fixed the request by switching to a logarithmic scale and Luke is happy and the session can be ended. Leia can click on “Stop control”:&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/07/f0/111f3e79ac5eb527bac7d3cb99c3.png" alt="image" />
&lt;/p>
&lt;p>Or Luke can end the session (”Cancel Control”):&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/4f/51/98b5acfe840cb747dd4e04dd349b.png" alt="image" />
&lt;/p>
&lt;p>Just for completeness this is the way to give control if the supported doesn’t find the “Request control” option:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/ba/1c/246d93360caaa3a2f4e1bb067d16.png" alt="image" />
&lt;/p>
&lt;h2 id="extra-meetings">Extra: Meetings&lt;/h2>
&lt;p>In a normal meeting everything is working alike, but the UX is looking a bit different. If you are in a scheduled meeting the share button is located in the call control bar:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/b8/89/d380248b3f190b88190355845c02.png" alt="image" />
&lt;/p>
&lt;p>If you select the icon a new screen will appear from the bottom of the teams app:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/01/05/0c0192329772299942cf3b11ff8f.png" alt="image" />
&lt;/p>
&lt;p>(1) Share the complete screen. If you have more than one screen, you can only share one at a time.
(2) Share a window.
(3) You can also upload a PowerPoint presentation, but this is beyond a remote control/support session.
(4) Open a whiteboard, but this is beyond a remote control/support session.
(5) While sharing your screen or an application also include audio (for example a Microsoft Stream video that you want to trim/edit) &lt;strong>Note&lt;/strong>: This option is only available in planed meetings and not 1:1 support session started from chat.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>The capabilities for remote support in Microsoft Teams are available and very useful. Thinks like the AAD picture next to the mouse cursor is a great addition and helping a lot. Is Teams a better remote support tool then Quick Assist?&lt;/p>
&lt;p>&lt;strong>For your IT staff: No!&lt;/strong> A proper Remote Assist tool will be a better choice.&lt;/p>
&lt;p>&lt;strong>For your typical Information Worker: Yes!&lt;/strong> Sharing your desktop to get support from a colleague is a quick and proper solution! No need to walk to someone’s desk and touch a maybe filthy mouse/keyboard. Not always do you have the right person in the same building.&lt;/p>
&lt;p>I definitely know that Microsoft Quick Assist is not a proper collaboration solution. Try to co-author a Excel document for the next #FreeCookiesFriday campaign ;)
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/9b/74/f394deeb8e5daa336b59a85b650b.png" alt="image" />
&lt;/p></description></item><item><title>Microsoft Teams - Known issues... no more!?</title><link>https://marcoscheel.de/post/2019/12/189806058922-microsoft-teams-known-issues-no-more/</link><pubDate>Sun, 22 Dec 2019 08:06:03 +0000</pubDate><guid>https://marcoscheel.de/post/2019/12/189806058922-microsoft-teams-known-issues-no-more/</guid><description>&lt;p>Microsoft is documenting a list of things (about Microsoft Teams) that are not working as expected by Microsoft or customers. The list has been around for quite some time. New things are added, but I noticed things on the list that are clearly working as of this writing are not removed. So let’s have a look together and maybe you support my pull request.&lt;/p>
&lt;p>The article: &lt;a href="https://docs.microsoft.com/en-us/microsoftteams/known-issues" target="_blank">Known issues for Microsoft Teams&lt;/a>&lt;/p>
&lt;p>My pull request:&lt;/p>
&lt;p>&lt;a href="https://github.com/MicrosoftDocs/OfficeDocs-SkypeForBusiness/pull/3686" target="_blank">Known issues that are no longer known issues&lt;/a>&lt;/p>
&lt;p>Audit logs may report an incorrect username as initiator when someone has been removed from a Team&lt;/p>
&lt;blockquote>
&lt;p>Teams team is a modern group in AAD. When you add/remove a member through the Teams user interface, the flow knows exactly which user initiated the change, and the Audit log reflects the correct info. However, if a user adds/removes a member through AAD, the change is synced to the Teams backend without telling Teams who initiated the action. Microsoft Teams picks the first owner of team as the initiator, which is eventually reflected in the Audit log as well.
&lt;a href="https://docs.microsoft.com/en-us/microsoftteams/known-issues#administration" target="_blank">https://docs.microsoft.com/en-us/microsoftteams/known-issues#administration&lt;/a>&lt;/p>
&lt;p>Related Issue: [Audit logs may report an incorrect username as initiator when someone has been removed from a Team&lt;/p>
&lt;p>](&lt;a href="https://docs.microsoft.com/en-us/microsoftteams/known-issues#teams" target="_blank">https://docs.microsoft.com/en-us/microsoftteams/known-issues#teams&lt;/a>)&lt;/p>
&lt;/blockquote>
&lt;p>I validated group membership edits from the new Microsoft Admin Portal (&lt;a href="https://admin.microsoft.com" target="_blank">https://admin.microsoft.com&lt;/a>) and from the Azure Portal (&lt;a href="https://portal.azure.com" target="_blank">https://portal.azure.com&lt;/a>). In both cases the audit logs showed the correct user. In both cases I used my &lt;em>cloudadmin&lt;/em> account that is not part of the team and the audit logs documented the operation as the executing user.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/f8/43/83112170347dd6c8e493bcb546d6.png" alt="image" />
&lt;/p>
&lt;h2 id="heading">&lt;/h2>
&lt;p>Unable to delete connectors as a team owner&lt;/p>
&lt;blockquote>
&lt;p>Attempting to delete a connector as an owner, that can otherwise add a connector, while &amp;ldquo;Allow members to create, update, and remove connectors&amp;rdquo; is disabled throws an error indicating the user does not have permission to do so.
Source: &lt;a href="https://docs.microsoft.com/en-us/microsoftteams/known-issues#apps" target="_blank">https://docs.microsoft.com/en-us/microsoftteams/known-issues#apps&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>I tested this in my lab environment in various combinations and I did not run into this issue. For example:&lt;/p>
&lt;ol>
&lt;li>Leia created a team and added Luke as a member&lt;/li>
&lt;li>Luke added an Incoming Webhook as a connector&lt;/li>
&lt;li>Leia didn’t like Luke’s webhook so she decided to remove the member permission to configure connectors for the team&lt;/li>
&lt;li>Luke wanted to add another connector, but the option is now missing from his context menu for the channel&lt;/li>
&lt;li>Leia deleted the Incoming Webhook that look created without a problem&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/2d/e1/a50e6f5191b9f66082106ad855a9.png" alt="image" />
&lt;/li>
&lt;/ol>
&lt;h2 id="heading-1">&lt;/h2>
&lt;p>Planner on single sign-on (SSO) build&lt;/p>
&lt;blockquote>
&lt;p>SSO does not apply to Planner. You will have to sign in again the first time you use Planner on each client.
Source: &lt;a href="https://docs.microsoft.com/en-us/microsoftteams/known-issues#authentication" target="_blank">https://docs.microsoft.com/en-us/microsoftteams/known-issues#authentication&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>I’m using planner within Microsoft Teams on a weekly basis (not on a daily basis as some of my colleagues would like me to use it) and it is working as expected.&lt;/p>
&lt;h2 id="heading-2">&lt;/h2>
&lt;p>Wiki not created for channels created by guests&lt;/p>
&lt;blockquote>
&lt;p>When a guest creates a new channel, the Wiki tab is not created. There isn&amp;rsquo;t a way to manually attach a Wiki tab to the channel.
Source: &lt;a href="https://docs.microsoft.com/en-us/microsoftteams/known-issues#guest-access" target="_blank">https://docs.microsoft.com/en-us/microsoftteams/known-issues#guest-access&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>I did check this in my lab tenant using my work account as a guest.&lt;/p>
&lt;ol>
&lt;li>Luke created a team&lt;/li>
&lt;li>Luke added my work account as a guest to the team&lt;/li>
&lt;li>Luke configured the teams guest permission to allow channel creation&lt;/li>
&lt;li>I opened teams in my browser and switch to the lab tenant (friends don’t let friends switch tenants in the real teams app, even with fast tenant switching!)&lt;/li>
&lt;li>I opened the team and created a new channel&lt;/li>
&lt;li>Wiki tab was present and working&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/3e/11/d0a786064bfe8c258dfebb87d7c1.png" alt="image" />
&lt;/li>
&lt;/ol>
&lt;h2 id="heading-3">&lt;/h2>
&lt;p>Teams Planner integration with Planner online&lt;/p>
&lt;blockquote>
&lt;p>Tasks buckets in Planner do not show up in Planner online experience.
Source: &lt;a href="https://docs.microsoft.com/en-us/microsoftteams/known-issues#tabs" target="_blank">https://docs.microsoft.com/en-us/microsoftteams/known-issues#tabs&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>This is core feature of Planner and the issue was created 2+ year ago. It is just working as expected.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/cc/35/0e14e109b8d10412d2de053d726d.png" alt="image" />
&lt;/p>
&lt;h2 id="heading-4">&lt;/h2>
&lt;p>Unable to move, delete or rename files after editing&lt;/p>
&lt;blockquote>
&lt;p>After a file is edited in Teams it cannot be moved or renamed or deleted immediately
Source: &lt;a href="https://docs.microsoft.com/en-us/microsoftteams/known-issues#teams" target="_blank">https://docs.microsoft.com/en-us/microsoftteams/known-issues#teams&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>I tried this with a mix of accounts and apps (Teams app and Teams in the browser) today. I could not reproduce it. It is still a “common” issue SharePoint Online but I never experienced it or got clients reporting this issue regarding Teams.&lt;/p>
&lt;h2 id="heading-5">&lt;/h2>
&lt;p>A team name with an &amp;amp; symbol in it breaks connector functionality&lt;/p>
&lt;blockquote>
&lt;p>When a team name is created with the &amp;amp; symbol, connectors within the Team/Group cannot be established.
Source: &lt;a href="https://docs.microsoft.com/en-us/microsoftteams/known-issues#teams" target="_blank">https://docs.microsoft.com/en-us/microsoftteams/known-issues#teams&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>I created two teams:&lt;/p>
&lt;ol>
&lt;li>Good &amp;amp; Bad Characters&lt;/li>
&lt;li>Only Good Characters&lt;/li>
&lt;/ol>
&lt;p>The connector option for both Teams showed up at about the same time. Maybe it is related to the special character but it took quite some time until the Exchange Online mailbox was provisioned. Longer than any test today for all the other use cases. But at the end I had no problems managing connectors for a Team with an “&amp;amp;” or without it in the name.&lt;/p>
&lt;p>I find the Microsoft article in general very valuable and I noticed a few other things I want to talk about in the future. So stay tuned.&lt;/p></description></item><item><title>Manage Microsoft Teams membership with Azure AD Access Review</title><link>https://marcoscheel.de/post/2019/08/186728523052-manage-microsoft-teams-membership-with-azure-ad/</link><pubDate>Fri, 02 Aug 2019 19:41:30 +0000</pubDate><guid>https://marcoscheel.de/post/2019/08/186728523052-manage-microsoft-teams-membership-with-azure-ad/</guid><description>&lt;p>This post will introduce you to the Azure AD Access Review feature. With the introduction of modern collaboration through Microsoft 365 and Microsoft Teams being the main tool it is important to mange who is a member to the underlying Office 365 Group (Azure AD Group).&lt;/p>
&lt;p>&amp;lt;DE&amp;gt;Für eine erhöhte Reichweite wird der Post heute auf Englisch erscheinen. Es geht um die Einführung von Access Reviews (Azure AD) im Zusammenspiel mit Microsoft Teams. Das Verwalten der Mitgliedschaft eines Teams wird durch den Einsatz von diesem Feature unterstützt und stellt die Besitzer weiter in den Mittelpunkt. Sollte großes Interesse an einer komplett deutschen Version bestehen, dann lasst es mich bitte wissen.&amp;lt;/DE&amp;gt;&lt;/p>
&lt;p>Microsoft has great &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/governance/access-reviews-overview" target="_blank">resources&lt;/a> to get started on a technical level. The feature enables a set of people to review another set of people. Azure AD is leveraging this capability (all under the bigger umbrella called &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/governance/identity-governance-overview" target="_blank">Identity Governance)&lt;/a> on two assets: Azure AD Groups and Azure AD Apps. Microsoft Teams as a hub for collaboration is build on top of Office 365 Groups and so we will have a closer look at the Access Review part for Azure AD Groups.&lt;/p>
&lt;p>Each Office 365 Group (each Team) is build from a set of owners and members. With the open nature of Office 365, members can be employees, contractors, or people outside of the organization.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/76/bd/e538a30288a1511ad21a1fa8800e.png" alt="image" />
&lt;/p>
&lt;p>In our modern collaboration (Teams, SharePoint, &amp;hellip;) implementation we strongly recommend to leverage full self service group creation that is already built into the system. With this setup everyone is able to create and manage/own a group. Permanent user education is needed for everyone to understand the concept behind modern groups. Many organizations also have a strong set of internal rules that forces a so called information owner (could be equal to the owner of a group) to review who has access to their data. Most organization rely on the fact people are fulfilling their duties as demanded, but lets face it owners are just human beings that need to do their “real” job. With the introduction of Azure AD Access Review we can support these owner duties and make the process documented and easy to execute.&lt;/p>
&lt;p>AAD Access Review can do the following to support an up to date group membership:&lt;/p>
&lt;ul>
&lt;li>Setup an Access Review for an Azure AD Group&lt;/li>
&lt;li>Specify the duration (start date, recurrence, duration, &amp;hellip;)&lt;/li>
&lt;li>Specify who will do the review (owner, self, specific people, &amp;hellip;)&lt;/li>
&lt;li>Specify who will be reviewed (all members, guests, &amp;hellip;)&lt;/li>
&lt;li>Specify what will happen if the review is not executed (remove members, &amp;hellip;)&lt;/li>
&lt;/ul>
&lt;p>Before we start we need to talk about licensing. It is obvious that M365 E5 is the best SKU to start with ;) but if you are not that lucky, you need at least an Azure AD P2 license. It is not a “very” common license as it was only part of the EMS E5 SKU, but Microsoft started some time ago &lt;a href="https://www.microsoft.com/en-us/microsoft-365/blog/2019/01/02/introducing-new-advanced-security-and-compliance-offerings-for-microsoft-365/" target="_blank">really attractive license bundles&lt;/a>. Many orgs with strong security requirements will at some point hit a license SKU that will include AAD P2. For your trusty lab tenants start a EMS E5 trial to test these features today. To be precise only the accounts reviewing (executing the Access Review) need the license, at least this is my understanding and as always with licensing ask your usual licensing people to get the definitive answer.&lt;/p>
&lt;p>The setup of an Access Review (if not automated through &lt;a href="https://docs.microsoft.com/en-us/graph/api/resources/accessreviews-root?view=graph-rest-beta" target="_blank">MS Graph&lt;/a> Beta) is setup in the Azure Portal in the &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/governance/access-reviews-overview#onboard-access-reviews" target="_blank">identity governance blade&lt;/a> of AAD. To create our first Access Review we need to on-board to this feature.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/a3/ad/cecc7fb97787e08c4f87f978dbc0.png" alt="image" />
&lt;/p>
&lt;p>Please note we are looking at Access Review in the context of modern collaboration (groups created by Teams, SharePoint, Outlook, &amp;hellip;). Access Review can be used to review any AAD group that you use to grant access to a specific resource or keep a list of trusted users for an infrastructure piece of tech in Azure. The following information might not always be valid for your scenario!&lt;/p>
&lt;p>This is the first half of the screen we need to fill-out for a new Access Review:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/b8/37/a8885e7c2352530bc0dc64f242e6.png" alt="image" />
&lt;/p>
&lt;p>&lt;strong>Review name&lt;/strong>: This is a really important piece! The Review name will be the “only” visible clue for the reviewer once they get the email about the outstanding review. With self service setup and with the nature of how people name their groups we need to ensure people are understanding what they review. We try to automate the creation of the reviews so we put the review timing, the group name and the groups object id in the review name. The ID is helping during support if you send out 4000 Access Reviews and people ask why they got this email they can provide you with the ID and things get easier. For example: 2019-Q1 GRP New Order (af01a33c-df0b-4a97-a7de-c6954bd569ef)&lt;/p>
&lt;p>&lt;strong>Frequency&lt;/strong>: Also very important! You have to understand that an Access Review is somehow static. You could do a recurring review, but some information will be out of sync. For example the group could be renamed, but the title will not be updated and people might get confused about misleading information in the email that is send out. If you choose to let the owner of a group do the review, the owners will be “copied” to the Access Review config and not updated for future reviews. Technically this could be fixed by Microsoft, but as of now we ran into problems in the context of modern collaboration.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/43/67/e83f0e7133dbdea25ad0ab293014.png" alt="image" />
&lt;/p>
&lt;p>&lt;strong>Users&lt;/strong>: &amp;ldquo;Members of a group” is our choice for collaboration. The other option is “Assigned to an application” and not our focus. For a group we have the option to do a guest only review or review everybody as a member of a group. Based on organizational needs and information like the confidentiality we can make a decision. As a starting point it could be a good option to go with guests only because guests are not very well controlled in most environments. An employee at least has a contract and the general trust level should be higher.&lt;/p>
&lt;p>&lt;strong>Group&lt;/strong>: Select a group the review should apply to. The latest changes to the Access Review feature allowed to select multiple groups at once. From a collaboration perspective I would avoid it, because at the end of the creation process each group will have its own Access Review instance and the settings are no longer shared. Once again from a collab point of view we need some kind of automation because it is not feasible to create these reviews by an manual task in a foreseeable future.&lt;/p>
&lt;p>&lt;strong>Reviewers&lt;/strong>: The natural choice for an Office 365 Group (Team) is to go with the “Group owners” option. Especially if we automate the process and don’t have an extra database to lookup who is the information owner. For static groups or highly confidential groups the option “Selected users” could make sense. An interesting option is also the last one called “Members (self)”. This option will &amp;ldquo;force” each member to take a decision if the user is any longer part of this project, team or group. We at &lt;a href="https://glueckkanja.com" target="_blank">Glück &amp;amp; Kanja&lt;/a> are currently thinking about doing this for some of our internal clients teams. Most of our groups are public and accessible by most of the employee, but membership will document some kind of current involvement for the client represented by the group. This could also naturally reduce the number of teams that show up in your Microsoft Teams client app. As mentioned earlier at the moment it seems that the option “Group owners” will be resolved once the Access Review starts and the instance of the review is then fixed. So any owner change could be not reflected in future instances in recurring reviews. Hopefully this will be fixed by Microsoft.&lt;/p>
&lt;p>&lt;strong>Program&lt;/strong>: This is a logical grouping of access reviews. For example we could add all collaboration related reviews to one program vs administration reviews with a more static route.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/81/2b/50d2ee022a8bf0412503f18d974d.png" alt="image" />
&lt;/p>
&lt;p>More advanced settings are collapsed, but should definitely be reviews.&lt;/p>
&lt;p>&lt;strong>Upon completion settings&lt;/strong>: Allows to automatically apply the review results. I would suggest to try this settings, because it will not only document the review but take the required action on the membership. If group owners are not aware what these Access Review email are, then we talk about potential loss of access for members not reviewed, but at the end that is what we want. People need to take this part of identity governance for real and take care of their data. Any change by the system is document (Audit log of the group) and can be reverse manually. If the system is not executing the results of the review, someone must look up results regularly and then ensure to remove the users based on the outcome. If you go for Access Review, I strongly recommend on automatically applying the results (after you own internal tests).&lt;/p>
&lt;p>Lets take a look on the created Access Review.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/8c/9d/2372c6b805906d8da4d8cedad814.png" alt="image" />
&lt;/p>
&lt;p>&lt;strong>Azure Portal&lt;/strong>: This is an overview for the admin (non recurring access review).
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/28/60/d0b7362d036eb07d9b4310cbf592.png" alt="image" />
&lt;/p>
&lt;p>&lt;strong>Email&lt;/strong>: As you can see the prominent Review name is what is standing out to the user. The group name (also highlighted red) is buried within all other text.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/b4/b4/92ec7111904b2875457c90a4959f.png" alt="image" />
&lt;/p>
&lt;p>&lt;strong>Click on “Start Review” from the email&lt;/strong>: The user now can take action based on recommendations (missing in my lab tenant due to inactivity of my lab users).
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/c8/31/d612013164d7119004bbc1e078f5.png" alt="image" />
&lt;/p>
&lt;p>&lt;strong>Take Review&lt;/strong>: Accept 6 users.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/b3/14/91e4c324a1df66f16ebb9bfed94d.png" alt="image" />
&lt;/p>
&lt;p>&lt;strong>Review Summary&lt;/strong>: This is the summary if the owner has taken all actions.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/1e/a2/61923832e72d07f5d077100ba3ee.png" alt="image" />
&lt;/p>
&lt;p>&lt;strong>Azure Portal&lt;/strong>: Audit log information for the group.&lt;/p>
&lt;p>After the user completed the review the system didn’t make a change to the group. Based on the configuration if actions should be automatically applied the results apply at the end of the review process! Until this time the owners can change their mind. Once the review period is over the system will apply the needed changes.&lt;/p>
&lt;p>I really love this feature in the context of modern collaboration. The process of keeping a current list of involved members in a team is a big benefit for productivity and security. The “need to know” principal is supported by a technical implementation “free of cost” (a mentioned everyone should have AAD P2 through some SKU 😎).&lt;/p>
&lt;p>Our GK O365 Lifecycle tool was extended to allow the creation of Access Reviews through the Microsoft Graph based on the Group/Team classification. Once customers read or get a demo about this feature and own the license we immediately start a POC implementation. If our tool is already in place it is only a matter of some JSON configuration to be up and running.&lt;/p></description></item><item><title>App Permissions für Microsoft Graph Calls automatisiert einrichten</title><link>https://marcoscheel.de/post/2019/07/186138885112-app-permissions-f%C3%BCr-microsoft-graph-calls/</link><pubDate>Mon, 08 Jul 2019 11:47:21 +0000</pubDate><guid>https://marcoscheel.de/post/2019/07/186138885112-app-permissions-f%C3%BCr-microsoft-graph-calls/</guid><description>&lt;p>Für unser Glück &amp;amp; Kanja Lifecycle Tool setze ich im Schwerpunkt auf Microsoft Graph Calls. Für ein sauberes Setup habe ich mittlerweile ein Script. Es nutzt die &lt;a href="https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-2.0.0" target="_blank">PowerShell AZ&lt;/a> und die &lt;a href="https://docs.microsoft.com/en-US/cli/azure/install-azure-cli?view=azure-cli-latest" target="_blank">Azure CLI&lt;/a>. Besonders beim Erstellen einer Azure AD App (genauer Berechtigen und Granten) ist die Azure CLI noch ein Stück besser bzw. umfangreicher als die AZ PowerShell.&lt;/p>
&lt;p>Die Lifecycle App arbeitet mit AD Settings und Groups. Erweiterte Funktionen setzen auf &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/governance/access-reviews-overview" target="_blank">Access Reviews&lt;/a> Feature aus dem AAD P2 Lizenzset. Diese Graph Berechtigungen setze ich direkt per CLI Script:&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">az ad app permission add --id $adapp.ApplicationId --api 00000003-0000-0000-c000-000000000000 --api-permissions 19dbc75e-c2e2-444c-a770-ec69d8559fc7=Role #msgraph Directory.ReadWrite.All
az ad app permission add --id $adapp.ApplicationId --api 00000003-0000-0000-c000-000000000000 --api-permissions 62a82d76-70ea-41e2-9197-370581804d09=Role #msgraph Group.ReadWrite.All
az ad app permission add --id $adapp.ApplicationId --api 00000003-0000-0000-c000-000000000000 --api-permissions ef5f7d5c-338f-44b0-86c3-351f46c8bb5f=Role #msgraph AccessReview.ReadWrite.All
az ad app permission add --id $adapp.ApplicationId --api 00000003-0000-0000-c000-000000000000 --api-permissions 60a901ed-09f7-4aa5-a16e-7dd3d6f9de36=Role #msgraph ProgramControl.ReadWrite.All
&lt;/code>&lt;/pre>
&lt;p>Die Azure CLI kann dann auch gleich noch den Admin Grant erledigen (wenn man nicht in der Azure Cloud Shell läuft!):&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">az ad app permission admin-consent --id $adapp.ApplicationId
&lt;/code>&lt;/pre>
&lt;p>Hier ein Beispiel, wie das Ergebnis dann im Azure AD Portal aussieht:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/94/b8/3d8dde919b99d6647aa15d89d175.png" alt="image" />
&lt;/p>
&lt;p>Wer nun die Guid für seine Berechtigung sucht, kann ganz einfach mit diesem Befehlt (&lt;a href="https://docs.microsoft.com/en-us/powershell/azure/active-directory/install-adv2?view=azureadps-2.0" target="_blank">Azure Active Directory PowerShell 2.0&lt;/a>) auf das ständig wachsende Set an App Permissions zugreifen:&lt;/p>
&lt;pre>&lt;code class="language-PowerShell">(Get-AzureADServicePrincipal -filter &amp;quot;DisplayName eq 'Microsoft Graph'&amp;quot;).AppRoles | Select Id, Value | Sort Value
Id Value
-- -----
d07a8cc0-3d51-4b77-b3b0-32704d1f69fa AccessReview.Read.All
ef5f7d5c-338f-44b0-86c3-351f46c8bb5f AccessReview.ReadWrite.All
18228521-a591-40f1-b215-5fad4488c117 AccessReview.ReadWrite.Membership
134fd756-38ce-4afd-ba33-e9623dbe66c2 AdministrativeUnit.Read.All
5eb59dd3-1da2-4329-8733-9dabdc435916 AdministrativeUnit.ReadWrite.All
1bfefb4e-e0b5-418b-a88f-73c46d2cc8e9 Application.ReadWrite.All
18a4783c-866b-4cc7-a460-3d5e5662c884 Application.ReadWrite.OwnedBy
b0afded3-3588-46d8-8b3d-9842eff778da AuditLog.Read.All
798ee544-9d2d-430c-a058-570e29e34338 Calendars.Read
ef54d2bf-783f-4e0f-bca1-3210c0444d99 Calendars.ReadWrite
a7a681dc-756e-4909-b988-f160edc6655f Calls.AccessMedia.All
284383ee-7f6e-4e40-a2a8-e85dcb029101 Calls.Initiate.All
4c277553-8a09-487b-8023-29ee378d8324 Calls.InitiateGroupCall.All
f6b49018-60ab-4f81-83bd-22caeabfed2d Calls.JoinGroupCall.All
fd7ccf6b-3d28-418b-9701-cd10f5cd2fd4 Calls.JoinGroupCallAsGuest.All
7b2449af-6ccd-4f4d-9f78-e550c193f0d1 ChannelMessage.Read.All
4d02b0cc-d90b-441f-8d82-4fb55c34d6bb ChannelMessage.UpdatePolicyViolation.All
6b7d71aa-70aa-4810-a8d9-5d9fb2830017 Chat.Read.All
294ce7c9-31ba-490a-ad7d-97a7d075e4ed Chat.ReadWrite.All
7e847308-e030-4183-9899-5235d7270f58 Chat.UpdatePolicyViolation.All
089fe4d0-434a-44c5-8827-41ba8a0b17f5 Contacts.Read
6918b873-d17a-4dc1-b314-35f528134491 Contacts.ReadWrite
1138cb37-bd11-4084-a2b7-9f71582aeddb Device.ReadWrite.All
7a6ee1e7-141e-4cec-ae74-d9db155731ff DeviceManagementApps.Read.All
dc377aa6-52d8-4e23-b271-2a7ae04cedf3 DeviceManagementConfiguration.Read.All
2f51be20-0bb4-4fed-bf7b-db946066c75e DeviceManagementManagedDevices.Read.All
58ca0d9a-1575-47e1-a3cb-007ef2e4583b DeviceManagementRBAC.Read.All
06a5fe6d-c49d-46a7-b082-56b1b14103c7 DeviceManagementServiceConfig.Read.All
7ab1d382-f21e-4acd-a863-ba3e13f7da61 Directory.Read.All
19dbc75e-c2e2-444c-a770-ec69d8559fc7 Directory.ReadWrite.All
7e05723c-0bb0-42da-be95-ae9f08a6e53c Domain.ReadWrite.All
7c9db06a-ec2d-4e7b-a592-5a1e30992566 EduAdministration.Read.All
9bc431c3-b8bc-4a8d-a219-40f10f92eff6 EduAdministration.ReadWrite.All
4c37e1b6-35a1-43bf-926a-6f30f2cdf585 EduAssignments.Read.All
6e0a958b-b7fc-4348-b7c4-a6ab9fd3dd0e EduAssignments.ReadBasic.All
0d22204b-6cad-4dd0-8362-3e3f2ae699d9 EduAssignments.ReadWrite.All
f431cc63-a2de-48c4-8054-a34bc093af84 EduAssignments.ReadWriteBasic.All
e0ac9e1b-cb65-4fc5-87c5-1a8bc181f648 EduRoster.Read.All
0d412a8c-a06c-439f-b3ec-8abcf54d2f96 EduRoster.ReadBasic.All
d1808e82-ce13-47af-ae0d-f9b254e6d58a EduRoster.ReadWrite.All
38c3d6ee-69ee-422f-b954-e17819665354 ExternalItem.ReadWrite.All
01d4889c-1287-42c6-ac1f-5d1e02578ef6 Files.Read.All
75359482-378d-4052-8f01-80520e7db3cd Files.ReadWrite.All
5b567255-7703-4780-807c-7be8301ae99b Group.Read.All
62a82d76-70ea-41e2-9197-370581804d09 Group.ReadWrite.All
e321f0bb-e7f7-481e-bb28-e3b0b32d4bd0 IdentityProvider.Read.All
90db2b9a-d928-4d33-a4dd-8442ae3d41e4 IdentityProvider.ReadWrite.All
6e472fd1-ad78-48da-a0f0-97ab2c6b769e IdentityRiskEvent.Read.All
db06fb33-1953-4b7b-a2ac-f1e2c854f7ae IdentityRiskEvent.ReadWrite.All
dc5007c0-2d7d-4c42-879c-2dab87571379 IdentityRiskyUser.Read.All
656f6061-f9fe-4807-9708-6a2e0934df76 IdentityRiskyUser.ReadWrite.All
19da66cb-0fb0-4390-b071-ebc76a349482 InformationProtectionPolicy.Read.All
810c84a8-4a9e-49e6-bf7d-12d183f40d01 Mail.Read
e2a3a72e-5f79-4c64-b1b1-878b674786c9 Mail.ReadWrite
b633e1c5-b582-4048-a93e-9f11b44c7e96 Mail.Send
40f97065-369a-49f4-947c-6a255697ae91 MailboxSettings.Read
6931bccd-447a-43d1-b442-00a195474933 MailboxSettings.ReadWrite
658aa5d8-239f-45c4-aa12-864f4fc7e490 Member.Read.Hidden
3aeca27b-ee3a-4c2b-8ded-80376e2134a4 Notes.Read.All
0c458cef-11f3-48c2-a568-c66751c238c0 Notes.ReadWrite.All
c1684f21-1984-47fa-9d61-2dc8c296bb70 OnlineMeetings.Read.All
b8bb2037-6e08-44ac-a4ea-4674e010e2a4 OnlineMeetings.ReadWrite.All
0b57845e-aa49-4e6f-8109-ce654fffa618 OnPremisesPublishingProfiles.ReadWrite.All
b528084d-ad10-4598-8b93-929746b4d7d6 People.Read.All
246dd0d5-5bd0-4def-940b-0421030a5b68 Policy.Read.All
79a677f7-b79d-40d0-a36a-3e6f8688dd7a Policy.ReadWrite.TrustFramework
eedb7fdd-7539-4345-a38b-4839e4a84cbd ProgramControl.Read.All
60a901ed-09f7-4aa5-a16e-7dd3d6f9de36 ProgramControl.ReadWrite.All
230c1aed-a721-4c5d-9cb4-a90514e508ef Reports.Read.All
5e0edab9-c148-49d0-b423-ac253e121825 SecurityActions.Read.All
f2bf083f-0179-402a-bedb-b2784de8a49b SecurityActions.ReadWrite.All
bf394140-e372-4bf9-a898-299cfc7564e5 SecurityEvents.Read.All
d903a879-88e0-4c09-b0c9-82f6a1333f84 SecurityEvents.ReadWrite.All
a82116e5-55eb-4c41-a434-62fe8a61c773 Sites.FullControl.All
0c0bf378-bf22-4481-8f81-9e89a9b4960a Sites.Manage.All
332a536c-c7ef-4017-ab91-336970924f0d Sites.Read.All
9492366f-7969-46a4-8d15-ed1a20078fff Sites.ReadWrite.All
21792b6c-c986-4ffc-85de-df9da54b52fa ThreatIndicators.ReadWrite.OwnedBy
fff194f1-7dce-4428-8301-1badb5518201 TrustFrameworkKeySet.Read.All
4a771c9a-1cf2-4609-b88e-3d3e02d539cd TrustFrameworkKeySet.ReadWrite.All
405a51b5-8d8d-430b-9842-8be4b0e9f324 User.Export.All
09850681-111b-4a89-9bed-3f2cae46d706 User.Invite.All
df021288-bdef-4463-88db-98f22de89214 User.Read.All
741f803b-c850-494e-b5df-cde7c675a1ca User.ReadWrite.All
&lt;/code>&lt;/pre></description></item><item><title>Microsoft Graph, Postman und Wie bekomme ich ein App Only Token?</title><link>https://marcoscheel.de/post/2019/07/185978935612-microsoft-graph-postman-und-wie-bekomme-ich-ein/</link><pubDate>Mon, 01 Jul 2019 15:06:23 +0000</pubDate><guid>https://marcoscheel.de/post/2019/07/185978935612-microsoft-graph-postman-und-wie-bekomme-ich-ein/</guid><description>&lt;p>Der Microsoft Graph ist das “Schweizer Taschenmesser” für alle im Microsoft 365 Umfeld. Eine API für “alle” Dienste und noch besser immer das gleiche Authentifizierungsmodel. Im &lt;a href="https://hairlessinthecloud.com" target="_blank">Hairless in the Cloud&lt;/a> Podcast Nummer &lt;a href="https://anchor.fm/hairlessinthecloud/episodes/018---Wir-kennen-die-Passwrter-Eurer-User-und-Microsoft-Graph-e42di4/a-aff2ff" target="_blank">18&lt;/a> habe ich meine Eindrücke zum Microsoft Graph schon geschildert. Der Graph Explorer auf der Website ist eine gute Methode den Graph kennenzulernen. Ich für meinen Teil bewege mich aber überwiegend ohne Benutzerinteraktion im Graph und somit nutze ich in meinen Anwendungen die Application Permissions. Die meisten APIs (vgl. Teams) kommen allerdings erstmal ohne App Permissions daher. Die Enttäuschung ist groß, wenn man über den Graph Explorer sein Research gemacht hat und dann feststellt, dass die Calls als App Permission scheitern.&lt;/p>
&lt;p>Jeremy Thake aus dem Microsoft Graph Team hat vor einigen Monaten angefangen, die Samples (und mehr) aus dem &lt;a href="https://developer.microsoft.com/en-us/graph/blogs/postman-collections/" target="_blank">Graph Explorer in einer Collection für Postman&lt;/a> zu veröffentlichen. Diese Collection vereinfacht das Testen der eigenen Calls und gibt Anregung für neue Szenarien.&lt;/p>
&lt;p>In der Vergangenheit habe ich mir aus meiner Azure Function das Token “geklaut” und dann im Postman als Bearer Token direkt hinterlegt:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/cd/ef/cad14ee0d8e93c6d3b12f08d7601.png" alt="image" />
&lt;/p>
&lt;p>Es gibt aber eine viel elegantere Version. Die MS Graph Postman Collection arbeitet mit dem Environment und Variablen. Eine Methode, die eigentlich dem Code in der eigene App (bei mir eine Azure Function) entspricht, ist aber auch mit an Bord. Postman bietet eine native OAuth Integration an. Man wählt einfach OAuth 2.0 aus und kann dann folgende Informationen aus seiner eigenen App hinterlegen:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/21/e1/721b47c47bd4e280e0ec33f5be11.png" alt="image" />
&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Grant Type: Client Credentials&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Access Token URL: h&lt;a href="https://login.microsoftonline.com/malachor.onmicrosoft.com/oauth2/v2.0/token" target="_blank">ttps://login.microsoftonline.com/malachor.onmicrosoft.com/oauth2/v2.0/token
&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Client ID: 50641771-73ac-42fa-9b6f-f25e49ec6871&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Client Secret: dvMR0c_&lt;em>_RlxvV&lt;/em>JQQZGDICH6N04ZT2/&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Scope : &lt;a href="https://graph.microsoft.com/.default" target="_blank">https://graph.microsoft.com/.default&lt;/a>
Wenn man immer alle Scopes/Berechtigungen möchte, dann ist dieser Scope der einfachste&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Hinweis&lt;/strong>: Ich habe meine App schon wieder gelöscht. Sie ist nicht länger nutzbar, also ist das Secret im Code auch kein Geheimnis mehr.&lt;/p>
&lt;p>Über “Request Token” kann ich dann ein Token holen und für alle weiteren Requests verwenden. Zum Prüfen des Token (hat der Scope geklappt) kann man einfach auf &lt;a href="https://jwt.io" target="_blank">jwt.io&lt;/a> oder auf den Microsoft Service &lt;a href="https://jwt.ms" target="_blank">jwt.ms&lt;/a> gehen.&lt;/p>
&lt;p>&lt;strong>Hinweis&lt;/strong>: Solche Token Decoder sind eine tolle Sache, aber bitte denkt dran, wenn ihr das mit produktiven Token macht, dann müsst ihr dem Service vertrauen, denn er hat in dem Moment eure Berechtigung! In meinem Fall könnten die beiden Websites das Token nehmen und gegen meinen Tenant einsetzen! Ich nutze hier mein LAB Tenant und ich glaube, dass ich weiß was ich tue :) Also alles gut!
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/80/c6/4831a031ee016dc13a15e68ab9cc.png" alt="image" />
&lt;/p>
&lt;p>Mit dem Token kann man dann zum Beispiel in meinem Fall die Azure AD Access Reviews einsehen.
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/a4/93/1d391adb4162ec6255ed6d53579f.png" alt="image" />
&lt;/p>
&lt;p>Mein Debugging wurde extrem vereinfacht, da ich so einfach meine App Permissions testen kann.&lt;/p></description></item><item><title>What’s in your bag, Marco?</title><link>https://marcoscheel.de/post/2018/01/170223335212-whats-in-your-bag-marco/</link><pubDate>Sun, 28 Jan 2018 12:20:40 +0000</pubDate><guid>https://marcoscheel.de/post/2018/01/170223335212-whats-in-your-bag-marco/</guid><description>&lt;p>Ich bin ein Fan von diesem Typ Blog-Post. Tolle Beispiele gibt es zum Beispiel bei &lt;a href="https://www.theverge.com/whats-in-your-bag" target="_blank">The Verge&lt;/a>. Ich möchte euch heute Einblick in meine Tasche geben und zeigen, was ein 100% Cloud &lt;strike>Berater&lt;/strike> Lead Cloud Architect für einen erfolgreichen Tag braucht.&lt;/p>
&lt;p>Wir
reden oft über den modernen Arbeitsplatz, aber gerade für mich ist der moderne
Arbeitsplatz nirgendwo und überall. Was habe ich dabei? Es gibt immer mal wieder
Blogs in denen ihr Autor beschreibt, was er mit sich trägt und welche
Motivation dahintersteckt. In vielen Meetings kann man sehen, dass ich ein Microsoft
Surface Book (GEN1) nutze, aber was noch alles in meiner Tasche steckt, zeige
ich euch jetzt. Für die spannenden Dinge gibt es dann auch noch ein Satz zum
Warum.&lt;/p>
&lt;p>&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/8b/66/c55801c3306e1400d8149727909c.jpg" alt="image" />
&lt;/p>
&lt;p>&lt;a href="https://twitter.com/marcoscheel/status/957591102118416384" target="_blank">Das Bild nochmal in XL auf Twitter&lt;/a>.&lt;/p>
&lt;p>Fangen wir mit dem Offensichtlichsten an: &lt;a href="http://www.mctrek.de/taschen/umhaengetaschen/vaude-albert-m_4024727" target="_blank">Vaude
Albert M&lt;/a> ist meine Tasche (1). Ich versuche „leicht“ unterwegs zu sein. Eine
Tasche mit Rollen mag praktisch sein, aber für meine Anforderungen und mein
Budget hat es die Tasche genau getroffen. Es sollten Laptops bis 13‘‘ reinpassen
und für ausgedehnte Reisen kann Sie auf einen Trolley gesteckt werden. Die Fächeraufteilung
finde ich ausreichend und es gibt 4 Netze im Inneren für all mein Kleinkram.&lt;/p>
&lt;p>Mein
Laptop (2) oder mein 2-1 ist ein Microsoft Book (GEN1). Seit ich bei Glück
&amp;amp; Kanja arbeite, bin ich in der glücklichen Lage Stift-PCs zu verwenden. Eingestiegen
mit einem &lt;a href="http://www.toshiba.de/discontinued-products/portege-m200-0053c/" target="_blank">Toshiba Portege
m200&lt;/a> über eine &lt;a href="https://de.wikipedia.org/wiki/Microsoft_Surface#Surface_Pro" target="_blank">Microsoft Surface
Pro&lt;/a> (das Original) direkt zum Surface Book. Einziger Ausrutscher war ein
Dell Latitude E6400. Mein Laptop transportiere ich auch in der Tasche geschützt
durch ein &lt;a href="http://www.belkin.com/de/F8N139-Belkin/p/P-F8N139/" target="_blank">Belkin
Neopren Schutzhülle&lt;/a> (3). Die Hülle kommt auch zum Einsatz und schützt das
Gerät vor eventuellem Regen, wenn ich mal bei einem Kunden ein Meeting in einem
anderen Gebäude/Stadtteil habe.&lt;/p>
&lt;p>Die Akkuleistung des Surface Book ist OK, aber ohne Netzteil
(4) traut sich keiner aus dem Haus. Das Netzteil ist super. Was kann an einem Netzteil
super sein? Es hat ein USB Ladeport! Ich habe immer ein kurzes Micro-USB Kabel
mit USB-C Adapter dran. Handy, Headset, PowerBank und ähnliches kann so schnell
und unkompliziert geladen werden.&lt;/p>
&lt;p>Als
mobile Maus kommt eine &lt;a href="https://windowsunited.de/2016/02/04/im-test-arc-touch-mouse-surface-edition/" target="_blank">Microsoft
Arc Touch Mouse Surface Edition&lt;/a> (also mit Bluetooth) zum Einsatz. Die Maus
war essentiell in der Zeit mit dem Surface Pro, da es nur ein USB Anschluss gab
und der Trackpad seinen Namen nicht verdient hat. Mit dem Surface Book habe ich
nun ein sehr gutes Trackpad und die Maus kommt immer seltener zum Einsatz, aber
ganz ohne geht es einfach noch nicht. Durch den Knick-Mechanismus nimmt sie
quasi kein Platz weg in der Tasche.&lt;/p>
&lt;p>Für die
zahlreichen Telcos in der Woche ist ein richtiges Headset (6) unersetzlich.
Glück &amp;amp; Kanja ist im Bereich UC nicht unbekannt und so haben ich viele
Kollegen, die mir immer wieder mitteilen wie wichtig ein gutes Headset ist (und
ein LAN Kabel). Mit dem &lt;a href="https://www.plantronics.com/de/de/product/voyager-focus-uc/" target="_blank">Plantronics
Voyager Focus UC&lt;/a> habe ich ein Oberklasse Headset. Es hat sogar „Active
Noise Cancelling“ und kann so auch im Zug zum Video gucken genutzt werden. Ich
nutze dieses Headset mobil und am Arbeitsplatz in Offenbach. Das Teil hat ein
super einfach zu erreichenden Mute Switch und so störe ich in Konferenzen
zumindest nicht durch unnötige Geräusche. Durch ein Bug auf meinem Surface Book
und der aktuellen Windows Insider Version nutze ich mein „altes“ mobiles
Headset (7). Das &lt;a href="http://www.jabra.com.de/bluetooth-headsets/jabra-stealth" target="_blank">Jabra Stealth UC&lt;/a>
hat mich immer mobil begleitet und nie meine Tasche verstopft. Privat nutze ich
die &lt;a href="https://www.engadget.com/products/jaybird/jf4/freedom/sprint/" target="_blank">Jaybird
Freedom Sprint&lt;/a> Bluetooth Kopfhörer (8). In der Regel sind sie nur mit
meinem Smartphone gekoppelt und ich nutze sie überwiegend für Podcasts. Durch die
Taste am Ohr kann ich den Podcast so jederzeit unterbrechen und fortsetzen. Die
Kopfhörer kann man auch zum Joggen anziehen.&lt;/p>
&lt;p>Meine Tasche hat zwar viele Netze und Fächer, aber der Kleinkram
ist immer irgendwie hin und her geflogen und die Kabelkopfhörer haben sie immer
in allem verheddert. Ich habe auf einem US Blog in einem „Whats in my bag“ Post
dieses tolle Gadget gefunden. Ein „Stuff“-Organizer (9) mit dem Namen &lt;a href="https://www.amazon.de/Cocoon-GRID-Organisationssystem-f%C3%BCr-Zubeh%C3%B6rteile-Schwarz/dp/B002HU27UW/ref=sr_1_1?ie=UTF8&amp;amp;amp;qid=1517138700&amp;amp;amp;sr=8-1&amp;amp;amp;keywords=cocoon&amp;#43;organizer" target="_blank">Cocoon
GRID-IT&lt;/a>. Die Teile sind mittlerweile ganz erschwinglich und in unterschiedlichen
Größen zu haben. Ich haben folgende Dinge organisiert:&lt;/p>
&lt;ul>
&lt;li>Kabelkopfhörer&lt;/li>
&lt;li>Kabelheadset (noch von meinem Lumia 920)&lt;/li>
&lt;li>MicroSD mit Adapter&lt;/li>
&lt;li>USB 2.0 Stick (klein) + USB 3.0 Stick (groß)&lt;/li>
&lt;li>&lt;a href="https://windowsunited.de/2015/11/19/test-surface-pen-tip-kit-was-bringen-die-spitzen-fuer-den-surface-stift/" target="_blank">Surface
Pen Tip Kit&lt;/a>&lt;/li>
&lt;li>USB-C to Headphone-Jack Adapter&lt;/li>
&lt;li>Mini-Display-Port zu VGA&lt;/li>
&lt;li>Mini-Display-Port zu HDMI, DVI,
Display-Port&lt;/li>
&lt;li>Micro-USB zu USB Adapter&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/8e/54/34ed9082b982efda27da28344dd9.jpg" alt="image" />
&lt;/li>
&lt;/ul>
&lt;p>Eine
PowerBank gehört heute einfach in jede Tasche. Ich habe mir im letzten Amazon Xmas
Sale nochmal einen „kleinen“ Anker den &lt;a href="https://www.anker.com/de/products/variant/PowerCore-10000/A1263011" target="_blank">PowerCore
10000&lt;/a> geholt. Ich hatte sonst einen &lt;a href="https://www.amazon.de/Anker-PowerCore-20100mAh-Externer-Akku-Schwarz/dp/B00VJT3IUA" target="_blank">Anker
PowerCore mit 20100 mAH&lt;/a> dabei, aber der war nur unnötig schwer. Unterwegs
ein Headset oder Handy laden kann man mit dem kleinen Akku viel eleganter. Für
diesen Einsatz habe ich auch kurze Kabel in der kleiner Tasche (Micro-USB und
USB-C).&lt;/p>
&lt;p>Meine
Kabelsammlung und ein Anker 24-Watt 2-Port Netzteil trage ich immer in der
vordersten Tasche dabei. Für den Einsatz am Netzteil eignen sich lange Kabel. Mein
Lieblingskabel (weil lang) ist das weiße Micro-USB Kabel, dass ich noch aus den
&lt;a href="https://de.wikipedia.org/wiki/Amazon_Kindle#Kindle_Keyboard_%283._Generation%29" target="_blank">Kindle
Keyboard&lt;/a> Zeiten übrighabe. Aktuellere Geräte brauchen ein USB-C Kabel und
da habe ich noch eins von meinem Lumia 950 XL übrig. Mein Frau nutzt als „Computer“
ein iPad, also kann es nie schaden auch ein Lightning Kabel (natürlich von &lt;a href="https://www.anker.com/de/products/variant/Nylon-Lightning-USB-Kabel-%286ft-%2F-1.8m%29/A7114013" target="_blank">Anker&lt;/a>)
dabei zu haben.&lt;/p>
&lt;p>Es
bleibt nur der Rest (12) übrig. Handcreme, Kugelschreiber, Bonbons gegen das
Kratzen im Hals, Heuschnupfen-Tabellen, Batterien für den Surface Pen, Regenschirm
und als Vater von zwei Jungs immer ein paar Feuchtigkeitstücher.&lt;/p></description></item><item><title>SharePoint Online Device Access Option fehlt - Lösung: First Release for everyone</title><link>https://marcoscheel.de/post/2017/09/165449521992-sharepoint-online-device-access-option-fehlt/</link><pubDate>Sun, 17 Sep 2017 21:11:09 +0000</pubDate><guid>https://marcoscheel.de/post/2017/09/165449521992-sharepoint-online-device-access-option-fehlt/</guid><description>&lt;p>In meinen Projekten (&lt;a href="https://www.glueckkanja.com/technologien/office-365/" target="_blank">Office 365&lt;/a> / &lt;a href="https://www.glueckkanja.com/blog/microsoft/ems/award/2017/06/gk-partner-of-the-year/" target="_blank">100% Cloud&lt;/a>) ist &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/active-directory-conditional-access-technical-reference" target="_blank">Conditional Access&lt;/a> (CA) nicht mehr wegzudenken. Für uns “SharePoint“ Leute hat CA eine spezielle Geschmacksrichtung. Eine der ersten Session-Based CA Policies arbeitet mit SharePoint und ermöglicht so zusätzliche Kontrollen beim Zugriff auf SharePoint. Microsoft hat das ganze in einem &lt;a href="https://techcommunity.microsoft.com/t5/SharePoint-Blog/Device-based-Conditional-Access-Policies-Rolling-out-to-First/ba-p/51912" target="_blank">Blogpost&lt;/a> beschrieben. Jetzt wurde angekündigt, dass es in die nächste Runde geht und die Konfiguration nicht mehr auf den ganzen Tenant zieht, sondern &lt;a href="https://techcommunity.microsoft.com/t5/SharePoint-Blog/Device-based-Policies-Updates-with-SharePoint-and-OneDrive/ba-p/101827" target="_blank">einzelne Site Collections &lt;/a>adressiert. In diesem Zuge wollte ich mal wieder meine AAD + SPO Konfiguration gerade ziehen, aber siehe da&amp;hellip; es fehlt was! So sieht es im SharePoint Admin Center unter dem Punkt “Device Access” aus:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/44/60/b19d1309eb9d2f84b06d45a2bcd3.png" alt="image" />
&lt;/p>
&lt;p>Eigentlich sollte der Dialog so aussehen:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/f5/a7/e82673d65fdeb9ee1164a68a30ac.png" alt="image" />
&lt;/p>
&lt;p>Es fehlt der entscheidende Teil:
&lt;em>&amp;ldquo;Control access from devices that aren&amp;rsquo;t compliant or joined to a domain&amp;rdquo;&lt;/em>
oder auf deutsch:
_&amp;ldquo;Zugriff von Geräten steuern, die nicht konform oder einer Domäne beigetreten sind&amp;rdquo;
_Jetzt stellt sich die Frage warum? Mein Tenant ist auf “First Release”, also sollte es doch funktionieren. Eine kurze Recherche hat mich zum überraschenden Ergebnis geführt:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/60/a6/a0ab32d60f0b1ba4117644d161f6.png" alt="image" />
&lt;/p>
&lt;p>Quelle: Microsoft Support - &lt;a href="https://support.office.com/en-us/article/Control-access-from-unmanaged-devices-5ae550c4-bd20-4257-847b-5c20fb053622?ui=en-US&amp;amp;amp;rs=en-US&amp;amp;amp;ad=US&amp;amp;amp;fromAR=1" target="_blank">Control access from unmanaged devices&lt;/a>&lt;/p>
&lt;p>Mein Tenant war tatsächlich für einen Test auf die Option “First release for selected users” eingestellt:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/45/dc/754fb60365a39769a1e4c673639a.png" alt="image" />
&lt;/p>
&lt;h2 id="lösung">Lösung&lt;/h2>
&lt;p>Wie im Support Dokument beschrieben habe ich das Setting geändert auf die Option “First release for everyone”:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/71/99/e2bd1b48168c253805f8609aeeae.png" alt="image" />
&lt;/p>
&lt;p>Kurze Zeit später (es zieht nicht sofort), konnte ich über das SharePoint Admin Center die gewünschte &amp;ldquo;Device Access” Konfiguration abschließen.&lt;/p>
&lt;p>Ich habe in der Vergangenheit immer nach den Unterschieden der beiden “First Release” Einstellungen gesucht. Dieser Fall ist der erste mir bekannte.&lt;/p></description></item><item><title>The Future of SharePoint (Online)</title><link>https://marcoscheel.de/post/2016/05/144716486707-the-future-of-sharepoint-online/</link><pubDate>Sat, 21 May 2016 20:33:42 +0000</pubDate><guid>https://marcoscheel.de/post/2016/05/144716486707-the-future-of-sharepoint-online/</guid><description>&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>Die Roadmap schließt somit eine Lücke, die überwiegend Hardcore
SharePoint User (Publishing, echte Listen und Metadaten) betroffen hat und
begeistern wird. Für den Rest wird es einfach einfacher und schöner.&lt;/p>
&lt;p>Alle die Office 365 noch nicht verwenden können die Zeit bis Ende 2016 nutzen,
um eine solide Basis aufzubauen. Alle mit einer guten Office 365 Basis können
die Zeit nutzen in ersten Gehversuchen mit Office 365 Groups eigene Erfahrungen
zu sammeln. In nächsten Jahr (2017) können dann hoffentlich alle das volle
Potential von SharePoint Online nutzen und über den Datei-Tellerrand schauen
und den nächsten Level der modernen Teamräume ausnutzen.&lt;/p>
&lt;p>Am 4.5.2016 hat Microsoft Details zur weiteren Roadmap von
SharePoint in einem Online-Event vorgestellt. In den letzten Monaten
hat man den Eindruck bekommen, dass SharePoint sich immer mehr auf das
Verwalten von Dateien konzentriert und dies auch mit einem sehr rudimentären
Funktionsumfang. Woher kam die Vermutung? Meine persönliche Wahrnehmung
als Berater im SharePoint Umfeld, Blogs aus der (MVP-)Community, die
aktuelle (Stand Mai 2016) Implementierung der Office 365 Groups und nicht
zuletzt der starte Fokus auf den OneDrive for Business Bereich (Next
Gen Sync, &amp;hellip;).&lt;/p>
&lt;p>Ich als SharePoint Berater bei der Glück &amp;amp; Kanja Consulting AG
möchte ihnen gerne meine Wahrnehmung und Interpretation der Dinge schildern. Es
ist keine 1:1 Zusammenfassung, denn die hat Microsoft selber hier geliefert:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://blogs.office.com/2016/05/04/the-future-of-sharepoint/" target="_blank">https://blogs.office.com/2016/05/04/the-future-of-sharepoint/&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://blogs.office.com/2016/05/04/announcing-simple-and-powerful-file-sharing-and-collaboration-for-office-365/" target="_blank">https://blogs.office.com/2016/05/04/announcing-simple-and-powerful-file-sharing-and-collaboration-for-office-365/&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://blogs.office.com/2016/05/04/sharepoint-the-mobile-and-intelligent-intranet/" target="_blank">https://blogs.office.com/2016/05/04/sharepoint-the-mobile-and-intelligent-intranet/&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://blogs.office.com/2016/05/04/the-sharepoint-framework-an-open-and-connected-platform/" target="_blank">https://blogs.office.com/2016/05/04/the-sharepoint-framework-an-open-and-connected-platform/&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://blogs.office.com/2016/05/04/sharepoint-server-2016-your-foundation-for-the-future/" target="_blank">https://blogs.office.com/2016/05/04/sharepoint-server-2016-your-foundation-for-the-future/&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="sites-heißt-jetzt-wieder-sharepoint--das-versteckspiel">Sites heißt jetzt wieder SharePoint – Das Versteckspiel&lt;/h2>
&lt;p>hat eine Ende&lt;/p>
&lt;p>Meine
erste Reaktion auf &lt;a href="https://twitter.com/marcoscheel/status/727924436754702336" target="_blank">Twitter&lt;/a>:
&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/a2/ca/be7806cc2be261912a0d60dd8bb3.png" alt="image" />
&lt;/p>
&lt;p>Persönlich bin ich mit dem Event sehr zufrieden. SharePoint
versucht sich nicht nur auf Dateien zu beschränken, sondern möchte auch in
Office 365 als echtes Intranet wahrgenommen werden. Abseits von Groups und
OneDrive gibt es ja noch Listen. Ein Feature das nur &amp;ldquo;Wenige&amp;rdquo; verwenden,
aber eigentlich liegt dort der Teil der SharePoint definiert. Was hat Microsoft
nun getan, um die traditionellen Wert wiederzubeleben?&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Moderne&lt;/strong> Teamsites sehen
gut aus und funktionieren im Browser und in einer neuen SharePoint Mobile App&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Moderne Teamsites bieten mehr als &lt;strong>eine&lt;/strong> Dokumentenbibliothek&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Moderne Teamsites fokussieren auf &amp;ldquo;&lt;strong>Pages&lt;/strong>&amp;rdquo; und &amp;ldquo;&lt;strong>Webparts&lt;/strong>&amp;rdquo; um Informationen aus der
puren Existenz zum Benutzer zu führen&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Moderne Teamsites bieten **Discovery **ala Delve und zeigen
Activities auf einer Zeitlinie ähnlich wie Yammer&lt;img class="img-zoomable" src="https://marcoscheel.de/tmblr/0d/55/d264f822554470dcc013f3232c2d.png" alt="image" />
&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="ist-der-focus-auf-das-intranet-news-publishing-">Ist der Focus auf das Intranet (News, Publishing, &amp;hellip;)&lt;/h2>
&lt;p>und echte Listenfunktionalität die Lösung aller SharePoint (Online) Probleme?&lt;/p>
&lt;p>Nein! Ich bin noch immer der Meinung, dass der Großteil meiner
Kunden primär eine grundsolide Lösung für das Arbeiten mit Dateien
benötigt. Die Roadmap hierfür (OneDrive for Business Client) scheint klar. Wird
die Zeitlinie gehalten, dann sehe ich hier keine Probleme.&lt;/p>
&lt;p>Für was brauche ich jetzt aber Listen? Auch in internen Gesprächen
wird den meisten Leuten nicht klar, warum man Listen benötigt. Selbst
zusätzliche Metadaten an Dateien sind immer wieder ein Streitthema mit einem
klaren Gewinner: Die Out-Of-The-Box Metadaten (Ersteller + Datum, Änderungshistorie,
Version, Name) sind ausreichend. Benutzer wundern sich schon oft genug,
warum SharePoint bei Dateien neben dem Dateinamen auch ein Titel Attribut hat.
Zusätzliche Daten zu erfassen, ist für viele Benutzer neu und ungewohnt. Es mag
valide Situationen (aber wirklich nur ein kleiner
Prozentsatz) geben, wo extra Metadaten hilfreich sind. Das Handling der
Metadaten stellt für Dateien aber noch immer ein Problem dar. Offline,
Non-Office Dateien und verschiedene andere Situationen erlauben kein Zugriff auf
diese extra Metadaten. Ein Bulkupload über OneDrive for Business oder den
Browser erzeugt Dateien ohne Metadaten und oft ohne einen relevanten
Handlungshinweis für den End-Benutzer. Kann ich auf Ordner verzichten, wenn ich
Metadaten pflegen? Meine Meinung ist hier in 95% der Fälle ein
&amp;ldquo;Nein&amp;rdquo;, da ich ohne Ordner zum Beispiel Offline ein Problem bekomme,
wenn ich zum Beispiel 2000 Dateien in einer flachen Dateiliste bekomme. In
solchen Situationen kann auch kein &amp;ldquo;selective Sync&amp;rdquo; helfen, wenn er mal
implementiert wurde.&lt;/p>
&lt;p>Die Demos von Microsoft
zeigen die Modern Teamsites unter Verwendung der &amp;ldquo;neuen&amp;rdquo; Seiten und
Webparts zum Aufbereiten multipler Informationen und Quellen. Sieht toll aus.
Ich fand schon immer die Startseite einer Teamsite dafür geeignet, neben einem
Dokumentenbaum (wie aus dem Dateisystem) auch andere relevanten Informationen
aufzubereiten. Die Realität zeigt aber, dass sich so was gerade für Demos
perfekt eignet, aber im echten Leben nur selten angewendet wird.&lt;/p>
&lt;h2 id="also-doch-alles-grütze">Also doch alles Grütze?&lt;/h2>
&lt;p>Nein, denn es gibt alleine durch die neue
&amp;ldquo;Out-Of-The-Box&amp;rdquo; Funktionen so viele Vorteile, dass auch das normale
Arbeiten unterstützt wird. Die neue SharePoint App funktioniert auch ohne
zusätzliche Listen und Metadaten. Ein Delve ähnliches Discovery findet jetzt &amp;ldquo;überall&amp;rdquo;
statt. Die &amp;ldquo;neue&amp;rdquo; Oberfläche kennen die User schon
aus ihrem OneDrive for Business. Ergänzungen wie &lt;a href="https://powerapps.microsoft.com" target="_blank">PowerApps&lt;/a> und &lt;a href="https://flow.microsoft.com" target="_blank">Flow&lt;/a> können bei Bedarf
aktiviert und genutzt werden. Das neue SharePoint Framework erweitert und
ergänzt die bestehenden Add-In basierenden Entwicklungen.&lt;/p>
&lt;p>Es gibt noch einige nicht unwesentliche Unbekannte:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Wie integriert sich die Groups-Funktionalität in die neuen Teamsites und anderes herum&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Modern Teamsites für On-Premise (SP2016) gibt es wahrscheinlich erst 2017 in einem Feature Pack&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Wie überbrücken wir die Zeit bis Ende 2016 (da kommen das Gesamtpaket zusammen)&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Die Roadmap schließt somit
eine Lücke, die überwiegend Hardcore SharePoint User (Publishing, echte Listen
und Metadaten) betroffen hat und begeistern wird. Für den Rest wird es
einfach einfacher und schöner.&lt;/p>
&lt;h2 id="planlos">Planlos?&lt;/h2>
&lt;p>Kein Grund nix zu tun. Nutzen Sie noch kein Office 365? Starten
Sie einen Piloten und untersuchen Sie, was ihr Unternehmen der Cloud abgewinnen
kann. Bevor es um SharePoint geht benötigen Sie solide Grundlagen/Planungen im
Bereich Authentifizierung (Azure AD), eine eventuelle Verzeichnissynchronisation,
Office Pro Plus (Client) Rolloutplanung, Mailmigration und mehr. Ist alles ready,
dann ist es fast schon 2017 und mit all den wahrgewordenen SharePoint Funktionen
kann auch hier solide ein Plan entwickelt werden.&lt;/p>
&lt;p>Ihr Unternehmen hat schon die stabile
Basis in Office 365 oder befindet sich in einem Proof-of-Concept? Diese Ausgangssituation
ist ganz so einfach. Persönlich würde ich hier versuchen auf Basis der
aktuellen Office 365 Groups Implementierung erste Gehversuche zu machen und so
bis Ende 2016 die Grundlagen für eine erfolgreiche Modern SharePoint
Implementierung vorzubereiten.&lt;/p>
&lt;hr>
&lt;p>Wir von der &lt;a href="http://glueckkanja.com" target="_blank">Glück &amp;amp; Kanja&lt;/a> haben vor kurzem die &lt;a href="http://www.glueckkanja.com/webcasts" target="_blank">GK WebcastFriday Serie&lt;/a> gestartet. Im letzten Webcast haben meine Kollege &lt;a href="https://www.xing.com/profile/Jan_Geisbauer" target="_blank">Jan Geisbauer&lt;/a> und ich das Thema &lt;a href="https://youtu.be/Lke1fKSamc0" target="_blank">SharePoint&lt;/a> und im speziellen &lt;a href="https://youtu.be/Lke1fKSamc0?t=24m2s" target="_blank">The Futute of SharePoint&lt;/a> betrachtet. Schaut doch mal rein.&lt;/p></description></item><item><title>Zeit für einen Neustart</title><link>https://marcoscheel.de/post/2016/05/143746644752-zeit-f%C3%BCr-einen-neustart/</link><pubDate>Mon, 02 May 2016 17:30:19 +0000</pubDate><guid>https://marcoscheel.de/post/2016/05/143746644752-zeit-f%C3%BCr-einen-neustart/</guid><description>&lt;p>Marco Scheel nach seinem Umzug von Wordpress zu Tumblr&lt;/p>
&lt;p>Das alte Zeug gibt es hier: &lt;a href="https://marcoscheel.wordpress.com/" target="_blank">https://marcoscheel.wordpress.com/&lt;/a>&lt;/p></description></item><item><title>Minor update "Sign In As A Different User" für OWA und HTML Redirection</title><link>https://marcoscheel.de/2012/06/13/minor-sign-in-as-a-different-user-fur-owa-und-html-redirection/</link><pubDate>Wed, 13 Jun 2012 16:05:08 +0000</pubDate><guid>https://marcoscheel.de/2012/06/13/minor-sign-in-as-a-different-user-fur-owa-und-html-redirection/</guid><description>&lt;p>Ich hatte heute auf unserem Bootcamp eine Anfrage von einem unserer Consultants bezüglich meines &lt;a href="http://signinas.codeplex.com" target="_blank">Projektes zum Wechseln von Benutzern auf dem IIS&lt;/a> bekommen. Ich hatte das vor kurzem in einem &lt;a href="http://marcoscheel.de/sharepoint/sign-in-as-a-different-user-benutzer-wechseln-fur-iis-basierte-sites" target="_blank">Post gebloggt&lt;/a>. Es ging um eine Konfiguration im Bereich Publishing TMG und genauer um Forms Authentication vs. Integrated Authentication. Wir haben kurz die Anwendung im Lab OWA erfolgreich getestet. Je nachdem wie der Kunde sich entscheidet gehen wir damit auch Live.&lt;/p>
&lt;p>Bei der Konfiguration sind uns allerdings ein paar Dinge aufgefallen:&lt;/p>
&lt;pre>&lt;code> * Die Konfiguration im OWA Ordner war nicht erfolgreich. Alle Aufrufe für den Handler wurden ignoriert und es wurde OWA angezeigt.
* Die Lösung war einfach auf dem Web einen neuen Ordner im Root anzulegen und dort eine eigen Application für den Handler zu konfigurieren. Bei einem ersten Test ist allerdings aufgefallen, dass die Authentifizierung erst mal nicht wollte. Problem könnte hier Kerberos sein, da der normale App Pool ein anderen Account verwendet. WIr haben kurzerhand einfach den OWA App Pool verwendet und schon funktionierte die Lösung.
* Nach der erfolgreichen Ummeldung landet man aber per Default im Root des aktuellen Folders, was für die OWA User jetzt keine Option ist, da hier nichts liegt :-) Mein Kollege hat das ganze per HTML Meta Refresh gelöst und ich hab das dann gleich integriert, da ich so ohne Code Änderung auskommen.
&lt;/code>&lt;/pre>
&lt;p>Bis heute habe ich tatsächlich schon &lt;a href="http://signinas.codeplex.com/stats" target="_blank">26 Downloads und immerhin 286 page visits&lt;/a> :-)&lt;/p>
&lt;p>Ciao Marco&lt;/p></description></item><item><title>ASP.NET 4.5, SQLMembership und (keine) Roles</title><link>https://marcoscheel.de/2012/06/11/asp-net-4-5-sqlmembership-und-keine-roles-2/</link><pubDate>Mon, 11 Jun 2012 15:37:11 +0000</pubDate><guid>https://marcoscheel.de/2012/06/11/asp-net-4-5-sqlmembership-und-keine-roles-2/</guid><description>&lt;p>Wir sind aktuell auf Bootcamp und ich habe Claims und alles drum herum zum Thema. Natürlich ist auch die Migration aus &amp;ldquo;alten&amp;rdquo; Systemen ein Punkt auf der Agenda. Ich brauche also ein altes System&amp;hellip; Also habe ich schnell eine ASP.NET 4.5 WebForms Site angelegt und konnte auch schnell die Logins aus dem SQL Membership Provider zum Fliegen bekommen. Allerdings konnte ich keine Seiten vor Zugriff über eine spezielle Role schützen. Hier meine Web.Config:&lt;/p>
&lt;location path="Admin.aspx">
&lt;p>&amp;lt;system.web&amp;gt;&lt;/p>
&lt;authorization>
&lt;allow roles="Admins"/>
&lt;deny users="*"/>
&lt;/authorization>
&lt;p>&amp;lt;/system.web&amp;gt;&lt;/p>
&lt;/location>
&lt;p>Bei einem Test hattet die Konfiguration aber kein Erfolg. Mein Admin User durfte die Admin.aspx einfach nicht sehen. Eine kurze Recherche hat gezeigt, dass ich den Role Provider der zwar vorkonfiguriert war noch enablen mußte.&lt;/p>
&lt;p>Vorher:&lt;/p>
&lt;roleManager defaultProvider="DefaultRoleProvider">
&lt;providers>
&lt;add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, ulture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
&lt;/providers>
&lt;/roleManager>
&lt;p>Nachher:&lt;/p>
&lt;p>&amp;lt;roleManager defaultProvider=&amp;ldquo;DefaultRoleProvider&amp;rdquo; &lt;strong>enabled=&amp;ldquo;true&amp;rdquo;&lt;/strong>&amp;gt;&lt;/p>
&lt;providers>
&lt;add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, ulture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
&lt;/providers>
&lt;/roleManager>
&lt;p>Anschließen konnte ich mit dem Admin User die entsprechende Seite aufrufen :-)&lt;/p>
&lt;p>Ciao Marco&lt;/p></description></item><item><title>SharePoint 2010 Diagnostics Log Files werden nicht komprimiert</title><link>https://marcoscheel.de/2012/05/29/sharepoint-2010-diagnostics-log-files-werden-nicht-komprimiert/</link><pubDate>Tue, 29 May 2012 16:44:11 +0000</pubDate><guid>https://marcoscheel.de/2012/05/29/sharepoint-2010-diagnostics-log-files-werden-nicht-komprimiert/</guid><description>&lt;p>Ich hatte vor einiger Zeit bei einem Kunden das Problem, dass die Diagnostic Logs von Microsoft SharePoint 2010 nicht automatisch komprimieren ließen. SharePoint kümmert sich ja selber um die &lt;a href="http://technet.microsoft.com/en-us/library/ee748656.aspx" target="_blank">Verwaltung&lt;/a> des Speicherplatzes. Eines der neuen Features ist, dass auf die Files in dem LOGS Ordner automatisch die NTFS Kompression aktiviert wird.&lt;/p>
&lt;p>Der Kunde betreibt mehrere Farmen (Production, Staging, Testing und Dev), um den ganzen Lifecyle des Deployments korrekt abzudecken. Bis auf die Produktion laufen alle Farmen als Guest in geshared virtuellen Umgebungen. Die Produktion hat eigene Virtualisierungshosts und wurde extra für SharePoint neu aufgebaut. Ich konfiguriere (abweichend vom Standard) das Verzeichnis der LOGS nicht in den 14er Hive sondern auf &amp;ldquo;D:SP2010-DiagLogs&amp;rdquo;. Auf einigen der Maschinen im Staging ist mir dann aufgefallen, dass der Ordner für das SharePoint Diagnostics Logging keine NTFS Kompression verwendet. Im ersten Moment dachte ich, dass hier hat einer der Kollegen was &amp;ldquo;konfiguriert&amp;rdquo; und ich wollte es manuell gerade ziehen. Ich stellte allerdings fest, dass die Option für die Kompression des Dateisystems nicht existiert.&lt;/p>
&lt;p>Eine kurze Recherche brachte zum Thema SharePoint Diagnostic Logs wenig, um nicht zu sagen gar nichts. Die Suche wurde nun erweitert auf OS-Ebene, da die Funktion der &amp;ldquo;File Compression&amp;rdquo; nicht durch SharePoint bereitgestellt wird. Es stellte sich dann langsam heraus, dass die Funktion nur für Platten bereitsteht, die mit einer Cluster-Größe von 4kb formatiert wurden. Hier ein Auszug von Microsoft Support:&lt;/p>
&lt;blockquote>The minimum default cluster size for NTFS under Windows NT 4.0 and later is 4 kilobytes (KB) because NTFS file compression is not possible on drives with a larger cluster size.
[http://support.microsoft.com/kb/140365/en-us](http://support.microsoft.com/kb/140365/en-us)&lt;/blockquote>
&lt;p>Und es war tatsächlich so, dass in einigen der D: Drives der Guest im Development eine &amp;ldquo;falsche&amp;rdquo; Cluster-Size hatten.&lt;/p>
&lt;p>Ciao Marco&lt;/p></description></item><item><title>Sign In As A Different User - Benutzer wechseln für IIS basierte Sites</title><link>https://marcoscheel.de/2012/05/27/sign-in-as-a-different-user-benutzer-wechseln-fur-iis-basierte-sites/</link><pubDate>Sun, 27 May 2012 20:23:06 +0000</pubDate><guid>https://marcoscheel.de/2012/05/27/sign-in-as-a-different-user-benutzer-wechseln-fur-iis-basierte-sites/</guid><description>&lt;p>Meine Kollege &lt;a href="http://blog.karstenkleinschmidt.de/" target="_blank">Karten Kleinschmidt&lt;/a> und ich haben beim Kunden ein interessante kleine Aufgabe bekommen, in der es darum ging, den verwendeten Benutzer (Domainen Benutzer) an einer bestehenden Webseite zu wechseln.&lt;/p>
&lt;p>In einem Unternehmensnetzwerk mit integrierter Anmeldung an der Domain muss der User im Normalfall keine weiteren Anmeldeinformationen eingeben, um auf Websites zuzugreifen. Anwendungen wie &lt;a href="http://sharepoint.microsoft.com/en-us/" target="_blank">SharePoint&lt;/a>, CRM und viele Eigenentwicklungen nutzen diese Funktion natürlich für Authentifizierung und Autorisierung aus. Es kommt aber immer mal wieder vor, dass der aktuelle Benutzer nicht der &amp;ldquo;richtige&amp;rdquo; Benutzer für die aktuelle Aufgabe ist. In vielen Unternehmen haben Benutzer neben dem eigenen Account einen administrativen Benutzer (gkms und gkadm_ms). Ist man am PC mit dem normalen Account angemeldet und möchte nun den administrativen Account verwenden, dann muss man den ganzen Brower mit anderen Credentials starten, sich am PC ummelden oder per Terminal Services auf einem anderen Rechner anmelden. Anwendungen wie &lt;a href="http://sharepoint.microsoft.com/en-us/" target="_blank">SharePoint&lt;/a> bieten solche Funktionen Out-Of-The-Box bereits an. Für Anwendungen, welche das nicht können, ist es für den normalen Mitarbeiter im Unternehmen kein leichtes Unterfangen, diese Aufgabe zu lösen.
&lt;a href="http://marcoscheel.files.wordpress.com/2012/05/sharepoint.png" target="_blank">&lt;img class="img-zoomable" src="http://marcoscheel.files.wordpress.com/2012/05/sharepoint.png" alt="" />
&lt;/a>&lt;/p>
&lt;p>&lt;a href="http://www.bing.com/search?q=karsten&amp;#43;kleinschmidt&amp;amp;src=IE-TopResult&amp;amp;FORM=IE10TR" target="_blank">Karsten&lt;/a> (und damit irgendwann auch ich) hat nun die Aufgabe, für eine Website im Lync Umfeld so eine Funktion anzubieten. Eine kurze Recherche (&lt;a href="http://www.bing.com/search?q=iis&amp;#43;sign&amp;#43;in&amp;#43;as&amp;#43;a&amp;#43;different&amp;#43;user&amp;amp;src=IE-TopResult&amp;amp;FORM=IE10TR" target="_blank">Bing&lt;/a> | &lt;a href="https://www.google.com/#hl=en&amp;amp;output=search&amp;amp;sclient=psy-ab&amp;amp;q=iis&amp;#43;sign&amp;#43;in&amp;#43;as&amp;#43;a&amp;#43;different&amp;#43;user&amp;amp;oq=iis&amp;#43;sign&amp;#43;in&amp;#43;as&amp;#43;a&amp;#43;different&amp;#43;user" target="_blank">Google&lt;/a>) hat gezeigt, dass &lt;a href="http://www.roelvanlisdonk.nl" target="_blank">Roel van Lisdonk&lt;/a> in seinem Blogpost &lt;a href="http://www.roelvanlisdonk.nl/?p=825" target="_blank">ASP .NET – C# – How to “Sign in as Different User” like in Microsoft SharePoint with Windows Authentication&lt;/a> genau das beschreibt. Seine Lösung ist allerdings Page-basierend und ich wollte was allgemeineres. Ich habe dann einfach seine Code als Basis genommen, ein &lt;a href="http://msdn.microsoft.com/en-us/library/zec9k340.aspx" target="_blank">HTTPModule&lt;/a> erstellt und das Ergebnis dann auf Codeplex veröffentlicht. Da nicht so viel Eigenleistung drin steckt, war es schnell klar, dass es nur &amp;ldquo;fair&amp;rdquo; ist es weiter zu teilen. Hier ist also das erste &lt;a href="http://glueckkanja.com" target="_blank">Glück &amp;amp; Kanja&lt;/a> &lt;a href="http://www.codeplex.com" target="_blank">Codeplex&lt;/a> Projekt.&lt;/p>
&lt;p>&lt;a href="http://signinas.codeplex.com" target="_blank">http://signinas.codeplex.com&lt;/a> - Glück &amp;amp; Kanja Consulting AG - Sign In As A Different User&lt;/p>
&lt;p>&lt;a href="http://marcoscheel.files.wordpress.com/2012/05/codeplex.png" target="_blank">&lt;img class="img-zoomable" src="http://marcoscheel.files.wordpress.com/2012/05/codeplex.png" alt="" />
&lt;/a>&lt;/p>
&lt;p>Das Projekt steckt sicher noch in den Kinderschuhen und kann deutlich erweitert werden, aber dafür gibt es ja Codeplex :-)&lt;/p>
&lt;p>Ich hatte übrigens viel &lt;a href="https://twitter.com/marcoscheel/status/203496861250764803" target="_blank">&amp;ldquo;Spaß&amp;rdquo;&lt;/a> mit Codeplex, aber das ist ne andere Geschichte und die Schuld von TFS ;-)&lt;/p></description></item></channel></rss>