Infothek
Tutorials & Videos
Falls du mal krank bist oder einen Termin hattest, kannst du hier den Stoff nachholen …
Wenn dir der Ton zu leise ist, nutze den VLC Media-Player
Alle Programme, Codes und Codebestandteile in dieser Infothek stehen unter der Unlicense und sind der Allgemeinheit gewidmet. Sie dürfen frei verwendet, verändert und weitergegeben werden. Die Nutzung erfolgt auf eigene Verantwortung. Jegliche Gewährleistung oder Haftung – ausdrücklich oder stillschweigend – ist ausgeschlossen.
Prüfungs-Simulator
Moderne PCs sind heute auf allen OSI‑Schichten besser geschützt als je zuvor. Hardware‑Fixes, Microcode‑Updates, OS‑Härtungen und Browser‑Isolation haben Side‑Channel‑Angriffe stark erschwert. Ein aktueller PC mit gepflegter Software bietet ein sehr hohes Sicherheitsniveau. Die größten Risiken entstehen weniger durch technische Lücken, sondern durch menschliche Fehler wie Phishing, unsichere Downloads oder schwache Passwörter. Ein neuer PC (Windows, macOS, Linux) enthält diese Schutzmechanismen standardmäßig. Der Schutzgrad hängt jedoch von CPU‑Generation und Update‑Stand ab.
Moderne Schutzmechanismen gegen Side‑Channel‑Angriffe
Seit Meltdown und Spectre (2018) wurden umfangreiche Verbesserungen umgesetzt:
Hardware (ab ca. 2019):
– Neue CPU‑Generationen enthalten mikroarchitektonische Fixes gegen spekulative Angriffe.
Firmware (Microcode):
– Updates für ältere Prozessoren schließen bekannte Angriffswege.
Betriebssysteme:
– Kernel Page Table Isolation (KPTI)
– Retpoline
– Speicherbarrieren und Kernel‑Härtungen
Browser & Virtualisierung:
– Site Isolation
– Timer‑Drosselung
– Stärkere VM‑Isolation
Netzwerk-Technik
Von Jens Ihle
Wenn das Herz der IT aufhört zu schlagen …
Als angehende Internet Security Manager sollten wir Wissen: Die Sicherheit einer Infrastruktur steht und fällt mit dem Active Directory (AD). Es ist das zentrale Nervensystem fast jeder Unternehmens-IT. Doch genau diese Zentralisierung ist ein zweischneidiges Schwert.
Heute schauen wir uns reale Katastrophen an, bei denen nicht die Abwesenheit von Technik das Problem war, sondern die Art und Weise, wie Synchronisation und Backups von Trümmerlottchen gehandhabt wurden.
Wir lernen daraus, warum ein Standard-Backup für ein AD oft wertlos ist.“
Fallstudie 1: Maersk & NotPetya (Der Synchronisations-GAU)
„Der wohl bekannteste Fall der IT-Geschichte ist der Angriff auf die Reederei Maersk im Jahr 2017 durch die Ransomware NotPetya. Maersk transportiert etwa 20 % des weltweiten Seehandels.“
Was ist passiert?
„Eine Infektion begann in einem kleinen Büro in der Ukraine durch eine kompromittierte Buchhaltungssoftware. NotPetya nutzte Schwachstellen (EternalBlue), um sich lateral im Netzwerk zu bewegen. Das Problem war hier die globale Active Directory-Struktur. Maersk hatte hunderte Domain Controller (DCs) weltweit, die alle miteinander synchronisierten.“
Die Ursache im Bereich AD-Synchronisation:
Hocheffiziente Schadstoffverteilung: Das AD ist darauf programmiert, Änderungen sofort an alle anderen DCs zu replizieren. Die Schadsoftware verbreitete sich so schnell, dass innerhalb von nur 7 Minuten die gesamte weltweite Infrastruktur – 45.000 PCs und 4.000 Server – verschlüsselt war.
Das Backup-Dilemma: Da die DCs ständig synchronisierten, wurden auch die korrumpierten Datenstände sofort überallhin verteilt. Die Online-Backups waren teils mit verschlüsselt oder durch die Replikationslogik unbrauchbar geworden.
Die Rettung durch Zufall:
„Maersk stand vor dem Aus. Der einzige Grund, warum das Unternehmen heute noch existiert, war ein Stromausfall in einem Büro in Lagos, Nigeria. Dieser eine Domain Controller war zum Zeitpunkt des Angriffs offline und konnte nicht synchronisieren. Er enthielt als einziger die letzte saubere Kopie der AD-Datenbank. Man musste die Festplatte physisch aus Nigeria nach London fliegen, um das gesamte weltweite Netzwerk von diesem einen Punkt aus neu aufzubauen.“
Schaden: Über 300 Millionen Dollar und wochenlanger Stillstand.
Fallstudie 2: OVHcloud (Das Backup-Standort-Debakel)
„Im März 2021 brannte das Rechenzentrum SBG2 des Cloud-Anbieters OVHcloud in Straßburg komplett nieder.“
Die Ursache im Bereich Backup:
„Viele Kunden dachten, sie seien sicher, weil sie ein ‚Backup-Paket‘ gebucht hatten. Doch das Desaster-Management versagte auf fundamentaler Ebene:
Mangelnde geografische Redundanz: Bei vielen Kunden wurden die Backups im selben Gebäude oder im selben Brandabschnitt wie die Produktionsserver gelagert. Als das Gebäude brannte, verbrannten die Primärdaten UND die Backups gleichzeitig.
AD-Spezifisch: Für Unternehmen, die ihre Domain Controller in dieser Cloud betrieben, bedeutete das: Selbst wenn sie die Server an einem anderen Standort neu aufsetzen konnten, fehlten die AD-Backups für den Restore. Ohne AD konnten sich Mitarbeiter nicht anmelden, E-Mails funktionierten nicht, die Berechtigungsstrukturen waren weg.“
Lehre: Ein Backup, das am selben Ort wie die Quelle liegt, ist kein Backup, sondern nur eine Kopie.
Fallstudie 3: Code Spaces (2014) – Das „Cloud-Todesurteil“
Dieses Beispiel ist das ultimative Warnsignal für unzureichende Backup-Isolierung.
Der Vorfall: Code Spaces war ein Hosting-Anbieter für Software-Entwicklungsprojekte. Ein Angreifer verschaffte sich Zugriff auf das AWS-Kontrollzentrum (die Verwaltungskonsole) des Unternehmens.
Das Problem: Der Angreifer versuchte zunächst, das Unternehmen zu erpressen. Als Code Spaces versuchte, den Zugriff zurückzuerlangen und den Angreifer auszusperren, reagierte dieser mit massiver Zerstörung.
Die Ursache im Bereich Backup:
Keine logische Trennung: Code Spaces hatte zwar Backups, aber diese lagen im selben AWS-Account wie die Produktionsdaten.
Vollständige Löschung: In nur 12 Stunden löschte der Angreifer fast alle Daten, Backups, Maschinen-Images und Offsite-Snapshots. Da die Backups nicht „unveränderlich“ (immutable) oder in einem separaten, luftdicht getrennten Account gesichert waren, konnte ein einziger kompromittierter Admin-Zugang alles vernichten.
Die Konsequenz: Code Spaces musste den Betrieb einstellen. Das Unternehmen war innerhalb eines Tages bankrott, da es keine Daten mehr hatte, um seinen Kunden den Service anzubieten.
Lehre: Backups müssen logisch und administrativ vom Primärsystem getrennt sein (z.B. ein separates Cloud-Abo mit MFA, das niemand aus dem normalen IT-Team im Alltag nutzt).
Fallstudie 4: Norsk Hydro (2019) – Zurück in die Steinzeit
Dieses Beispiel zeigt, was passiert, wenn man zwar Backups hat, das AD aber so tiefgreifend zerstört ist, dass der Wiederaufbau Wochen dauert.
Der Vorfall: Der norwegische Aluminium-Riese Norsk Hydro wurde Opfer der Ransomware LockerGoga. Die Angreifer infiltrierten das Netzwerk über ein infiziertes E-Mail-Attachment und erlangten weitreichende Rechte im Active Directory.
Das Problem: Die Ransomware verschlüsselte nicht nur Dateien, sondern griff gezielt die Infrastruktur an. Norsk Hydro musste alle 35.000 Mitarbeiter weltweit offline nehmen.
Die Ursache im Bereich AD/Recovery:
Zerstörung der Vertrauensstellung: Die Angreifer hatten das AD so manipuliert, dass man den bestehenden Benutzerkonten und Server-Zertifikaten nicht mehr trauen konnte.
Komplexität des Wiederaufbaus: Obwohl Backups vorhanden waren, war das Active Directory so komplex und weltweit verstrickt, dass ein einfacher „Restore“ nicht ausreichte. Man musste jeden einzelnen Domain Controller manuell prüfen und reinigen, um sicherzustellen, dass keine Backdoors der Hacker im Backup mit-synchronisiert wurden.
Die Konsequenz: Eines der modernsten Industrieunternehmen der Welt musste auf „Papier und Bleistift“ umstellen. Mitarbeiter in den Fabriken nutzten Walkie-Talkies und handgeschriebene Listen, um die Produktion am Laufen zu halten. Der Schaden belief sich auf ca. 70 Millionen Euro.
Lehre: Ein AD-Backup nützt wenig, wenn man nicht beweisen kann, dass das Backup „sauber“ ist. Man braucht einen Plan für einen „Clean Source Restore“.
Es gibt hunderte Vorfälle, aber …
– für einen Internet Security Manager sind vor allem die Fälle lehrreich, die systemische Schwachstellen in der Infrastruktur aufzeigen.
Eine kategorisierte Liste weiterer Vorfälle, die für die Themen AD-Synchronisation, Backup-Versagen und Disaster Recovery relevant sind:
Kategorie A: Das „Backup-Prozess“-Versagen
Hier waren Backups vorhanden, aber der Prozess oder die Technik dahinter war fehlerhaft.
GitLab (2017):
Was passierte: Ein Administrator löschte versehentlich 300 GB Live-Produktionsdaten.
Das Versagen: GitLab hatte fünf verschiedene Backup-Mechanismen. Keiner davon funktionierte im Ernstfall (falsche Versionen, leere Dateien, nicht gestartete Snapshots).
Lehre: „Ein Backup existiert erst, wenn der Restore-Test erfolgreich war.“
Universität Kyoto (2021):
Was passierte: Bei einem Software-Update des Backup-Systems wurden 77 Terabyte an Forschungsdaten von 14 verschiedenen Forschungsgruppen unwiderruflich gelöscht.
Das Versagen: Ein Fehler im Backup-Skript löschte die Quelldaten anstatt sie zu sichern.
Lehre: Automatisierte Backup-Skripte müssen strenge Sicherheitsprüfungen durchlaufen, damit sie nicht zum Löschwerkzeug werden.
City of Baltimore (2019):
Was passierte: Ransomware-Angriff (RobbinHood). Die Stadt weigerte sich zu zahlen.
Das Versagen: Es gab keine funktionierenden Offline-Backups kritischer Systeme. Der Wiederaufbau dauerte Monate und kostete 18 Millionen Dollar (das Lösegeld wäre ca. 76.000 Dollar gewesen).
Lehre: Cyber-Versicherungen verlangen heute oft den Nachweis von „Immutable Backups“.
Kategorie B: Identitäts- & AD-Katastrophen
Hier wurde das AD oder das Identitätsmanagement gezielt genutzt, um das Unternehmen zu lähmen.
Sony Pictures (2014):
Was passierte: „Guardians of Peace“ (mutmaßlich Nordkorea) löschten mit einer Wiper-Software fast alle Server.
Das Versagen: Die Angreifer hatten vollständige Kontrolle über das AD. Sie löschten die Domänencontroller und die Zertifikatsserver. Sony konnte keine Computer mehr booten, da die Vertrauensstellung im Netzwerk weg war.
Lehre: AD-Hardening und die Überwachung von privilegierten Konten sind überlebenswichtig.
MGM Resorts (2023):
Was passierte: Social Engineering gegen den IT-Helpdesk verschaffte Angreifern Zugriff auf den Okta-Identity-Provider (Cloud AD).
Das Versagen: Die Angreifer übernahmen die Identitätsverwaltung und verschlüsselten ESXi-Server (Virtualisierung). Da die Identitätsprüfung kompromittiert war, konnten Admins die Angreifer nicht aussperren.
Lehre: MFA schützt nicht vor allem, wenn der Helpdesk schwach ist.
Kategorie C: Konfigurations- & Synchronisations-GAUs
Hier war kein Hacker am Werk, sondern die Technik hat sich durch fehlerhafte Synchronisation selbst „zerfleischt“.
Facebook / Meta (Oktober 2021):
Was passierte: Facebook verschwand für 6 Stunden komplett aus dem Internet.
Das Versagen: Eine fehlerhafte Konfigurationsänderung am BGP (Border Gateway Protocol) wurde global synchronisiert. Dies führte dazu, dass die DNS-Server von Facebook nicht mehr erreichbar waren.
Die Ironie: Da die Mitarbeiter-Ausweise und Türschlösser über das interne Netz (AD-verbunden) liefen, kamen die Ingenieure physisch nicht mehr in das Rechenzentrum, um den Fehler zu beheben.
Lehre: „Out-of-Band“-Management (ein separater Zugang zur Hardware) ist Pflicht.
Knight Capital (2012):
Was passierte: Ein fehlerhaftes Software-Update auf 7 von 8 Servern führte zu unkontrollierten Aktienkäufen.
Das Versagen: Synchronisations-Fehler beim Deployment. Der 8. Server hatte noch alten Code, der die Befehle falsch interpretierte. In 45 Minuten verlor die Firma 440 Millionen Dollar.
Lehre: Rollout-Prozesse müssen absolut synchron und atomar (alles oder nichts) erfolgen.
British Airways (2017):
Was passierte: Ein Techniker trennte versehentlich die Stromzufuhr im Rechenzentrum und schaltete sie dann unsachgemäß wieder ein.
Das Versagen: Die resultierende Spannungsspitze beschädigte die Hardware so stark, dass die Replikation der Datenbanken (darunter das AD und Flugpläne) korrumpierte Daten über alle Standorte verteilte. 75.000 Passagiere saßen fest.
Lehre: Physische Sicherheit und saubere USV-Prozesse sind Teil des Disaster Recovery.
Technische Analyse: Warum AD‑Backups so häufig scheitern
„Die Wiederherstellung eines Active Directory ist deutlich komplexer als das Restore eines klassischen Fileservers. Für Security Manager sind insbesondere drei technische Fallstricke entscheidend:
1. Das Replikations‑Paradoxon
Active Directory basiert auf gegenseitigem Vertrauen zwischen Domain Controllern. Wird ein kompromittiertes Admin‑Konto genutzt, um massenhaft Objekte zu löschen, interpretiert AD dies als legitime Änderung. Die Replikation verteilt diese Löschungen innerhalb weniger Sekunden weltweit auf alle DCs. Konsequenz: Klassische Backup‑ oder Spiegelmechanismen schützen nicht vor „autorisierten“ bösartigen Änderungen.
2. USN‑Rollback
Ein Domain Controller darf nicht einfach per Image‑ oder Snapshot‑Restore zurückgesetzt werden. Ohne die AD‑spezifischen Wiederherstellungsmechanismen verliert der DC den Überblick über seinen Replikationsstand (USN = Update Sequence Number). Folge: Der DC kann nicht mehr korrekt bestimmen, welche Änderungen bereits repliziert wurden. Das führt zu Inkonsistenzen in der gesamten AD‑Datenbank und kann die gesamte Domäne destabilisieren.
3. Zirkuläre Abhängigkeiten
In vielen Umgebungen hängen Backup‑ und Recovery‑Prozesse selbst vom Active Directory ab. Beispiele:
⬤ Zugang zum Passwort‑Tresor nur mit AD‑Authentifizierung
⬤ Backup‑Server benötigt DNS‑Auflösung durch das (bereits ausgefallene) AD Ergebnis: Im Ernstfall blockiert sich die Infrastruktur selbst – kritische Systeme lassen sich nicht mehr starten, weil sie auf das AD angewiesen sind, das eigentlich wiederhergestellt werden müsste.
Fazit & Empfehlungen für Security Manager
„Was wir aus diesen Fällen für unsere zukünftige Arbeit mitnehmen können?
3‑2‑1‑1‑Regel konsequent umsetzen
3 Kopien der Daten
2 unterschiedliche Medien
1 externe Aufbewahrung
1 Offline‑Kopie (Air‑Gapped)
Lehre: Ein isolierter Domain Controller hätte im Fall Maersk den kompletten Wiederaufbau massiv beschleunigt – statt auf einen zufälligen Stromausfall angewiesen zu sein.
AD Forest Recovery Plan (Was dazu gehört)
– Vollständiger, dokumentierter Ablauf zur Wiederherstellung des gesamten AD
– Unabhängig von funktionierendem DNS, AD, PKI oder anderen Domänendiensten
– Enthält Rollenverteilung, Verantwortlichkeiten, Tools, Medien und Notfallpfade
Domänendienste (allgemein)
Dazu gehören u. a.:
AD (Active Directory)
DNS (Domain Name System)
PKI (Public Key Infrastructure)
Kerberos (Authentifizierung)
LDAP (Verzeichniszugriff)
DFS (Dateidienste)
Group Policy Services
Global Catalog
Netlogon
Wenn diese Dienste ausfallen, ist ein regulärer Betrieb oder ein normales Restore kaum möglich — deshalb muss ein AD Forest Recovery Plan ohne diese Abhängigkeiten funktionieren.
Ziel: Auch im Worst Case handlungsfähig bleiben.
Immutable Backups einsetzen
Nutzung von Speichersystemen, die nicht löschbar oder überschreibbar sind
Umsetzung nach dem WORM‑Prinzip (Write Once, Read Many)
Schutz selbst bei vollständiger Kompromittierung von Admin‑Konten
Ergebnis: Backups bleiben intakt – auch unter aktiver Feindeinwirkung.
Restore regelmäßig testen
Ein Backup ist nur so gut wie der nachweislich funktionierende Restore
Geplante und ungeplante Test‑Szenarien durchführen
Ergebnisse dokumentieren und Prozesse kontinuierlich verbessern
Merk,- und Leitsatz: „Ungetestet ist gleich ungesichert.“
Diskussionsfrage
Sucht euch zusammen mit eurem TA je nach verbleibender Zeit ein oder mehrere der folgenden Themen zur Diskussion aus:
1. Wann ist eine Multi-AD-Struktur wirklich notwendig? Gibt es Szenarien, in denen eine Single-Domain-Umgebung sinnvoller wäre?
2. Zentrale vs. dezentrale Verwaltung: Sollte ein Unternehmen seine AD-Domänen zentral steuern oder ist eine standortbezogene Verwaltung effizienter?
3. On-Premises vs. Cloud: Werden klassische On-Premises-ADs in Zukunft durch Cloud-basierte Lösungen wie Azure AD ersetzt?
4. Security vs. Usability: Oft erschweren hohe Sicherheitsanforderungen die Benutzerfreundlichkeit. Wie findet man einen guten Kompromiss in einer Multi-AD-Umgebung?
Notfallpläne: Welche Maßnahmen sollte ein Unternehmen treffen, um einen kompletten Ausfall der AD-Infrastruktur zu verhindern?
1. Multi-AD-Struktur vs. Single-Domain-Umgebung
Wann ist eine Multi-AD-Struktur (mehrere Domains/Forests) notwendig?
Rechtliche & regulatorische Trennung: In Konzernen müssen Tochtergesellschaften oft rechtlich eigenständig bleiben (z. B. wegen Exportkontrollgesetzen oder DSGVO-Vorgaben in verschiedenen Ländern).
Sicherheitsisolation (Administrative Grenzziehung): Wenn ein Teil des Unternehmens extrem hohe Sicherheitsanforderungen hat (z. B. Forschung & Entwicklung oder Produktion/OT), verhindert ein eigener Forest, dass ein kompromittierter Admin der Office-Umgebung Zugriff auf die Kronjuwelen erhält.
Akquisitionen: Bei Firmenkäufen werden AD-Strukturen oft jahrelang parallel betrieben, bevor eine Migration stattfindet.
Wann ist eine Single-Domain-Umgebung sinnvoller?
Komplexitätsreduktion: Jede zusätzliche Domain erhöht den Wartungsaufwand, die Fehleranfälligkeit bei der Synchronisation und die Lizenzkosten.
Zentrale Sichtbarkeit: In einer Domäne lassen sich Gruppenrichtlinien (GPOs) und Sicherheitsupdates konsistenter durchsetzen.
User Experience: Single Sign-On (SSO) funktioniert innerhalb einer Domäne reibungsloser.
Fazit: Der moderne Trend geht zu „Single Forest“, da Microsofts Sicherheitsmodelle heute eher auf logische Trennung (OUs, Tiering) setzen als auf physische Trennung durch Domänen.
2. Zentrale vs. dezentrale Verwaltung
Zentrale Verwaltung:
Vorteile: Hoher Standardisierungsgrad, spezialisierte Experten im Core-Team, bessere Überwachbarkeit (Monitoring/Auditing).
Nachteile: „Flaschenhals“-Effekt bei Anfragen aus Außenstellen, weniger Rücksicht auf lokale Besonderheiten (z. B. lokale Software).
Dezentrale Verwaltung:
Vorteile: Schnelle Reaktionszeiten vor Ort, tiefes Verständnis für lokale Prozesse.
Nachteile: Gefahr von „Wildwuchs“ (Configuration Drift), unterschiedliche Sicherheitsniveaus an verschiedenen Standorten.
Der Best-Practice-Kompromiss:
Zentrales Design & Policy-Hoheit: Die Sicherheitsregeln werden zentral definiert.
Dezentrale Ausführung via RBAC: Lokale IT-Mitarbeiter erhalten nur die Rechte, die sie wirklich brauchen (Role-Based Access Control), um z. B. Passwörter zurückzusetzen oder lokale Rechner zu verwalten, ohne globale Admin-Rechte zu besitzen.
3. On-Premises vs. Cloud (Entra ID / Azure AD)
Werden klassische ADs ersetzt?
Die Realität ist Hybrid: Ein vollständiger Ersatz ist für etablierte Unternehmen schwierig, da viele Legacy-Anwendungen (alte Software) Protokolle wie Kerberos oder LDAP benötigen, die das Cloud-basierte Microsoft Entra ID (ehemals Azure AD) so nicht nativ unterstützt.
Vorteile von Entra ID (Cloud): Natives MFA (Multi-Faktor-Authentifizierung), Conditional Access (Zugriff nur unter bestimmten Bedingungen) und keine Hardware-Wartung.
Vorteile von On-Premises: Volle Kontrolle über die Datenhoheit, Unabhängigkeit von der Internetverbindung, Unterstützung alter Systeme.
Prognose: On-Premises ADs werden zu „Identity-Ankern“ für interne Ressourcen, während die Cloud-Identität (Entra ID) das Tor zur Außenwelt (SaaS, Home-Office) wird. Ein kompletter Verzicht auf On-Prem wird nur für Cloud-Native Startups zum Standard.
4. Security vs. Usability: Der goldene Mittelweg
In einer komplexen Multi-AD-Umgebung nerven häufige Logins und restriktive Regeln die Nutzer.
Lösung 1: Single Sign-On (SSO) & Federation: Der Nutzer meldet sich einmal an seinem PC an und erhält automatisch Zugriff auf alle Ressourcen (Cloud & On-Prem), ohne das Passwort erneut einzugeben.
Lösung 2: Passwordless Authentication: Windows Hello for Business oder FIDO2-Sticks erhöhen die Sicherheit massiv und steigern gleichzeitig den Komfort (kein Merken komplexer Passwörter mehr).
Lösung 3: Conditional Access: Anstatt jeden User zu quälen, wird Security „intelligent“. Wer im Büro sitzt, muss kein MFA nutzen. Wer sich aus einem fremden Land einloggt, wird blockiert oder muss sich stark authentifizieren.
Kernbotschaft: Sicherheit muss unsichtbar werden, um akzeptiert zu werden.
5. Notfallpläne: Den Totalausfall verhindern
Um ein Szenario wie bei Maersk zu verhindern, sind folgende Maßnahmen kritisch:
Active Directory Tiering Modell: Trennung der Administrations-Ebenen. Ein PC-Admin darf sich niemals an einem Domain Controller anmelden. Das verhindert, dass Angreifer Anmeldedaten von privilegierten Konten abgreifen (Pass-the-Hash).
Offline-Backup des AD (Air-Gap): Mindestens ein Backup der Domäne muss physikalisch vom Netzwerk getrennt sein (z. B. auf Band oder in einem unveränderbaren Cloud-Speicher), damit Ransomware es nicht löschen kann.
Break-Glass-Accounts: Notfall-Accounts, die hochprivilegiert sind, aber deren Zugangsdaten physisch (im Tresor) hinterlegt sind. Diese Accounts dürfen nicht von der Synchronisation oder MFA abhängig sein, falls das Cloud-System oder der Sync-Dienst ausfällt.
Regelmäßige Disaster Recovery Tests: Einmal im Jahr muss die Wiederherstellung eines kompletten „AD Forests“ auf isolierter Hardware geübt werden.
Hardened Domain Controllers: DCs sollten keine Internetverbindung haben, keinen Browser installiert haben und nur für die Authentifizierung da sein – keine anderen Dienste (wie Fileserver) auf einem DC!
Von Jens Ihle
Hood Informatik
Interessante Beiträge aus der Welt des Netzwerken – Netzwerkprotokolle: HTTP, FTP, SMTP & DNS
Von Jens Ihle
Windows-Server 2022
YouTube‑Kanal mit 144 Schulungsvideos zu Konfiguration und Best Practices für Windows Server 2022.
Windows-Server 2025
YouTube-Kanal zu Windows Server 2025 Step By Step mit 58 Schulungs-Videos in Kürze erklärt.
Ein Windows Server 2022 in Hyper-V soll mit einer Netzwerk-Brücke über Kabel-Verbindung (z.B. Fritzbox / Speedboot) für Updates mit dem Internet über die normale Kabel-Verbindung verbunden werden.
Von Jens Ihle
Schritte zur Einrichtung
1. Aktiven Netzwerkadapter des Hosts identifizieren
Ort: Host-System (nicht VM) Tool PowerShell
Get-NetAdapter | Where-Object Status -eq 'Up'
→ Zeigt alle aktiven Adapter mit Namen und InterfaceDescription. Beispiel:
Name: InterfaceDescription:
Ethernet: Intel(R) Ethernet Connection
2. Neuen externen Switch in Hyper-V erstellen
Ort: Hyper-V Manager → Manager für virtuelle Switches
Typ: „Externer virtueller Switch“
Verbindungstyp: „Externes Netzwerk“
Adapter auswählen: z. B. Ethernet (normale Kabelverbindung des Hosts)
Switch benennen: z. B. „Externer Switch Kabelverbindung“
VLAN-ID deaktivieren (optional)
Speichern mit „Anwenden“
3. VM mit dem neuen Switch verbinden
Ort: Hyper-V Manager → Einstellungen der VM → Netzwerkadapter
Netzwerkadapter auswählen
Verbinden mit: „Externer Switch Kabelverbindung“
Speichern und VM neu starten
4. Internet Connection Sharing (ICS) aktivieren
Ort: Host-System → Netzwerkverbindungen (ncpa.cpl) → Eigenschaften des aktiven Adapters
Rechtsklick auf Ethernet (normale Kabelverbindung)
Registerkarte „Freigabe“
Checkbox aktivieren: „Anderen Benutzern im Netzwerk gestatten …“
Heimnetzwerkverbindung auswählen: vEthernet (Externer virtueller Switch)
Mit „OK“ bestätigen
→ Der Host agiert nun als NAT-Router für die VM
5. Verbindung in der VM prüfen
Ort: VM (Windows Server 2022) Tool: Eingabeaufforderung oder PowerShell
ipconfig
ping 8.8.8.8
ping google.com
→ Wenn ping 8.8.8.8 funktioniert, aber ping google.com nicht → DNS manuell setzen
6. DNS manuell an VM konfigurieren (falls nötig)
Ort: VM → Netzwerkadapter → IPv4-Einstellungen
DNS-Server manuell eintragen:
Bevorzugt: 8.8.8.8
Alternativ: 1.1.1.1
7. DNS manuell am BS konfigurieren (falls nötig)
Ort: Host-System → Netzwerkadapter → IPv4-Einstellungen + IPv6-Einstellungen

