Windows-Hintergrundbild mit Perl setzen

12. Februar 2021 · Programmierung · andreas · Kein Kommentar

Das Setzen des Windows-Hintergrundbilds ist von Perl aus ganz einfach - zumindest wenn man die Win32-API verwendet:

wallpaper.pl
use strict; use warnings; use Win32::API; use constant SPI_SETDESKWALLPAPER => 0x0014; use constant SPIF_UPDATEINIFILE => 0x0001; use constant SPIF_SENDCHANGE => 0x0002; use constant ZERO => 0x0000; my $syspinf = Win32::API->new('user32', 'SystemParametersInfo', [I,I,P,I], I) or die "SystemParametersInfo not available.\n"; $syspinf->Call(SPI_SETDESKWALLPAPER, ZERO, $ARGV[0], SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);

Das Skript erwartet den Namen des Bildes inklusive Pfad als Parameter.


Hörenswert #3: Floor Jansen & Henk Poort - Phantom Of The Opera

08. Februar 2021 · Hörenswert · andreas · 1 Kommentar

2019 hat Floor Jansen bei der AVROTROS-TV-Sendung “Beste Zangers” mitgemacht. Wer schon immer mal wissen wollte, zu was die Frau tatsächlich fähig ist, sollte sich das “Phantom Of The Opera”-Duett mit Henk Poort anschauen - und am besten auch gleich die anderen Clips der Sendung(en) hinterher, welche bisher eher unbekannte Facetten zeigen.


inotifywait bricht bei Dateiänderungen ab

06. Februar 2021 · Anwendungen · andreas · Kein Kommentar

Es gibt verschiedene Strategien, wie die Änderung einer Datei gespeichert werden kann. Die beiden i.d.R. eingesetzten Verfahren sind entweder die vorhandene Datei mit dem neuen Inhalt zu überschreiben oder aber den geänderten Inhalt in eine neue Datei zu speichern und dann die Dateien auszutauschen.

Unter Sicherheitsaspekten ist der Dateiaustausch klar vorzuziehen, denn erst wenn der neue Inhalt erfolgreich in die neue Datei gespeichert wurde, wird die bisherige Datei gelöscht. Beim direkten Überschreiben kann entweder beim Zugriff durch andere Programme eine halbfertige Datei geliefert werden oder es kommt durch Hardware- / Software-Fehler zu einer Situation, in welcher der alte Inhalt bereits zerstört, der neue Inhalt aber nicht erfolgreich geschrieben werden kann.

Dies hat Auswirkungen auf die Möglichkeiten, mittels inotifywait auf Dateiänderungen zu reagieren. Während beim direkten Überschreiben inotifywait ordnungsgemäß eine Änderung der Datei registriert, bricht inotifywait beim Dateiaustausch ab - die z.B. im Beitrag “Sass ohne Ruby” geschilderte Vorgehensweise scheitert dann, da die ursprünglich überwachte Datei ja nicht mehr existiert.

$ while inotifywait -e close_write style.scss; do sassc --style compact style.scss style.css ; done

Eine Möglichkeit, dies zum umgehen, ist das Überwachen des kompletten Verzeichnisses mit Abfrage der geänderten Datei

inotifywait -e close_write,moved_to,create -m . | while read -r directory events filename; do if [ "$filename" = "style.scss" ]; then sassc --style compact style.scss .style.css fi done

was aber - je nach Anzahl der im Verzeichnis vorhandenen Dateien und deren Änderungshäufigkeit - zu einer erhöhten Systemlast führen kann.


Renovierung III

04. Februar 2021 · Intern · andreas · Kein Kommentar

In den letzten Tagen wurde hinter den Kulissen fleißig gebohrt, gehämmert und tapeziert, so daß sich das Blog in einem modifizierten Gewand präsentiert.

Der Ausflug zum Standardtheme “Twenty Twenty” war interessant, aber letztendlich zu schwerfällig - sowohl im Handling mittels Child-Theme als auch in der Datenmenge, welche über die Leitung transportiert wurde. Nun kommt wieder das von 2016 - 2019 hier eingesetze Theme zum Einsatz, wenn auch in einer moderaten Fortentwicklung.

Sollte es noch irgendwo klemmen, bitte die Kommentar-Funktion mit entsprechenden Hinweisen füttern.

Vielen Dank!


WSUS-Updates remote genehmigen

02. Februar 2021 · Anwendungen · andreas · Kein Kommentar

Soll das Skript, welches die WSUS-Updates genehmigt (oder ablehnt) nicht auf dem WSUS-Server selbst sondern auf einem anderen Server ausgeführt werden, scheitert dies zunächst mit der Fehlermeldung

Der Typ [Microsoft.UpdateServices.Administration.AdminProxy] wurde nicht gefunden.

Grund ist das Fehlen der benötigten Powershell-Cmdlets, welche zur Ausführung installiert werden müssen. Eine Suche im Internet führt meist in die falsche Richtung, nämlich zu Installationsanleitungen für die WSUS 3.0 SP2 Administration Console, welche aber für den unter Server 2019 verwendeten WSUS schon ein paar Tage zu alt ist.

Die benötigten Module lassen sich über den “Assistent zum Hinzufügen von Rollen und Features” installieren, hier ist unter “Features” der Punkt “Remoteserver-Verwaltungstools” / “Rollenverwaltungstools” / “Windows Server Upgrade Service-Tools” / “API- und PowerShell-Cmdlets” zu wählen.

Als letztes muß in dem Skript nur noch eine Zeile zum Zugriff auf den Remote-Server angepasst werden:

$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($serverName, $useSecureConnection, $portNumber)

Der Aufruf der Funktion “getUpdateServer” wird um die drei selbsterklärenden Parameter “$serverName”, “$useSecureConnection” sowie “$portNumber” erweitert.