====== Woche 2 - Microsoft Windows Server Kurs ====== * [[GFN Sysadmin Kurs]] * [[Microsoft Windows Server Kurs]] * [[Woche 1 - Microsoft Windows Server Kurs]] * [[Woche 2 - Microsoft Windows Server Kurs]] * [[Woche 3 - Microsoft Windows Server Kurs]] * [[Woche 4 - Microsoft Windows Server Kurs]] * [[Woche 5 - Microsoft Windows Server Kurs]] * [[Woche 6 - Microsoft Windows Server Kurs]] * [[Woche 7 - Microsoft Windows Server Kurs]] * [[Woche 8 - Microsoft Windows Server Kurs]] * [[Moegliche Pruefungsfragen - Microsoft Windows Server Kurs]] ===== Tag 1: 17.02.2025 Montag ===== * Kapitel 9. Skripting, Functions, Filter * Agenda * ... * Get-PSDrive * Laufwerk "Function" * Function * Liste von existierenden PowerShell-Befehlen mit einem Namen versehen (=Funktionsname), die dann in der Eingabeaufforderung ausgeführt werden kann * Functions können über Parameter verfügen * Functions sind ein Teil des Skriptings # gibt eine Liste der Funtionen, Aliases, Cmdlets etc. Get-Command # Funktion definieren Function { } # Funktion aufrufen [-Parameter1 [Wert1]] [-ParameterN [WertN]] * Beispiel: # Function Get-DiskDrive { Get-PSDrive -PSProvider FileSystem } * dann Skript speichern z.B. unter "MeineSkripte\MeineFunktionen.ps1" * die Skript-Datei MUSS ausgeführt werden, damit die dort definierten Funktionen in der aktuellen Session verfügbar werden > MeineSkripte\MeineFunktionen.ps1 > # ab jetzt sind alle dort definierten Functions verfügbar * eine Ausführung von Skripten ist aber standardmäßig verboten (Ausnahme "Administrator"?) # Abfragen (auf der Konsole) ob eine Ausführung erlaubt ist: Get-ExecutionPolicy # Setzen: Set-ExecutionPolicy -ExecutionPolicy # Es gibt RemoteSigned / Unrestricted / AllSigned ... * bei der Ausführung MUSS der Pfad angegeben werden (sowie DOT-Sourcing -> MUSS) . .\MeineFunktionen.ps1 * Funktionen mit Parametern erstellen # klassisch: Function { Param ($Parameter1[, $ParameterN]) } # Neu (funktioniert nur bei Functions aber nicht bei Skriptenparametern): Function [($Parameter1[, $ParameterN])] { } * Beispiel Function Get-LargeFiles ($Length) { Get-ChildItem C:\Windows | Where-Object {$_.Length -ge $Length} } # Mit Werten vorbelegen Function Get-LargeFiles ($Location="C:\Windows", $Length=200) { Get-ChildItem $Location | Where-Object {$_.Length -ge $Length} } * Zeilen trennen mit Backticks (ab PowerShell 5.0, kann man auch ohne Backticks) Function Get-MyProcess ($Length) { Get-Process -Name s* | ` Select -Property ID, ProcessName, CPU | ` Sort -Property CPU -Descending } * Switch-Parameter * Parameter ohne Wert * wenn vorhanden = TRUE Function Test-Switch ([switch]$AnAus) { if($AnAus) { # ... } else { # ... } } * Beispiel Function Get-LargeFiles ($groesse, [switch]$sortieren) { $ausgabe = Get-ChildItem -Path C:\Windows -File | Where { $_.Length -ge $groesse} if($sortieren) { $ausgabe | Sort -Property Length } else { $ausgabe } } * Objekte über Pipeline an **Funktionen** übergeben Function { Begin { # Anweisungsblock, der am Anfang ausgeführt wird } Process { # Anweisungsblock, der mit jedem Element ausgeführt wird } End { # Anweisungsblock, der am Ende ausgeführt wird } } * Beispiel Function Get_Pipe1 { Begin { # Anweisungsblock, der am Anfang ausgeführt wird Write-Host "Pipeline Funktion gestartet" } Process { # Anweisungsblock, der mit jedem Element ausgeführt wird Write-Host "Wert des aktuellen Objektes $_." } End { # Anweisungsblock, der am Ende ausgeführt wird Write-Host "Pipeline Funktion zu Ende ausgeführt" } } # Aufruf: 1,2,3 | Get_Pipe1 * Objekte kann man auch über Pipeline an **Skripte** übergeben Begin { # Anweisungsblock, der am Anfang ausgeführt wird Write-Host "Pipeline Funktion gestartet" } Process { # Anweisungsblock, der mit jedem Element ausgeführt wird Write-Host "Wert des aktuellen Objektes $_." } End { # Anweisungsblock, der am Ende ausgeführt wird Write-Host "Pipeline Funktion zu Ende ausgeführt" } # Aufruf (jede Datei/Directory in C:\Windows wird an das Skript myPipeScript.ps1 übergeben) Get-ChildItem C:\Windows | .\myPipeScript.ps1 * "Dokumentationstags" <# .SYNOPSIS Kurzbeschreibung... .DESCRIPTION Ausführliche Beschreibung... .PARAMETER Beschreibung Parameter 1... .PARAMETER Beschreibung Parameter 2... .EXAMPLE Beispiel 1... .EXAMPLE Beispiel 2... .NOTES Notizen... .LINK ... #> * Da die Funktionen auf dem virtuelle Laufwerk ''Function:'' sind: * Auflisten aller Funktionen kann man machen mit: * ''Get-ChildItem Function:'' * ... * ''...'' * Löschen * ''Remove-Item ...'' * Kapitel 7. Profile * Thema "Profile" hat man zurückgestellt, da sie besser NACH den "Funktionen" passt * Profil als "Gedächtnis" der PowerShell * Eigene Aliase * Arbeitsumgebung (Farben etc...) * ... * 2 getrennte Profile * "normale" PowerShell * ISE * $profile * gibt den Pfad zu der aktuellen Profil-Datei * Diese Datei wird bei jedem Start von PowerShell ausgeführt (so was wie "autoexec.bat") * ''$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1'' * für "normale" PowerShell Konsole * ''$HOME\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1'' * Man kann dort auch eigene Skripte laden (über DOT-Skripting) * ''. C:\MeineSkripte\MeineFunktionen.ps1'' ==== Übung 9.14 (Seite 133)==== Function Get-MyMessage { Write-Host "Hier sind meine Funktionen gespeichert." } # Fügen Sie Ihrem Skript eine neue Funktion Get-MyProcess hinzu, die Prozesse auf Ihrem lokalen Rechner unter folgenden Bedingungen anzeigt: #  Die anzuzeigenden Prozesse beginnen mit dem Buchstaben s. #  Die Spalten ID, ProcessName und CPU sollen angezeigt werden. #  Die Anzeige soll absteigend nach der Eigenschaft CPU sortiert werden. # Speichern Sie Ihr Skript, führen Sie es erneut aus und testen Sie die Funktion. Function Get-MyProcess { Get-Process -Name s* | Select-Object ID, ProcessName, CPU | Sort-Object CPU -Descending } # Kopieren Sie die Funktion Get-MyProcess und fügen Sie sie unter dem Namen Get-MyProcess2 # in Ihr Skript ein. Wandeln Sie die Funktion wie folgt ab: # Die Funktion soll einen Parameter $FilterName akzeptieren, der bestimmt, welche Prozesse angezeigt werden. # Standardwert: Es sollen Prozesse angezeigt werden, deren Name mit dem Buchstaben s # beginnt. # Über einen Switch-Parameter $Liste soll gesteuert werden, die Ausgabe als Liste zu sehen # (Format-List) und nicht als Tabelle. # Speichern Sie Ihr Skript, führen Sie es erneut aus und testen Sie die neue Funktion Function Get-MyProcess2 ($FilterName="s", [switch] $Liste) { $ausgabe = Get-Process -Name "$FilterName*" | Select-Object ID, ProcessName, CPU | Sort-Object CPU -Descending if($Liste) { $ausgabe = $ausgabe | Format-List } $ausgabe } ===== Tag 2: 18.02.2025 Dienstag ===== * AM WICHTIGSTEN: **//__Gijaskin Geburtstag!!!__//** :) Und dann: * Benutzerverwaltung geschieht in SAM (=Security Account Manager) * GUI davon : * "Computerverwaltung" (Rechts auf "Windows"-Symbol in der Taskleiste klicken) * System / Lokale Benutzer und Gruppen / Benutzer * Einen Benutzer anschauen (e.g. "v.kalaschnikow") * Um einen neuen Benutzer anlegen: * "Benutzer" mit rechts anklicken * "Neuer Benutzer" * In der PowerShell einen Benutzer anschauen mit Cmdlet ''Get-LocalUser'' * => dann werden nur die wichtigsten Eigenschaften angezeigt * Alle verfügbaren Eigenschaften anzeigen: * ''Get-LocalUser | Get-Member'' * In der PowerShell einen neuen Benutzer anlegen mit Cmdlet ''New-LocalUser'' * Pflicht: * Name * Kennwort * Debugging Modus in der PowerShell ISE: * Skript muss gespeichert werden * Menü "Debuggen" * F9 - Breakpoint toggeln * F11 - Einzelschritt * Wir starten mit "Windows Server Verwaltung" (=>Thema "PowerShell" erstmal pausieren) * Buch von Nicole Laue verwenden * Wir fangen mit dem Kapitel 7 an: "Vom Einzelrechner zum Netzwerk: Grundlagen" * TCP/IP in der Praxis * Agenda * Allgemeine Netzwerkfunktionen * IP-Adressklassen * Multicasts * Private IP-Adressen * Gültige und ungültige individuellen IP-Adressen * => Übung (WICHTIG! evtl prüfungsrelvant) * Subnetting und Subnetzmasken * Adress-Segmentierung * Bestimmen der Anzahl der Subnetze * Bestimmen der Anzahl der Hosts pro Subnetz * Tools * Supernetting * Übungen * Allgemeine Netzwerkfunktionen * Vom Einzelrechner zum Netzwerk * Benutzer / Drucker / Scanner etc * geht lokal auf EINEM Einzelrechner * besser ist: GEMEINSAM Ressourcen nutzen * => Netzwerk notwendig * Richtlinien festlegen / Protokolle * Wer sendet * Was sendet * Wie die Daten aussehen * ... * Unicast * Kommunikation zwischen 2 definierten Punkten * Broadcast * Rundsendung ohne eine definierte Zieladresse * Multicast * senden an eine zuvor definierte Multicast-Gruppe * Beispiel : * Updates verteilen * Switches * "Verteiler", die angeschlossene Systeme einzeln erreichen können * 2 Arten * Hubs * haben keine "Verstärker" * Switches * haben "Verstärker" * heutzutage werden kaum Hubs verwendet * MAC-Adresse (Media Access Control) * eindeutig weltweit * "eingebrannt" in die Netzwerkkarte * 6 Hex-Doubletten * Bsp: * 00-02-B3-1A-A4-DC * die ersten 3 Doubletten: Kennung vom Hersteller * Netzwerkübertragung * physikalische Übertragung * CSMA/CD = Carrier Sense Multiple Access / Collision Detection * (N.B. irrelevant für die Prüfung) * logische Übertragung * TCP/IP Protokoll * TCP/IP ISO/OSI Modell * 7 Schichten * 7. Applicaiton Layer * 6. Presentation Layer * 5. Session Layer * 4. Transport Layer * 3. Network Layer * 2. Data Link Layer * 1. Physical Layer * TCP/IP * Familie von Protokollen * SMTP, FTP, HTTP, HTTPS, SNMP ... * Ursprünglich 18, momentan ca. 50 * ARP = Address Resolution Protocol * ARP - Request * "Ich bin mit MAC und ich will mit kommunizieren" * Wird über Broadcast gesendet * da Broadcast aufwendig ist, muss es so weit möglich reduziert werden * ARP-Response * wird vom angefragten System beantwortet * "Ich bin mit " * Dann wird IP mit der MAC im IP-Cache vom Anfrager gespeichert * IP-Cache wird nach einer gewissen Zeit gelöscht (normalerweise ca. 1 Std) * Kapitel 8. IP-Adressierung * IP-Adresse * 4 Zahlen durch Kommata getrennt * Werte 0-255 * Adressbereich (theoretisch) * von 0.0.0.0 * bis 255.255.255.255 * IP Adressklassen nach RFC 791 * Klasse A * von 0.0.0.0 bis 127.255.255.255 * Subnetzmaske 255.0.0.0 * Startet mit 0 (binär) * 1 Byte - Netz Anteil * Klasse B * von 128.0.0.0 bis 191.255.255.255 * Subnetzmaske 255.255.0.0 * Startet mit 10 (binär) * 2 Bytes - Netz Anteil * Klasse C * von 192.0.0.0 bis 223.255.255.255 * Subnetzmaske 255.255.255.0 * Startet mit 110 (binär) * 3 Bytes - Netz Anteil * Klasse D * von 224.0.0.0 bis ... * Subnetzmaske x.x.x.x * Startet mit 1110 (binär) * 2 Bytes - Netz Anteil * reserviert für Multicast * Klasse E * von 240.0.0.0 bis ... * Subnetzmaske x.x.x.x * Startet mit 1111 (binär) * reserviert für Entwicklung, Forschung etc. * A,B,C Klassen werden kommerziell genutzt * D,E - speziell reserviert * Sonderregeln * im Host-Anteil dürfen nicht alle Bits auf 0 gesetzt werden * (das wäre dann eine Subnetzmaske) * im Host-Anteil dürfen nicht alle Bits auf 1 gesetzt werden * (das wäre dann eine Broadcast-Adresse) * das erste Byte müssen aus A, B oder C sein * Eine Subnetzmaske beginnt IMMER mit 1 (binär) und danach kommen NUR die 0 * also 1111...000 * so was wie 1110001110001100 ist nicht erlaubt * Broadcast: * alle Host-Bits sind auf 1 gesetzt * Multicast * "Gruppenadressen" * Multicasts werden geroutet (Broadcasts - nicht) * Warum IP-Adressen? * Warum Klassen, wenn Subnetzmaske definiert werden kann? * => aus historischen Gründen * Öffentliche und private IP-Adressen * Öffentliche - kann im Internet geroutet werden * Private - werden nicht im Internet weitergeleitet * NUR diese Adressen sind privat: * A Klasse * 10.0.0.0 - 10.255.255.255 (8 Netze) * B Klasse * 172.16.0.0 - 172.31.255.255 (12 Netze) * C Klasse * 192.168.0.0 - 192.168.255.255 (16 Netze) * Siehe auch "CIDR" (Classless Inter-Domain Routing) * Übung: * Welche Adressen sind gültig / nicht gültig und warum: * 131.107.256.80 * nicht gültig * wg. 256 * 222.222.255.222 * gültig * 231.200.1.1 * nicht gültig * Multicast * 198.121.254.255 * nicht gültig * Broadcast * 126.1.0.0 * gültig * 0.127.4.100 * nicht gültig * wg. 0 * 127.1.1.1 * nicht gültig * (local host?) * 190.7.2.0 * gültige B-Klasse * 255.255.255.255 * nicht gültig * Broadcast * 1.0.0.1 * gültige A-Klasse * 172.18.254.255 * gültig B-Klasse * 1.255.0.0 * gültig A-Klasse * Anzahl Hosts pro Subnetz für Klasse A * Anzahl Bits im Host-Anteil (s. Diagramm in der Präsentation von Michael) = 2^24 = 16.777.216 * Minus 2 (im Host-Anteil stehen alle Bits auf 0 oder alle Bits stehen auf 1) * => 16.777.214 * Anzahl Hosts pro Subnetz für Klasse B * Anzahl Bits im Host-Anteil (s. Diagramm in der Präsentation von Michael) = 2^16 = 65.536 * Minus 2 (im Host-Anteil stehen alle Bits auf 0 oder alle Bits stehen auf 1) * => 65.534 * Anzahl Hosts pro Subnetz für Klasse C * Anzahl Bits im Host-Anteil (s. Diagramm in der Präsentation von Michael) = 2^8 = 256 * Minus 2 (im Host-Anteil stehen alle Bits auf 0 oder alle Bits stehen auf 1) * => 254 * Zum Nachlesen: * Kapitel 7. Vom Einzelrechner zum Netzwerk: Grundlagen * Kapitel 8. Die IP-Adressierung * Präsentation von Michael (TCPIP-0225.pdf) ===== Tag 3: 19.02.2025 Mittwoch ===== * Übungen zu der Berechnung von Subnetzen * ... * 2 neue Rechner im Hyper-V Manager einrichten * W22DC01 * Windows Server 2022 (Desktopdarstellung = "mit GUI") * 10.0.1.1/24 * Subnetzmaske 255.255.255.0 * Administrator / Pa$$w0rt * W22DC02 * Windows Server 2022 (Desktopdarstellung = "mit GUI") * 10.0.1.2/24 * Subnetzmaske 255.255.255.0 * Administrator / Pa$$w0rt * ... * Misc * Wie man Subnetzmasken berechnet: * https://www.computerweekly.com/de/tipp/IP-Adressen-und-Subnetze-Wie-man-IPv4-Subnetzmasken-mit-der-Host-Formel-berechnet * Sebastian Philippi YouTube-Channel * [[https://www.youtube.com/watch?v=am38FIbvD28|Quick and dirty! Subnetting "Like a Pro"]] * evtl. auch https://www.youtube.com/watch?v=-qQ8mPHGd1U * Verschiedene Subnetzmasken-Rechner: * Heise: https://www.heise.de/netze/tools/netzwerkrechner ===== Tag 4: 20.02.2025 Donnerstag ===== * 2 neue Rechner im Hyper-V Manager einrichten * W22FS01 (File Server) * Windows Server 2022 (Desktopdarstellung = "mit GUI") * 10.0.2.1/24 * Subnetzmaske 255.255.255.0 * Administrator / Pa$$w0rt * W11CL01 (Client) * Windows 11 Pro * 10.0.2.100/24 * Subnetzmaske 255.255.255.0 * 4 GB RAM (sonst lässt er sich nicht installieren) * danach kann man das im Hyper-V reduzieren * Pa$$w0rt * Router im Hype-V Manager erstellen * Windows Server 2022 (Desktopdarstellung = "mit GUI") * W22RT01 * Hardware hinzufügen * 2-te Netzwerkkarte hinzufügen (=> im Hyper-V Manager auf Eigenschaften des Rechners => Hardware hinzufügen) * 1-te = 10.0.1.254 / 24 * Subnetzmaske 255.255.255.0 * 2-te = 10.0.2.254 / 24 * Subnetzmaske 255.255.255.0 * Administrator / Pa$$w0rt ===== Tag 5: 21.02.2025 Freitag ===== * Supernetting (nicht prüfungsrelevant) * ... * NetBIOS * Namensauflösung in einer NICHT-hierarchischen Form * Agenda * Hosttabellen * DNS-Server konfigurieren * WINS * Tools * Übungen * Namensauflösung * A-Record (Host) * MX-Record (Mail) * TXT-Record * SRV-Record (Services) * ... * Unter ''C:\Windows\System32\drivers\etc\lmhosts'' * Zuordnung IP -> Name (über WINS?) * Unter ''C:\Windows\System32\drivers\etc\hosts'' * zum Testen, wenn man z.B. (DNS?)-Server nicht anfassen darf/kann * DNS = Domain Name System * Service * auch eigenes Protokoll im TCP/IP * Grundlagen * TTL - Time To Live * ... * Top-Level Domains * com, gov, edu ... * länderspezifische (de, es, ru,...) * neue (aero, info,...) * in-addr.arpa * Zuordnung IP -> Name * (also andersrum) * Namensauflösung * kaskadierte DNS Systeme * Serverrollen * Primary * Secondary * Caching-Only-Server * Nachlesen im Buch 1 unter "Tag 9. Wie finden sich..." * Aufgabe (zusammen gelöst) * "W22DC01" als DNS-Server einrichten * Server Manager / Verwalten / Rollen und... hinzufügen * Stammhinweise * Liste der (.) Root-Server * 13 Stück(normalerweise/immer?) * Forward Lookup Zone erstellen * Primäre Zone * (auf dem primären Server-> primäre zone) * (auf dem sekundären Server-> sekundäre zone) * Reverse Lookup Zone erstellen * ... * ''ipconfig /displaydns'' * DNS Cache anschauen * ''ipconfig /flushdns'' * DNS Cache löschen * ARP Cache __UND__ DNS Cache am besten beide löschen, da veraltete Caches zu den Fehlern führen * Sekundären DNS Server auf ''W22DC02'' installieren * ...