Hinweise
– Das Netzwerk funktioniert nur zuverlässig mit aktivierter Internet Connection Sharing (ICS)
– ICS funktioniert nur zuverlässig auf kabelgebundenen Adaptern. WLAN kann nicht direkt gebridget werden, hier ist ebenfalls ICS oder NAT erforderlich.
– Windows-Firewall kann die Verbindung der VM blockieren. Firewall-Regeln für die VM oder den ICS-Adapter sollten überprüft werden.
– ICS vergibt IP-Adressen im Bereich 192.168.137.x. Wenn dieser Bereich im Netzwerk bereits genutzt wird, kann es zu IP-Konflikten kommen.
– DNS-Probleme treten häufig bei ICS auf, daher ist eine manuelle DNS-Konfiguration mit öffentlichen DNS-Servern (z. B. Google 8.8.8.8) empfehlenswert.
– Nach Änderungen an Netzwerk- oder ICS-Einstellungen sollte die VM neu gestartet werden, damit alle Einstellungen greifen.
– Alternative: Falls ICS zu kompliziert ist oder nicht funktioniert, kann ein NAT-Switch in Hyper-V eingerichtet werden, der die Internetverbindung teilt.
– Diese Schritte ermöglichen es, eine VM über einen alternativen Netzwerkpfad ins Internet zu bringen.
Ein Windows Server 2022 in Hyper-V soll über einen zweiten externen Switch mit dem Internet verbunden werden, insbesondere wenn der Host über USB-Tethering (z. B. Smartphone) online ist.
Von Jens Ihle
Das Problem
Die Verbindung über USB-Tethering stellt Hyper-V vor mehrere technische Herausforderungen. Hier sind die Hauptgründe, warum dies oft problematisch ist:
1. Fehlende Bridge-Fähigkeit (MAC-Adressen)
Ein „Externer Switch“ in Hyper-V funktioniert normalerweise wie eine Bridge: Er erlaubt der VM, eine eigene, echte MAC-Adresse im Netzwerk zu verwenden.
Das Problem: USB-Tethering-Verbindungen (meist über das RNDIS-Protokoll- Remote Network Driver Interface Specification) sind Point-to-Point-Verbindungen. Sie sind nicht darauf ausgelegt, mehrere MAC-Adressen über eine einzige Schnittstelle zu verwalten.
Die Folge: Der Netzwerkstack des Smartphones (oder des Treibers) verwirft Pakete, die von der MAC-Adresse der VM kommen, da er nur die MAC-Adresse des Host-PCs erwartet.
W i c h t i g:
Bei einer kabelgebundenen Verbindung nutzt ein Server:
Ethernet (IEEE 802.3) → Arbeitet mit MAC‑Adressen
Unterstützt Bridging / Switching
Kann beliebig viele MAC‑Adressen über dieselbe physische Schnittstelle transportieren (z. B. für VMs)
Ist für LAN‑Infrastruktur ausgelegt (Switches, VLANs, Routing usw.)
Ein Hyper‑V‑„Externer Switch“ funktioniert wie ein Layer‑2‑Bridge/Switch. Das klappt nur, wenn die physische Netzwerkschnittstelle mehrere MAC‑Adressen akzeptiert – was Ethernet problemlos kann.
Kernaussage:
→ Kabelgebunden: Ethernet (IEEE 802.3) → unterstützt mehrere MAC‑Adressen
→ USB‑Tethering: RNDIS → unterstützt nur eine MAC‑Adresse
2. NAT-on-NAT (Doppeltes NAT)
Das Smartphone selbst fungiert bereits als Router und führt NAT (Network Address Translation) aus, um die Mobilfunk-IP an das Endgerät weiterzugeben.
Das Problem: Da Bridging (siehe Punkt 1) oft fehlschlägt, muss man auf dem Host ICS (Internet Connection Sharing) nutzen. ICS ist im Grunde ein zweiter NAT-Dienst.
Die Folge: Die VM sitzt hinter zwei Routern (Smartphone -> Windows Host -> VM). Dies führt oft zu Problemen bei VPNs, speziellen Protokollen und der Zeitüberschreitung von Verbindungen.
3. Instabilität des RNDIS-Treibers
USB-Tethering nutzt unter Windows den RNDIS-Treiber (Remote Network Driver Interface Specification).
Das Problem: Dieser Treiber ist für Endanwender-Szenarien gedacht, nicht für Server-Virtualisierung. Er ist anfällig für Latenzspitzen und Verbindungsabbrüche, wenn der USB-Bus unter Last steht oder das Smartphone in den Energiesparmodus wechselt. Hyper-V reagiert sehr empfindlich auf Netzwerkadapter, die kurzzeitig „verschwinden“.
4. DNS-Relay-Probleme bei ICS
ICS (Internet Connection Sharing) beinhaltet einen sehr einfachen DHCP- und DNS-Dienst.
Das Problem: Dieser Dienst leitet DNS-Anfragen oft nicht korrekt an die DNS-Server des Mobilfunkanbieters weiter oder antwortet zu langsam.
Die Folge: Die VM hat zwar eine IP-Verbindung (Ping auf 8.8.8.8 geht), kann aber keine Webseiten auflösen (DNS-Fehler). Deshalb ist die manuelle Konfiguration eines stabilen DNS (z. B. 1.1.1.1) in der VM fast immer notwendig.
Zusammenfassung
Das Hauptproblem ist, dass USB-Tethering keine echte Layer-2-Ethernet-Verbindung ist. Hyper-V benötigt für einen externen Switch aber genau diese Transparenz auf Hardware-Ebene. ICS ist dann nur ein „Workaround“, um die Layer-3-Ebene (IP) mühsam tunneln zu können.
Schritte zur Einrichtung
1. Aktiven Netzwerkadapter des Hosts identifizieren
Ort: Host-System (nicht VM) Tool PowerShell
Get-NetAdapter | Where-Object Status -eq 'Up'
→ Zeigt alle aktiven Adapter mit Namen und InterfaceDescription. Beispiel:
Name: InterfaceDescription:
Ethernet 8 SAMSUNG Mobile USB Remote NDIS Network Device #5
2. Neuen externen Switch in Hyper-V erstellen
Ort: Hyper-V Manager → Manager für virtuelle Switches
Typ: „Externer virtueller Switch“
Verbindungstyp: „Externes Netzwerk“
Adapter auswählen: z. B. SAMSUNG Mobile USB Remote NDIS Network Device #5
Switch benennen: z. B. „Externer Switch USB-Tethering“
VLAN-ID deaktivieren (optional)
Speichern mit „Anwenden“
3. VM mit dem neuen Switch verbinden
Ort: Hyper-V Manager → Einstellungen der VM → Netzwerkadapter
Netzwerkadapter auswählen
Verbinden mit: „Externer Switch USB-Tethering“
Speichern und VM neu starten
4. Internet Connection Sharing (ICS) aktivieren
Ort: Host-System → Netzwerkverbindungen (ncpa.cpl) → Eigenschaften des aktiven Adapters
Rechtsklick auf Ethernet 8 (SAMSUNG USB)
Registerkarte „Freigabe“
Checkbox aktivieren: „Anderen Benutzern im Netzwerk gestatten …“
Heimnetzwerkverbindung auswählen: vEthernet (Externer virtueller Switch)
Mit „OK“ bestätigen
→ Der Host agiert nun als NAT-Router für die VM
5. Verbindung in der VM prüfen
Ort: VM (Windows Server 2022) Tool: Eingabeaufforderung oder PowerShell
ipconfig
ping 8.8.8.8
ping google.com
→ Wenn ping 8.8.8.8 funktioniert, aber ping google.com nicht → DNS manuell setzen
6. DNS manuell an VM konfigurieren (falls nötig)
Ort: VM → Netzwerkadapter → IPv4-Einstellungen
DNS-Server manuell eintragen:
Bevorzugt: 8.8.8.8
Alternativ: 1.1.1.1
7. DNS manuell am BS konfigurieren (falls nötig)
Ort: Host-System → Netzwerkadapter → IPv4-Einstellungen + IPv6-Einstellungen

