$code = @' using System; using System.Drawing; using System.Runtime.InteropServices; using Microsoft.Win32; namespace Background { public class Setter { [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern int SystemParametersInfo(int uAction, int uParm, string lpvParam, int fuWinIni); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError =true)] private static extern int SetSysColors(int cElements, int[] lpaElements, int[] lpRgbValues); public const int UpdateIniFile = 0x01; public const int SendWinIniChange = 0x02; public const int SetDesktopBackground = 0x0014; public const int COLOR_DESKTOP = 1; public int[] first = {COLOR_DESKTOP}; public static void RemoveWallPaper() { SystemParametersInfo( SetDesktopBackground, 0, "", SendWinIniChange | UpdateIniFile ); RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true); key.SetValue(@"WallPaper", 0); key.Close(); } public static void SetBackground(byte r, byte g, byte b) { RemoveWallPaper(); System.Drawing.Color color= System.Drawing.Color.FromArgb(r,g,b); int[] elements = {COLOR_DESKTOP}; int[] colors = { System.Drawing.ColorTranslator.ToWin32(color) }; SetSysColors(elements.Length, elements, colors); RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Colors", true); key.SetValue(@"Background", string.Format("{0} {1} {2}", color.R, color.G, color.B)); key.Close(); } } } '@ $null = Add-Type -TypeDefinition $code -ReferencedAssemblies System.Drawing.dll -PassThru Function Set-OSDesktopColor { param ( $r,$g,$b ) $null = [Background.Setter]::SetBackground($r,$g,$b) }