Powershell - Windows 8.1 Desktop Hintergrund auf einfarbig änderen
Hallo zusammen,
ich habe bereits einige Versuche unternommen und auch einiges zu dem Thema gefunden. Jedoch funktioniert es irgendwie nicht so ganz.
Ich möchte einen Desktop Hintergrund von einem Bild auf einfarbig mittels powershell ändern. Hierzu bin ich folgendermaßen vorgegangen:
Leider funktioniert das nicht. Wahrscheinlich fehlt noch ein Eintrag.
Hat jemand eine Idee?
ich habe bereits einige Versuche unternommen und auch einiges zu dem Thema gefunden. Jedoch funktioniert es irgendwie nicht so ganz.
Ich möchte einen Desktop Hintergrund von einem Bild auf einfarbig mittels powershell ändern. Hierzu bin ich folgendermaßen vorgegangen:
set-ItemProperty "HKCU:\Control Panel\Desktop" -Name Wallpaper -Value ""
set-ItemProperty "HKCU:\Control Panel\Colors" -Name Background -Value "44 44 44"
stop-process -Name explorer
Leider funktioniert das nicht. Wahrscheinlich fehlt noch ein Eintrag.
Hat jemand eine Idee?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 521241
Url: https://administrator.de/forum/powershell-windows-8-1-desktop-hintergrund-auf-einfarbig-aenderen-521241.html
Ausgedruckt am: 08.04.2025 um 13:04 Uhr
19 Kommentare
Neuester Kommentar
Hi,
was funktioniert ncht?
E.
Edit:
Schau mal hier, erster Treffer bei Kuugel: https://www.powershellgallery.com/packages/Set-DesktopBackGround/1.0.0.0 ...
E.
was funktioniert ncht?
E.
Edit:
Schau mal hier, erster Treffer bei Kuugel: https://www.powershellgallery.com/packages/Set-DesktopBackGround/1.0.0.0 ...
E.

Add-Type -A System.Drawing
function Set-BackgroundColor([System.Drawing.Color]$color){
Add-Type -Memberdefinition '
[DllImport("User32.dll",CharSet=CharSet.Unicode)]public static extern int SystemParametersInfo (Int32 uAction,Int32 uParam,String lpvParam,Int32 fuWinIni);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]public static extern int SetSysColors(int cElements, int lpaElements, int lpRgbValues);
' -Name Win32 -Namespace Tools
[void][Tools.Win32]::SystemParametersInfo(0x0014,0,"",3)
[void][Tools.Win32]::SetSysColors(1,[int[]]@(1),[System.Drawing.ColorTranslator]::ToWin32($color))
}
Set-BackgroundColor -Color ([System.Drawing.Color]::FromArgb(44,44,44))

Zitat von @joe2017:
Leider wurde jedoch das gesamte Design auf die Farbe umgestellt. Ich wollte eigentlich nur den Hintergrund einfarbig haben.
Hab ich hier getestet, funktioniert hier auf einer Test-VM mit Windows 8.1 problemlos, die Zeile 8 macht es ja extra so das nur der Hintergrund angepasst werden sollLeider wurde jedoch das gesamte Design auf die Farbe umgestellt. Ich wollte eigentlich nur den Hintergrund einfarbig haben.
[void][Tools.Win32]::SetSysColors(1,[int[]]@(1),[System.Drawing.ColorTranslator]::ToWin32($color))
https://docs.microsoft.com/de-de/windows/win32/api/winuser/nf-winuser-ge ...
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-se ...
Die 1 im zweiten Parameter entspricht ja nur COLOR_BACKGROUND

Dann kopier das Skript nochmal.

Zitat von @joe2017:
Es müsste doch einen einfachen Update Befehl nach dem ändern des reg keys geben. Das würde alles erledigen.
Macht der SetSysColors Call ja Es müsste doch einen einfachen Update Befehl nach dem ändern des reg keys geben. Das würde alles erledigen.
Ich hatte das Script kopiert und nichts verändert.
Ich hatte aber was nachträglich angepasst.Zitat von @joe2017:
Es müsste doch einen einfachen Update Befehl nach dem ändern des reg keys geben. Das würde alles erledigen.
Habe ich Dir doch geliefert?Es müsste doch einen einfachen Update Befehl nach dem ändern des reg keys geben. Das würde alles erledigen.
Zitat von @joe2017:
Was jedoch nicht funktioniert, ist das Ganze in ein Logon Script zu packen.
Das Script wird ausgeführt, ändert jedoch nichts. Öffne ich das Powershell Script und führe es aus, wird alles korrekt ausgeführt.
Das hängt a) davon ab, ob das LoginScript synchron oder asynchron ausgeführt wird und b) wann es fertig ist. Wenn es synchron ausgeführt würde, dann wäre es immer fertig, bevor der Desktop aufgebaut wird. Wenn es asynchron ausgeführt wird (Standard), und es ist schnell genug, dann ist es auch fertig, bevor der Desktop aufgebaut wird. Wenn man eine Verzögerung einbaut, dann kann man es - ohne Garantie - soweit bringen, dass der Befehl zum Aktualisieren des Desktops erst ausgeführt wird, wenn der Desktop voll aufgebaut wird.Was jedoch nicht funktioniert, ist das Ganze in ein Logon Script zu packen.
Das Script wird ausgeführt, ändert jedoch nichts. Öffne ich das Powershell Script und führe es aus, wird alles korrekt ausgeführt.
Wenn das Script vor dem Aufbau des Desktops fertig ist, dann greift der Befehl zum Aktualsieren des Desktops nicht und damit noch nicht die gerade in die Registry geschriebenen Werte. Diese wirken dann erst beim nächsten Login.
Edit: Alternativ könntest Du auch eine geplante Aufgabe versuchen mit Trigger "bei Anmeldung".
Dann baue am Ende eine Pause ein, damit Du sehen und lesen kannst, was es ggf. meldet.

PS Executionpolicy stimmt? Normalerweise müsste es ja von dort auch per Default über ByPass laufen da vom GPO Prozess getriggert, aber überprüfe das nochmal, kanns gerade nicht selbst.
Ansonsten bau um das Skript ein Start-Transcript und logge die Infos/Fehler in eine Logdatei ...
Ansonsten bau um das Skript ein Start-Transcript und logge die Infos/Fehler in eine Logdatei ...

Jepp hatte ich oben an falscher Stelle eingefügt, da ich anfangs den Namespace nicht außerhalb der Function benutzt habe, sorry. Habs oben aus der Function in den Body des Skripts verschoben.