Hinweise
– USB-Tethering funktioniert nur zuverlässig mit aktivierter ICS
– WLAN kann nicht direkt gebridget werden, ebenfalls ICS oder NAT erforderlich
– DNS-Probleme sind häufig bei ICS – manuelle Konfiguration empfohlen
Diese Schritte ermöglichen es, eine VM über einen alternativen Netzwerkpfad ins Internet zu bringen, insbesondere in mobilen oder eingeschränkten Umgebungen.
Durchsichtige (?) Wände ↑
Angriff auf das Heimnetzwerk ↑
Die Tricks der Cyberkriminellen ↑
Peilnetzwerk der Bundesnetzagentur ↑
Netzwerk-Tools für Mobile, Tablet & PC

IP Widget
IP-Widget das den Namen des Mobilfunkbetreibers sowie die Mobilfunk-IP Adresse, oder die WLAN-SSID sowie die WLAN-IP anzeigt.

Cell Widget
Widget zur Anzeige von:
– Netzbetreiber Name
– MCC (Mobile Country, Network)
– Geschwindigkeit
– IP v4 + v6
Hinweis:
Es sollten sich tatsächlich die einzelnen Einstellungen angesehen werden. Teilweise etwas versteckt, dennoch sehr mächtig und Umfangreich wie z.B. das Cell Widget von Dieter Thiess bietet alle Einblicke in dein Netzwerk.

