如何使用powershell更换墙纸

如何使用powershell更换墙纸,powershell,Powershell,有人知道如何在不注销的情况下使用powershell更换墙纸吗 我希望在运行脚本后立即看到更改 我可以更改注册表 set-ItemProperty -path $reg_pic -Name wallpaper -Value path_to_pic 但我需要注销并再次登录。然后我发现如果我跑 RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True 它将在不注销的情况下进行更改,但经过几次测试后,它将不再工作…类似的功能可以帮

有人知道如何在不注销的情况下使用powershell更换墙纸吗

我希望在运行脚本后立即看到更改

我可以更改注册表

set-ItemProperty -path $reg_pic -Name wallpaper -Value path_to_pic
但我需要注销并再次登录。然后我发现如果我跑

RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True

它将在不注销的情况下进行更改,但经过几次测试后,它将不再工作…

类似的功能可以帮助:

我用BMP和JPG文件测试了它,不需要注销/登录


哇!这是一个很大的帮助,它在我的测试PC上运行得非常好,我必须在生产PC上试用,在生产PC上应用GPO来计时墙纸。运行PS脚本的唯一问题是我必须更改excutionpolicy。谢谢你的帮助。
Add-Type -TypeDefinition @" 
using System; 
using System.Runtime.InteropServices;

public class Params
{ 
    [DllImport("User32.dll",CharSet=CharSet.Unicode)] 
    public static extern int SystemParametersInfo (Int32 uAction, 
                                                   Int32 uParam, 
                                                   String lpvParam, 
                                                   Int32 fuWinIni);
}
"@ 

$SPI_SETDESKWALLPAPER = 0x0014
$UpdateIniFile = 0x01
$SendChangeEvent = 0x02

$fWinIni = $UpdateIniFile -bor $SendChangeEvent 

$path = "C:\TEMP\MyImage.bmp"

$ret = [Params]::SystemParametersInfo($SPI_SETDESKWALLPAPER, 0, $path, $fWinIni)