Thema: powershell
-
Fehlerbehandlung in PowerShell-Adminskripten: Terminating Errors, $ErrorActionPreference und $LASTEXITCODE
PowerShell kennt zwei Fehlerklassen, die sich in Skripten unterschiedlich verhalten: Terminating Errors, die try/catch abfangen kann, und Non-terminating Errors, die nur $ErrorActionPreference oder -ErrorAction in einen Abbruch verwandeln. Eine dritte Klasse, Fehler nativer Programme, folgt keinem dieser Wege, ausser $PSNativeCommandUseErrorActionPreference ist gesetzt (PowerShell 7.4+, in 7.3 experimentell).
-
Windows PowerShell 5.1 und PowerShell 7 auf Servern: unter welcher Version ein Skript tatsächlich läuft
PowerShell 7 wird parallel zur integrierten Windows PowerShell 5.1 installiert und ersetzt diese nicht; es hat einen anderen Namen der ausführbaren Datei, einen anderen Modulpfad und einen eigenen Remoting-Endpunkt. Ein Agent, der `powershell.exe` aufruft, obwohl er `pwsh.exe` meint (oder umgekehrt), erhält unbemerkt Modulsatz und Standardeinstellungen der jeweils anderen Engine.
-
Neue Disk in Windows Server vorbereiten: von Get-Disk bis Format-Volume und warum sie offline startet
Die Abfolge im PowerShell-Storage-Modul von Get-Disk bis zum eingebundenen, formatierten Volume (Initialize-Disk -PartitionStyle GPT, New-Partition -UseMaximumSize, Format-Volume), das spätere Vergrössern mit Get-PartitionSupportedSize sowie die SAN-Richtlinie, die manche neu angebundenen Disks standardmässig offline lässt.
-
PowerShell-Remoting aktivieren und nutzen: WinRM, TrustedHosts und das Second-Hop-Limit
PowerShell-Remoting mit Enable-PSRemoting aktivieren, zwischen TrustedHosts und HTTPS-Transport wählen, Befehle mit Invoke-Command und Enter-PSSession ausführen und die Begrenzung bei der Weitergabe von Anmeldedaten, den sogenannten Second Hop, kennen.
-
Windows-Server-Leistungsindikatoren mit Get-Counter abtasten und als CSV exportieren
Get-Counter tastet benannte Indikatorpfade in einem wählbaren Intervall ab, fortlaufend oder für eine feste Anzahl Proben. Export-Counter (nur Windows PowerShell 5.1) behält im nativen BLG-Format alle Felder bei, und relog wandelt einen Mitschnitt nachträglich in CSV um, auch ohne den ursprünglichen Export-Counter-Befehl.
-
Dry-Run und Bestätigung in Admin-Skripten: PowerShell -WhatIf/-Confirm und ein --dry-run-Flag in der Shell
PowerShell bietet mit SupportsShouldProcess einen eingebauten Mechanismus, der einer eigenen Funktion echte -WhatIf- und -Confirm-Schalter gibt, die am selben $PSCmdlet.ShouldProcess()-Aufruf hängen wie bei den eingebauten Cmdlets. Shell-Skripte haben kein eingebautes Gegenstück dazu, daher muss ein --dry-run-Flag von Hand durchgereicht werden.
-
Idempotente Admin-Skripte schreiben: Prüfen vor Ändern, Drop-in-Dateien und Marker-Kommentare
Ein Admin-Skript, das ein Agent nach einem Teilfehler oder bei wiederholtem Zeitplan erneut ausführen könnte, soll das System im selben Zustand hinterlassen, ob es einmal oder fünfmal läuft. Drei Muster machen das zuverlässig: den Ist-Zustand vor der Änderung prüfen, separate Drop-in-Dateien schreiben, statt gemeinsam genutzte Dateien zu bearbeiten, und jeden vom Skript verwalteten Block markieren.
-
Windows-Server-Rollen und -Features per PowerShell installieren, ohne ausstehende Neustarts anzuhäufen
Get-WindowsFeature und Install-WindowsFeature -IncludeManagementTools decken Suche und Installation ab. Mit -Source wird auf Features-on-Demand-Medien verwiesen, wenn dem lokalen Komponentenspeicher die Dateien fehlen. Das zurückgegebene Objekt zeigt, ob noch ein Neustart aussteht.
-
Active-Directory-Benutzer und -Gruppen mit PowerShell verwalten, ohne das gesamte Verzeichnis zu durchsuchen
Get-ADUser mit -Filter und -Properties, New-ADUser mit SecureString-Passwort, Add-ADGroupMember sowie Search-ADAccount/Unlock-ADAccount bei Kontosperrungen – und warum -Filter * in einem Verzeichnis mit zehntausenden Objekten eine Falle ist.
-
Befehl aus einem Skript als anderer Benutzer ausführen: sudo -u, runuser, su -c und -Credential in PowerShell
sudo -u, runuser und su -c führen einen Befehl mit einer anderen Benutzer- und Gruppen-ID aus, unterscheiden sich aber darin, ob das Passwort des Zielkontos nötig ist, ob eine Login-Umgebung geladen wird und wer sie aufrufen darf. In PowerShell nehmen Start-Process und die Remoting-Cmdlets stattdessen ein -Credential-Objekt entgegen; ein Passwort darf bei keinem dieser Werkzeuge über eine Pipe oder als Kommandozeilenargument übergeben werden.
-
Ausfallsicherer Speicher auf einem Standalone-Server mit Speicherplätzen (Storage Spaces) und Austausch einer defekten Festplatte
Physische Festplatten mit New-StoragePool zusammenfassen, mit New-VirtualDisk ein Mirror- oder Parity-Laufwerk anlegen, den Zustand mit Get-PhysicalDisk und Get-StorageJob überwachen und eine defekte Festplatte nach dokumentiertem Ablauf ersetzen, ohne den Pool zu verlieren.
-
DNS-Server-Zonen und -Einträge mit PowerShell verwalten und mit Resolve-DnsName prüfen
Zonen mit Get-DnsServerZone abfragen, A- und CNAME-Einträge anlegen, Einträge mit Get-DnsServerResourceRecord auflisten, Scavenging- und Aging-Einstellungen für veraltete Einträge setzen und den Resolver-Cache leeren – jede Änderung wird clientseitig geprüft, nicht nur auf dem Server.
-
Grundlagen der IIS-Administration mit PowerShell: Sites, Application Pools, Logs und Konfigurationssicherung
Sites mit Get-IISSite des Moduls IISAdministration auslesen, einen Application Pool recyceln, den Standardspeicherort der IIS-Logs kennen und mit appcmd add backup vor einer Konfigurationsänderung einen Snapshot der applicationHost.config anlegen.
-
Zeilenenden, Kodierungen und Pfade: was schiefgeht, wenn eine Datei zwischen Betriebssystemen wechselt
CRLF gegenüber LF, die uneinheitlichen Kodierungs-Standardwerte von Windows PowerShell 5.1 gegenüber BOM-losem UTF-8 in PowerShell 7, EBCDIC auf Systemen der IBM-Mainframe-Familie sowie Dateisysteme mit unterschiedlicher Gross-/Kleinschreibung und maximaler Pfadlänge: eine Checkliste, was zu prüfen ist, bevor man annimmt, dass sich eine Textdatei oder ein Pfad auf einem anderen Betriebssystem gleich verhält.
-
Hyper-V mit PowerShell: virtuelle Maschinen, Checkpoints und warum ein Checkpoint kein Backup ist
Get-VM und der Aufbau eines New-VM-Aufrufs, der Unterschied zwischen Standard- und Production-Checkpoints, Export-VM zum Verschieben einer VM, Integrationsdienste und der Schalter -ExposeVirtualizationExtensions für verschachtelte Virtualisierung.
-
Parallele Ausführung eines Admin-Skripts verhindern: flock, lockf und ein benannter Mutex unter Windows
Ein Admin-Skript, das per Zeitplan oder durch einen Agenten gestartet wird und erneut anlaufen kann, bevor der vorherige Lauf beendet ist, braucht eine Sperre statt der Hoffnung, dass es nie dazu kommt. flock(1) unter Linux und lockf(1) unter FreeBSD binden eine Advisory Lock auf Kernel-Ebene an einen laufenden Prozess, sodass sie nicht veralten kann wie eine liegengebliebene PID-Datei; unter Windows leistet ein benannter System.Threading.Mutex dasselbe.
-
DHCP-Serverrolle per PowerShell verwalten: Bereiche, Reservierungen, Autorisierung und Sicherung
Bereiche und Leases mit Get-DhcpServerv4Scope abfragen, Adressen mit Add-DhcpServerv4Reservation reservieren, einen Server mit Add-DhcpServerInDC in AD autorisieren, DHCP-Failover im Überblick und die Konfiguration vor riskanten Änderungen mit Backup-DhcpServer sichern.
-
Rechteerhöhung im Vergleich: sudo, doas, UAC, runas und AIX RBAC – und wie sie sich erkennen lässt
sudo, doas, Windows UAC und die macOS-Gruppe admin beantworten dieselbe Frage: Darf diese Sitzung als Administrator handeln? Dafür nutzen sie unterschiedliche Mechanismen, und ein Skript prüft die Antwort je nach System auf andere Weise, bevor es eine privilegierte Aktion versucht.
-
Zustand von Active Directory vor jeder Änderung prüfen: dcdiag, repadmin und die FSMO-Rolleninhaber
Ein Prüfablauf vor Änderungen an einem Domänencontroller: dcdiag für lokale Diagnosen, repadmin /replsummary und /showrepl für die Replikation, Get-ADDomainController und netdom query fsmo für die Bestandsaufnahme von Domänencontrollern und Rolleninhabern sowie die Bedeutung der Zeitquelle des PDC-Emulators.
-
Geplante Aufgabe mit dem Modul ScheduledTasks erstellen: Aktion, Trigger, Principal und Ergebniscodes
New-ScheduledTaskAction, -Trigger und -Principal werden zu einer Aufgabe kombiniert, die Register-ScheduledTask registriert. Unter NT AUTHORITY\SYSTEM ist kein gespeichertes Passwort nötig, und Get-ScheduledTaskInfo samt den dokumentierten Ergebniskonstanten des Task Schedulers zeigt einem Agenten, ob der letzte Lauf tatsächlich erfolgreich war.
Maschinenlesbar: JSON