GlassWire
GlassWire ist eine Netzwerk-überwachungs- und Sicherheitsplattform, zeigt – hübsch aufbereitet – welche Applikation, Daten wohin sendet.
→ App für Android & Tablet
Ein Angebot des Unternehmen Domotz. (Für Managed Service Provider (MSP), Systemintegrator oder interne IT-Abteilung – Domotz unterstützt Netzwerke zu Verwalten und zu steuern.)
→ domotz.com

nPerf
– gibt Einblicke, Weltweit, egal was Anbieter in der Werbung erzählen.
Die 4G / 5G Download-Bitraten* der Telekom, Vodafon oder O² im Bundesgebiet in Echtzeit.
Auch können andere Anbieter Weltweit 2G bis 5G (z.B. Urlaubsreisen), auf der Webseite “nPerf” in Echtzeit eingesehen werden.
→ App für Android & Tablet

Scrcpy
Android Smartphone oder Tablet mit scrcpy über USB oder WLAN steuern. Kostenloses und quelloffenes Android-Bildschirmspiegelungstool für Windows, macOS und Linux.
→ Download Scrcpy (von Github)

RTR-Netztest
Der RTR-Netztest stellt Informationen über die aktuelle Dienstequalität (ua Upload, Download, Ping, Signalstärke) des Internetzugangs zur Verfügung. Darüber hinaus sind Statistiken, periodische Test`s und eine Kartendarstellung abrufbar.
→ für Apple-Geräte
→ für Android-Geräte

Traffic Monitor
TrafficMonitor ist eine Netzwerküberwachungs-software mit schwebendem Fenster für Windows.
– Internet- Geschwindigkeit
– Überwachung der CPU- und RAM-Auslastung
– Temperatur von CPU, GPU, Festplatte und Motherboard
– CPU-Frequenzüberwachung
– GPU-Auslastungsüberwachung
– Festplattennutzungsüberwachung
– Details zur Netzwerkverbindung
– Ändern Sie das Design des Hauptfensters
Zu den weiteren Funktionen gehören eine integrierte Anzeige in der Taskleiste. Ein sehr mächtiges und anpassbares Tool!
→ Download (von GitHup)
PowerShell
Von Jens Ihle | Mit Unterstützung unseres Dozenten Alex
Wer seinen Code auf Fehler prüfen möchte.
Manchmal ist es nur ein: „,“ 🙂
Der Hinweis zu Best Practices wurde mit dem Modul „PSScriptAnalyzer“ gelöst.
Dauerhafte Freigabe der PowerShell (PowerShell als Administrator starten)

oder nur für das aktuelle Fenster (am sichersten)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
Was dieser Code genau macht:
Stufe 1 (Der Parser – Die „Grammatik-Prüfung“):
Struktur-Check: Prüft, ob du Klammern vergessen hast { [ ( oder ob diese falsch verschachtelt sind.
Zeichenketten: Identifiziert nicht geschlossene Anführungszeichen “ ‚, die oft dazu führen, dass der gesamte restliche Code als Text interpretiert wird.
Logik-Fundament: Erkennt harte Syntax-Fehler wie falsche Operatoren (z. B. 1 + / 2) oder ungültige Variablennamen.
Vorteil: Er arbeitet extrem schnell (Millisekunden), zeigt die exakte Zeile des Fehlers und bildet die Basis für alle weiteren Stufen.
Stufe 2 (Commandlet-Check – Die „Existenz-Prüfung“):
AST-Technologie: Das Script nutzt den sogenannten AST (Abstract Syntax Tree). Im Gegensatz zu einer einfachen Textsuche versteht das Script die echte Struktur und weiß genau, was ein Befehl, ein Parameter oder ein einfacher Textwert ist.
Lokaler Abgleich: Es führt für jeden identifizierten Befehl ein Get-Command im Hintergrund aus.
Fehlererkennung: Wenn du z. B. Get-Hundekuchen oder Invoke-Zaubertrick schreibst, prüft das Script gegen alle auf deinem Windows-PC installierten Module. Ist der Befehl unbekannt, erhältst du eine Warnung mit Zeilennummer.
Stufe 3 (PSScriptAnalyzer – Die „Best-Practice-Prüfung“):
Intelligentes Nachladen: Das Script prüft, ob das Profi-Modul PSScriptAnalyzer lokal vorhanden ist. Falls nicht, wird es automatisch über die PowerShell Gallery (Online) für den aktuellen Nutzer installiert – ohne dass Admin-Rechte erforderlich sind.
Qualitäts-Check: Es findet „schlechten Stil“, wie z. B. die Verwendung von Aliasen (ls statt Get-ChildItem, ps statt Get-Process) oder unbenutzte Variablen.
Was wäre ohne PSScriptAnalyzer? Du würdest:
– mehr Zeit mit Debugging verbringen
– mehr Fehler erst im Betrieb entdecken
– weniger konsistenten Code haben
– Sicherheitsrisiken leichter übersehen
– Best Practices nur durch Erfahrung oder Zufall lernen
Kurz: Du arbeitest „blind“ und hoffst, dass alles gutgeht.
Sicherheit: Es warnt vor riskanten Praktiken, wie z. B. im Code hartgespeicherten Passwörtern oder unsicheren Befehlskombinationen.
Besonderheiten der „Smart-Logik“ in diesem Script:
Kein Abbruch: Im Gegensatz zum Standard-Verhalten von PowerShell bricht dieses Script niemals ab. Es versucht, so viele Informationen wie möglich über das gesamte Dokument zu sammeln.
Anti-Rauschen-Filter (Folgefehler-Unterdrückung): Wenn in einer Zeile bereits ein harter Syntaxfehler (Stufe 1) gefunden wurde, werden weitere Warnungen (Stufe 2 & 3) für dieselbe Zeile unterdrückt. Das verhindert, dass du von 20 Fehlermeldungen überschwemmt wirst, die alle nur eine einzige Ursache haben.
UTF8-Konformität: Durch die explizite Codierung werden Umlaute (ä, ö, ü) und Sonderzeichen sowohl in der Windows-Konsole als auch in der Logdatei auf dem Desktop korrekt dargestellt.
Professionelles Logging: Alle Ergebnisse werden sortiert nach Zeilennummern ausgegeben und gleichzeitig dauerhaft in einer Datei: „FullAnalysis.log“ auf deinem Desktop gespeichert.
Download:
Das Modul „PSScriptAnalyzer„wird standardmäßig aus der PowerShell Gallery geladen. Das ist das offizielle, von Microsoft betriebene Zentralregister für PowerShell-Erweiterungen.
Webseite (zum Ansehen):
https://www.powershellgallery.com/packages/PSScriptAnalyzer
API-Schnittstelle (wo die PowerShell technisch anfragt):
https://www.powershellgallery.com/api/v2
Hintergrundinfo:
Sicherheit: Die PowerShell Gallery ist der weltweite Standard für PowerShell-Module. Microsoft scannt die dort hochgeladenen Module automatisch auf bekannte Schadsoftware.
Provider: Um den Download durchzuführen, nutzt Windows im Hintergrund einen sogenannten „Provider“ namens NuGet.
Das Modul PSScriptAnalyzer ist ein Analysewerkzeug für PowerShell‑Code. Es prüft Skripte und Module statisch, also ohne sie auszuführen, und bewertet deren Qualität anhand eines umfangreichen Regelwerks. Diese Regeln basieren auf Best Practices, die vom PowerShell‑Team und der Community entwickelt wurden.
Vertrauenswürdigkeit: Wenn du das Modul zum allerersten Mal lädst, fragt PowerShell: „Möchten Sie das Modul aus dem unvertrauenswürdigen Repository installieren?“. Das Modul PSScriptAnalyzer ist ein Analysewerkzeug für PowerShell‑Code. Es prüft Skripte und Module statisch, also ohne sie auszuführen, und bewertet deren Qualität anhand eines umfangreichen Regelwerks. Diese Regeln basieren auf Best Practices, die vom PowerShell‑Team und der Community entwickelt wurden. Das liegt daran, dass die PowerShell Gallery standardmäßig als „Untrusted“ markiert ist, um sicherzustellen, dass der Nutzer den Download bewusst bestätigt.
Zusammenfassend: Es ist vergleichbar mit dem „App Store“ oder „Google Play Store“, nur eben speziell für PowerShell-Befehle und betrieben von Microsoft.
<#
============================================================
PROFI POWERSHELL SMART-ANALYZER (Safe-Version)
============================================================
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$ScriptPath
)
# UTF8-Fix fuer Konsole
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# Pfad fuer das Log auf dem Desktop ermitteln
$desktop = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::Desktop)
$LogFile = Join-Path $desktop "FullAnalysis.log"
# Ergebnisspeicher
$AnalysisResults = @()
function Add-Result {
param($Line, $Type, $Message, $Level)
$obj = [PSCustomObject]@{
Line = $Line
Type = $Type
Message = $Message
Level = $Level
}
$script:AnalysisResults += $obj
}
# --- 1. DATEI LADEN ---
if (-not (Test-Path $ScriptPath)) {
Write-Host "FEHLER: Datei nicht gefunden." -ForegroundColor Red
return
}
try {
$Code = Get-Content $ScriptPath -Raw -Encoding UTF8 -ErrorAction Stop
$CodeLines = $Code -split '\r?\n'
} catch {
Write-Host "FEHLER: Datei konnte nicht gelesen werden." -ForegroundColor Red
return
}
Write-Host "--- STARTE VOLLSTAENDIGE ANALYSE ---" -ForegroundColor Cyan
# --- 2. SCHRITT: SYNTAX-ANALYSE (Parser) ---
$errors = @()
$ast = [System.Management.Automation.Language.Parser]::ParseInput($Code, [ref]$null, [ref]$errors)
foreach ($err in $errors) {
Add-Result -Line $err.Extent.StartLineNumber -Type "SYNTAX" -Message $err.Message -Level "ERROR"
}
# --- 3. SCHRITT: COMMANDLET-EXISTENZ (AST) ---
$commands = $ast.FindAll({ $args[0] -is [System.Management.Automation.Language.CommandAst] }, $true)
foreach ($cmdAst in $commands) {
$cmdName = $cmdAst.GetCommandName()
if ($cmdName -and $cmdName -notmatch '\$|\\|\/') {
if (-not (Get-Command $cmdName -ErrorAction SilentlyContinue)) {
$existing = $AnalysisResults | Where-Object { $_.Line -eq $cmdAst.Extent.StartLineNumber -and $_.Type -eq "SYNTAX" }
if (-not $existing) {
Add-Result -Line $cmdAst.Extent.StartLineNumber -Type "BEFEHL" -Message "Befehl '$cmdName' unbekannt." -Level "WARN"
}
}
}
}
# --- 4. SCHRITT: BEST PRACTICE (Online-Modul) ---
if (-not (Get-Module -ListAvailable -Name PSScriptAnalyzer)) {
Write-Host "Info: Modul PSScriptAnalyzer wird geladen..." -ForegroundColor Gray
try { Install-Module -Name PSScriptAnalyzer -Scope CurrentUser -Force -Confirm:$false -ErrorAction SilentlyContinue } catch {}
}
if (Get-Module -ListAvailable -Name PSScriptAnalyzer) {
$analyzerResults = Invoke-ScriptAnalyzer -Path $ScriptPath -ErrorAction SilentlyContinue
foreach ($res in $analyzerResults) {
$existing = $AnalysisResults | Where-Object { $_.Line -eq $res.Line -and $_.Type -eq "SYNTAX" }
if (-not $existing) {
Add-Result -Line $res.Line -Type "STIL" -Message $res.Message -Level "INFO"
}
}
}
# --- 5. AUSGABE ---
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm"
"--- Analyse vom $timestamp ---" | Out-File $LogFile -Append -Encoding UTF8
if ($AnalysisResults.Count -eq 0) {
Write-Host "Keine Fehler gefunden!" -ForegroundColor Green
} else {
foreach ($res in ($AnalysisResults | Sort-Object Line)) {
$color = switch($res.Level) { "ERROR" {"Red"} "WARN" {"Yellow"} "INFO" {"White"} }
$msg = "[Zeile $($res.Line)] [$($res.Type)] $($res.Message)"
Write-Host $msg -ForegroundColor $color
$msg | Out-File $LogFile -Append -Encoding UTF8
if ($res.Line -gt 0 -and $res.Line -le $CodeLines.Count) {
Write-Host " Code: $($CodeLines[$res.Line-1].Trim())" -ForegroundColor Gray
}
}
}
Write-Host "--- ANALYSE BEENDET ---" -ForegroundColor Cyan
Write-Host "Log: $LogFile"
Speichern als: „Check-MyScript.ps1„
TestCode
<#
============================================================
ULTIMATIVER TEST-CODE FÜR SMART-ANALYZER
============================================================
Dieses Script enthält absichtliche Fehler für alle Stufen:
1. Syntax-Fehler (Parser)
2. Unbekannte Befehle (AST/Commandlet-Check)
3. Best-Practice-Verstöße (PSScriptAnalyzer)
============================================================
#>
# --- STUFE 3: Best-Practice & Stil (PSScriptAnalyzer) ---
$NichtGenutzteVariable = "Ich werde definiert, aber nie aufgerufen"
dir C:\Windows # FEHLER: 'dir' ist ein Alias (sollte Get-ChildItem sein)
echo "Hallo" # FEHLER: 'echo' ist ein Alias (sollte Write-Output sein)
# --- STUFE 2: Unbekannte Commandlets (Existenz-Prüfung) ---
Start-GalaxyWarp -Speed 10 # FEHLER: Dieser Befehl existiert nicht
Get-KaffeeInventar -Sorte "Arabica" # FEHLER: Unbekannter Befehl
# --- STUFE 1: Harte Syntax-Fehler (Parser) ---
# FEHLER: Ein If-Block ohne schließende Klammer '}'
if ($true) {
Write-Host "Die Klammer unter mir fehlt!"
# FEHLER: Ein String, bei dem das schließende Anführungszeichen fehlt
$Fehlermeldung = "Hier wurde das Ende der Zeichenkette vergessen
Speichern als: „TestFehler.ps1„
Script aufrufen:
# 1. Ausführung von eigenen Scripten erlauben (falls noch nicht dauerhaft gesetzt)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
# 2. In deinen Projektordner wechseln
cd "E:\1.) Archiv New\CloudCommand\Neu\Code\SecurityFramework\"
# 3. Die Konsole auf UTF8 einstellen (für schöne Umlaute)
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# 4. Den Checker auf die Testdatei starten
.\Check-MyScript.ps1 -ScriptPath ".\TestFehler.ps1"
Analyse startet:
PS C:\WINDOWS\system32> # 1. Ausführung von eigenen Scripten erlauben (falls noch nicht dauerhaft gesetzt)
PS C:\WINDOWS\system32> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
PS C:\WINDOWS\system32>
PS C:\WINDOWS\system32> # 2. In deinen Projektordner wechseln
PS C:\WINDOWS\system32> cd "E:\1.) Archiv New\CloudCommand\Neu\Code\SecurityFramework\"
PS E:\1.) Archiv New\CloudCommand\Neu\Code\SecurityFramework>
PS E:\1.) Archiv New\CloudCommand\Neu\Code\SecurityFramework> # 3. Die Konsole auf UTF8 einstellen (für schöne Umlaute)
PS E:\1.) Archiv New\CloudCommand\Neu\Code\SecurityFramework> [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
PS E:\1.) Archiv New\CloudCommand\Neu\Code\SecurityFramework>
PS E:\1.) Archiv New\CloudCommand\Neu\Code\SecurityFramework> # 4. Den Checker auf die Testdatei starten
PS E:\1.) Archiv New\CloudCommand\Neu\Code\SecurityFramework> .\Check-MyScript.ps1 -ScriptPath ".\TestFehler.ps1"
--- STARTE VOLLSTAENDIGE ANALYSE ---
Info: Modul PSScriptAnalyzer wird geladen... # 5. Bestätige den Download von Modul PSScriptAnalyzer
Abfrage zum Download von: „Modul PSScriptAnalyzer„.
Was es macht:
– Analysiert PowerShell‑Code auf Fehler, Warnungen und Stilprobleme.
– Erkennt typische Stolperfallen, z. B. uninitialisierte Variablen, unsichere Befehle wie „Invoke-Expression“ oder unsaubere Formatierung.
– Gibt konkrete Verbesserungsvorschläge, sogenannte DiagnosticResults.
– Unterstützt anpassbare Regelsets, sodass du eigene Regeln aktivieren, deaktivieren oder definieren kannst.
– Kann Code automatisch formatieren, um ein einheitliches Erscheinungsbild sicherzustellen.
Der NuGet-Anbieter ist erforderlich, um den Vorgang fortzusetzen.
PowerShellGet erfordert die NuGet-Anbieterversion 2.8.5.201 oder höher für die Interaktion mit NuGet-basierten
Repositorys. Der NuGet-Anbieter muss in "C:\Program Files\PackageManagement\ProviderAssemblies" oder
"C:\Users\jihle\AppData\Local\PackageManagement\ProviderAssemblies" verfügbar sein. Sie können den NuGet-Anbieter auch
durch Ausführen von 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force' installieren. Möchten Sie
den NuGet-Anbieter jetzt durch PowerShellGet installieren und importieren lassen?
[J] Ja [N] Nein [H] Anhalten [?] Hilfe (Standard ist "J"): J

Das finale Ergebnis bei fehlerhaften Code:
[Zeile ] [STIL] Missing BOM encoding for non-ASCII encoded file 'TestFehler.ps1'
[Zeile 13] [STIL] The variable 'NichtGenutzteVariable' is assigned but never used.
Code: $NichtGenutzteVariable = "Ich werde definiert, aber nie aufgerufen"
[Zeile 14] [STIL] 'dir' is an alias of 'Get-ChildItem'. Alias can introduce possible problems and make scripts hard to maintain. Please consider changing alias to its full content.
Code: dir C:\Windows # FEHLER: 'dir' ist ein Alias (sollte Get-ChildItem sein)
[Zeile 15] [STIL] 'echo' is an alias of 'Write-Output'. Alias can introduce possible problems and make scripts hard to maintain. Please consider changing alias to its full content.
Code: echo "Hallo" # FEHLER: 'echo' ist ein Alias (sollte Write-Output sein)
[Zeile 18] [BEFEHL] Befehl 'Start-GalaxyWarp' unbekannt.
Code: Start-GalaxyWarp -Speed 10 # FEHLER: Dieser Befehl existiert nicht
[Zeile 19] [BEFEHL] Befehl 'Get-KaffeeInventar' unbekannt.
Code: Get-KaffeeInventar -Sorte "Arabica" # FEHLER: Unbekannter Befehl
[Zeile 23] [SYNTAX] Die schließende "}" fehlt im Anweisungsblock oder der Typdefinition.
Code: if ($true) {
[Zeile 24] [STIL] File 'TestFehler.ps1' uses Write-Host. Avoid using Write-Host because it might not work in all hosts, does not work when there is no host, and (prior to PS 5.0) cannot be suppressed, captured, or redirected. Instead, use Write-Output, Write-Verbose, or Write-Information.
Code: Write-Host "Die Klammer unter mir fehlt!"
[Zeile 27] [SYNTAX] Die Zeichenfolge hat kein Abschlusszeichen: ".
Code: $Fehlermeldung = "Hier wurde das Ende der Zeichenkette vergessen
--- ANALYSE BEENDET ---
Log: C:\Users\jihle\Desktop\FullAnalysis.log
1. Das heruntergeladene Modul deinstallieren:
Uninstall-Module -Name PSScriptAnalyzer -AllVersions -Force
2. Überprüfen, ob es weg ist:
Get-Module -ListAvailable -Name PSScriptAnalyzer
Falls das Modul „hartnäckig“ ist (Manuelles Löschen)
Manchmal blockiert Windows das Löschen, wenn das Modul gerade im Hintergrund noch geladen ist. Falls der obige Befehl einen Fehler wirft, mache Folgendes:
PowerShell schließen und neu öffnen (um alle aktiven Sperren zu lösen).
Diesen Befehl nutzen, um den Ordner direkt zu finden und zu löschen:
$path = (Get-Module -ListAvailable -Name PSScriptAnalyzer).ModuleBase
if ($path) { Remove-Item -Path $path -Recurse -Force -Confirm:$false; Write-Host "Ordner geloescht." }
Von Jens Ihle.
Was der Ultra-Analyzer – Code genau macht:
1. Stufe: Syntax-Analyse (Parser)
Struktur-Check: Findet fehlende schließende Klammern }, ] oder ).
Zeichenketten: Erkennt nicht abgeschlossene Anführungszeichen “ ‚.
Vorteil: Verhindert, dass Scripte aufgrund von Formfehlern gar nicht erst starten.
2. Stufe: Security-Audit (Sicherheit)
Secret-Scanner: Sucht nach Variablen wie $Password, $Token, $Secret oder $ApiKey, denen direkt ein Text zugewiesen wird.
Gefährliche Befehle: Warnt vor Invoke-Expression (IEX), da dieser Befehl Strings als Code ausführt und oft für Injektions-Angriffe genutzt wird.
3. Stufe: Deep Analysis (Funktionale Tiefe)
Befehls-Check: Prüft, ob die verwendeten Commandlets auf dem System überhaupt installiert sind.
Parameter-Validierung: Geht einen Schritt weiter und prüft, ob die genutzten Parameter (z. B. -Path) für das jeweilige Commandlet überhaupt existieren.
Modul-Abhängigkeiten: Prüft bei Import-Module, ob das angegebene Modul auf dem System verfügbar ist.
4. Stufe: Variablen-Check (Logik-Prüfung)
Typo-Schutz: Das Script führt Buch über alle definierten Variablen. Wird eine Variable verwendet, die vorher nie zugewiesen wurde, gibt es einen Hinweis (hilft extrem gegen Tippfehler wie $Server vs. $Serer).
5. Stufe: Kompatibilität (Version & Plattform)
Plattform-Check: Erkennt Windows-Pfadformate (Backslashes \), die auf Linux/macOS-Systemen zu Fehlern führen würden.
Versions-Check: Erkennt moderne Methoden (wie .Where() oder .ForEach()), die auf älteren PowerShell-Versionen (vor 4.0) nicht funktionieren.
6. Stufe: Best Practice (PSScriptAnalyzer)
Qualitäts-Check: Nutzt das offizielle Microsoft-Modul (lädt es bei Bedarf online nach), um Aliase (dir, ls, ps) zu finden und professionelle Schreibweisen anzumahnen.
<#
============================================================
POWERSHELL ULTRA-ANALYZER (Finale Audit-Edition)
============================================================
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$ScriptPath
)
# UTF8-Fix fuer Konsole
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# Pfad fuer das Log auf dem Desktop ermitteln
$desktop = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::Desktop)
$LogFile = Join-Path $desktop "FullAudit.log"
# Ergebnisspeicher
$AnalysisResults = @()
function Add-Result {
param($Line, $Type, $Message, $Level)
$obj = [PSCustomObject]@{
Line = $Line
Type = $Type
Message = $Message
Level = $Level
}
$script:AnalysisResults += $obj
}
# --- 1. DATEI LADEN ---
if (-not (Test-Path $ScriptPath)) {
Write-Host "FEHLER: Datei nicht gefunden." -ForegroundColor Red
return
}
try {
$Code = Get-Content $ScriptPath -Raw -Encoding UTF8 -ErrorAction Stop
$CodeLines = $Code -split '\r?\n'
} catch {
Write-Host "FEHLER: Datei konnte nicht gelesen werden." -ForegroundColor Red
return
}
Write-Host "`n--- STARTE TIEFEN-AUDIT ---" -ForegroundColor Cyan
# --- 2. SCHRITT: SYNTAX-ANALYSE (Parser) ---
$errors = @()
$ast = [System.Management.Automation.Language.Parser]::ParseInput($Code, [ref]$null, [ref]$errors)
foreach ($err in $errors) {
Add-Result -Line $err.Extent.StartLineNumber -Type "SYNTAX" -Message $err.Message -Level "ERROR"
}
# --- 3. SCHRITT: VARIABLEN-INITIALISIERUNG (Tippfehler-Schutz) ---
$assignedVars = @('$PSScriptRoot', '$MyInvocation', '$_', '$args', '$null', '$true', '$false', '$PSItem', '$PID', '$HOME', '$Host', '$input', '$error')
$ast.FindAll({ $args[0] -is [System.Management.Automation.Language.VariableExpressionAst] }, $true) | ForEach-Object {
if ($_.Parent -is [System.Management.Automation.Language.AssignmentStatementAst]) {
$assignedVars += ('$' + $_.VariablePath.UserPath).ToLower()
}
}
# --- 4. SCHRITT: BEFEHLE, PARAMETER & SECURITY ---
$commands = $ast.FindAll({ $args[0] -is [System.Management.Automation.Language.CommandAst] }, $true)
foreach ($cmdAst in $commands) {
$cmdName = $cmdAst.GetCommandName()
if (-not $cmdName -or $cmdName -match '\$') { continue }
$line = $cmdAst.Extent.StartLineNumber
$cmdInfo = Get-Command $cmdName -ErrorAction SilentlyContinue
# Existenz & Parameter
if (-not $cmdInfo) {
Add-Result -Line $line -Type "BEFEHL" -Message "Befehl '$cmdName' unbekannt." -Level "WARN"
} else {
$paramsInCode = $cmdAst.CommandElements | Where-Object { $_ -is [System.Management.Automation.Language.CommandParameterAst] }
foreach ($p in $paramsInCode) {
$pName = $p.ParameterName
if (-not $cmdInfo.Parameters.ContainsKey($pName)) {
Add-Result -Line $line -Type "PARAMETER" -Message "Befehl '$cmdName' hat keinen Parameter '-$pName'." -Level "ERROR"
}
}
}
}
# --- 5. SCHRITT: SECRETS & VARIABLE TYPOS ---
$ast.FindAll({ $args[0] -is [System.Management.Automation.Language.AssignmentStatementAst] }, $true) | ForEach-Object {
$varName = $_.Left.Extent.Text
if ($varName -match "pass|secret|token|key|cred") {
Add-Result -Line $_.Extent.StartLineNumber -Type "SECURITY" -Message "Hardcoded Secret in '$varName' gefunden!" -Level "WARN"
}
}
$ast.FindAll({ $args[0] -is [System.Management.Automation.Language.VariableExpressionAst] }, $true) | ForEach-Object {
$vName = ('$' + $_.VariablePath.UserPath).ToLower()
if ($vName -notmatch '^\$env:|^\$global:|^\$script:|^\$local:' -and $vName -notin $assignedVars) {
Add-Result -Line $_.Extent.StartLineNumber -Type "VARIABLE" -Message "Variable '$vName' wurde nie definiert (Tippfehler?)." -Level "INFO"
}
}
# --- 6. SCHRITT: BEST PRACTICE (PSScriptAnalyzer) ---
if (-not (Get-Module -ListAvailable -Name PSScriptAnalyzer)) {
Write-Host "Info: Modul PSScriptAnalyzer wird geladen..." -ForegroundColor Gray
try { Install-Module -Name PSScriptAnalyzer -Scope CurrentUser -Force -Confirm:$false -ErrorAction SilentlyContinue } catch {}
}
if (Get-Module -ListAvailable -Name PSScriptAnalyzer) {
$analyzerResults = Invoke-ScriptAnalyzer -Path $ScriptPath -ErrorAction SilentlyContinue
foreach ($res in $analyzerResults) {
if (-not ($AnalysisResults | Where-Object { $_.Line -eq $res.Line -and $_.Type -eq "SYNTAX" })) {
Add-Result -Line $res.Line -Type "STIL" -Message $res.Message -Level "INFO"
}
}
}
# --- 7. AUSGABE ---
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm"
"--- Audit vom $timestamp ---" | Out-File $LogFile -Append -Encoding UTF8
if ($AnalysisResults.Count -eq 0) {
Write-Host "Keine Fehler gefunden!" -ForegroundColor Green
} else {
foreach ($res in ($AnalysisResults | Sort-Object Line)) {
$color = switch($res.Level) { "ERROR" {"Red"} "WARN" {"Yellow"} "INFO" {"White"} }
$msg = "[Zeile $($res.Line)] [$($res.Type)] $($res.Message)"
Write-Host $msg -ForegroundColor $color
$msg | Out-File $LogFile -Append -Encoding UTF8
if ($res.Line -gt 0 -and $res.Line -le $CodeLines.Count) {
Write-Host " Code: $($CodeLines[$res.Line-1].Trim())" -ForegroundColor Gray
}
}
}
Write-Host "`n--- AUDIT BEENDET ---" -ForegroundColor Cyan
Write-Host "Log: $LogFile"
Speichern als: „Check-MyScript-Ultra-Analyzer.ps1„
TestCode um zu prüfen ob der „Ultra-Analyzer“ funktioniert.
<#
============================================================
ULTIMATIVER TEST-CODE FÜR ULTRA-ANALYZER (Erweitert)
============================================================
#>
# --- UNIT: SECURITY ---
$MySecretToken = "AIzaSyB-4x9J" # Fehler 1: Hardcoded Secret
$Password123 = "supergeheim" # Fehler 2: Noch ein Secret
Invoke-Expression "Write-Host 'Hack!'" # Fehler 3: Unsicherer Befehl
Invoke-Expression $NichtVorhanden # Fehler 4: IEX mit undefinierter Variable
# --- UNIT: DEEP ANALYSIS ---
Get-Service -PizzaSalami "ExtraKäse" # Fehler 5: Falscher Parameter
Get-Process -UnfugParameter 123 # Fehler 6: Falscher Parameter
Invoke-NichtExistenterBefehl # Fehler 7: Unbekannter Befehl
Starte-DenRaketenstart # Fehler 8: Fantasie-Befehl
# --- UNIT: VARIABLES ---
$MeinName = "Admin"
Write-Host $MeinNane # Fehler 9: Tippfehler
Write-Host $MeinNam # Fehler 10: Noch ein Tippfehler
$Ergebnis = $NichtZugewieseneVar + 10 # Fehler 11: Nutzung ohne Zuweisung
$Summe = $AuchNichtDefiniert + 5 # Fehler 12: Noch eine undefinierte Variable
# --- UNIT: COMPATIBILITY ---
$MeinPfad = "C:\Windows\System32" # Fehler 13: Windows-Pfad
$LinuxPfad = "/usr/bin" # Fehler 14: Linux-Pfad in Windows-Kontext
(1..10).Where({$_ -gt 5}) # Fehler 15: Moderne Methode
(1..10).ForEach({$_ * 2}) # Fehler 16: Moderne Methode
# --- UNIT: BEST PRACTICE ---
ls C:\Temp # Fehler 17: Alias
dir C:\Windows # Fehler 18: Alias
echo "Analyse läuft" # Fehler 19: Alias
cat C:\boot.ini # Fehler 20: Alias
# --- UNIT: SYNTAX ---
if ($true) {
Write-Host "Klammer fehlt!"
# Fehler 21: Schließende Klammer fehlt
function TestFunc( # Fehler 22: Syntaxfehler (fehlende Klammer)
Write-Host "Fehlerhafte Funktion" # Fehler 23: Ungültige Funktionsdefinition
Speichern als: TestUltra-Analyzer.ps1
Von Jens Ihle
Was der Cache Cleaner – Code macht:
Löscht:
1. Temp-Ordner
Speichert temporäre Dateien, die Programme und Windows während der Nutzung anlegen. Sie können gefahrlos gelöscht werden, wenn sie nicht mehr benötigt werden.
2. Windows Update Cache
Enthält heruntergeladene Update-Dateien. Wird dieser Cache beschädigt oder zu groß, können Updates fehlschlagen oder unnötig Speicher belegen.
3. Prefetch
Beinhaltet Startinformationen von Programmen, damit Windows diese schneller laden kann. Das Löschen kann kurzfristig zu langsameren Starts führen, wird aber bei Bedarf automatisch neu aufgebaut.
4. Microsoft Store Cache
Sammelt Daten zu App-Downloads und Updates aus dem Store. Ein voller oder beschädigter Cache kann App-Installationen oder Updates blockieren.
5. Datei-Explorer Cache
Speichert Vorschaubilder und Verlaufseinträge, damit Ordner schneller geöffnet werden. Ein überladener Cache kann zu Anzeigeproblemen führen.
6. Browser-Caches (Chrome + Edge)
Halten Webseiten-Daten lokal vor, um Seiten schneller zu laden. Mit der Zeit sammeln sich viele Dateien an, die Speicherplatz belegen oder Darstellungsfehler verursachen können.
7. NVIDIA Cache
Speichert Shader- und Treiberdaten, um Spiele und Programme schneller zu starten. Bei Grafikproblemen kann das Löschen helfen, da der Cache automatisch neu erstellt wird.
8. Cleanmgr (Datenträgerbereinigung – muss einmal vorkonfiguriert sein)
Ein Windows-Tool, das automatisch definierte Systemdateien wie temporäre Dateien, Update-Reste oder Papierkorb-Inhalte löscht. Muss einmalig konfiguriert werden, um gezielt die gewünschten Bereiche zu bereinigen.
@echo off
title Windows Cache Cleaner
color 0B
:: 1. Temp-Ordner
del /s /q "%TEMP%\*" >nul 2>&1
del /s /q "C:\Windows\Temp\*" >nul 2>&1
echo Der Cache von TEMP wurde geleert.
:: 2. Windows Update Cache
net stop wuauserv >nul 2>&1
del /s /q "C:\Windows\SoftwareDistribution\Download\*" >nul 2>&1
net start wuauserv >nul 2>&1
echo Der Cache von Windows Update wurde geleert.
:: 3. Prefetch
del /s /q "C:\Windows\Prefetch\*" >nul 2>&1
echo Der Cache von Prefetch wurde geleert.
:: 4. Microsoft Store Cache
del /s /q "%LOCALAPPDATA%\Packages\Microsoft.WindowsStore*\LocalCache\*" >nul 2>&1
echo Der Cache vom Microsoft Store wurde geleert.
:: 5. Datei-Explorer Cache
del /s /q "%APPDATA%\Microsoft\Windows\Recent\*" >nul 2>&1
echo Der Cache vom Datei-Explorer wurde geleert.
:: 6. Browser-Caches (Chrome + Edge)
del /s /q "%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cache\*" >nul 2>&1
echo Der Cache von Chrome wurde geleert.
del /s /q "%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Cache\*" >nul 2>&1
echo Der Cache von Edge wurde geleert.
:: 7. NVIDIA Cache
del /s /q "C:\ProgramData\NVIDIA Corporation\NV_Cache\*" >nul 2>&1
echo Der Cache von NVIDIA wurde geleert.
:: 8. Cleanmgr (Datenträgerbereinigung – muss einmal vorkonfiguriert sein)
cleanmgr /sagerun:1 >nul 2>&1
echo Die Datenträgerbereinigung (Cleanmgr) wurde ausgeführt.
echo ----------------------------------------
echo Alle ausgewählten Caches wurden erfolgreich geleert.
pause
Speichern als: „Cache Cleaner.bat„
Rechtsklick auf Desktop – Verknüpfung erstellen (Dateipfad und Namen zuordnen)
Rechtsklick auf Verknüpfung – Eigenschaften – Erweitert – Als Administrator ausführen
Ggf. Symbol anpassen …
Web, - und Applikations-Entwicklung
PowerShell-Kanal mit 16 Lernvideos ↑
German PowerShell Tut`s Teil 1 von 21 ↑
Die PowerShell Gallery ist das zentrale öffentliche Repository für PowerShell‑Module, Skripte und DSC‑Ressourcen.
Du hast mehrere zentrale Anlaufstellen, um PowerShell‑Bibliotheken (Module, Skripte, DSC‑Ressourcen) zu finden. Die wichtigsten Quellen sind offiziell dokumentiert und gut gepflegt. Hier kommt eine klare Übersicht mit den passenden Links.
PowerShell Gallery
Die PowerShell Gallery ist das zentrale öffentliche Repository für PowerShell‑Module, Skripte und DSC‑Ressourcen. Dort findest du zehntausende Pakete aus der Community und von Microsoft.
Microsoft Learn – PowerShellGet & PowerShell-Katalog
Microsoft Learn – PowerShellGet & PowerShell-Katalog
MSXFAQ – Einführung & Tipps zur PowerShell
Eine deutschsprachige, praxisnahe Einführung in die PowerShell Gallery, inkl. Hinweisen zu Modulen, Sicherheit und Installation.log
HTML
Eine komplette HTML‑Cheat‑Sheet‑Datei wichtigsten HTML-Taks
Das HTML‑Cheat‑Sheet zeigt die wichtigsten Bausteine einer Webseite: die Grundstruktur mit <html>, <head> und <body>, grundlegende Text‑ und Layout‑Elemente wie Überschriften, Absätze und Container, sowie Listen, Links, Medien und Tabellen. Zusätzlich enthält es die zentralen Formular‑Tags und moderne semantische HTML5‑Elemente wie <header>, <nav> oder <section>, die helfen, Inhalte klar und logisch zu strukturieren.
Grundstruktur
<!DOCTYPE html>
<html>
<head>
<title>Seitentitel</title>
</head>
<body>
Inhalt der Seite
</body>
</html>
Darstellung
Text & Struktur
<h1>Überschrift</h1>
<p>Ein Absatz.</p>
<br>
<hr>
Darstellung
Überschrift
Ein Absatz.
Listen
<ul>
<li>Ein Punkt</li>
<li>Noch ein Punkt</li>
</ul>
<ol>
<li>Erster Punkt</li>
<li>Zweiter Punkt</li>
</ol>
Darstellung
- Ein Punkt
- Noch ein Punkt
- Erster Punkt
- Zweiter Punkt
Links & Medien
<a href="#">Ein Link</a>
<img src="bild.jpg" alt="Ein Bild">
<video controls>Video</video>
<audio controls>
<source src="/wp-content/uploads/boat-horn.mp3" type="audio/mpeg">
</audio>
Darstellung
Tabellen
<table>
<tr><th>Name</th><th>Alter</th></tr>
<tr><td>Anna</td><td>23</td></tr>
</table>
Darstellung
| Name | Alter |
|---|---|
| Anna | 23 |
Formulare
<form>
<label>Name:</label>
<input type="text">
<button>Absenden</button>
</form>
Darstellung
Semantische HTML5‑Tags
<header>Kopfbereich</header>
<nav>Navigation</nav>
<main>Hauptinhalt</main>
<section>Abschnitt</section>
<article>Artikel</article>
<aside>Seitenbereich</aside>
<footer>Fußbereich</footer>
Darstellung
1. XAMPP für Windows
XAMPP ist ein kostenloses, plattformübergreifendes Software‑Paket, das dir auf deinem eigenen Rechner eine komplette lokale Webserver‑Umgebung bereitstellt – ideal zum Entwickeln und Testen von Webseiten, ohne dass sie öffentlich erreichbar sind. Es kombiniert Apache, MariaDB/MySQL, PHP und weitere Tools in einer einzigen, leicht installierbaren Lösung.
2. SELFHTML
SELFHTML stellt seit 1995 eine deutschsprachige Dokumentation zu HTML und verwandten Technologien zur Verfügung.

