更改所有用户的壁纸

时间:2016-08-17 16:44:27

标签: windows powershell powershell-v2.0

最近,我遇到过需要使用PowerShell设置默认壁纸以及任何现有用户壁纸的情况。

我们可以通过替换文件C:\ Windows \ Web \ Wallpaper \ Windows \ img0.jpg来设置默认壁纸,但我还没有找到合适的解决方案来替换任何现有的壁纸。

我曾经想过/尝试过的一些事情:

  • 从注册表设置壁纸。这个问题是为每个用户做的。
  • 删除并复制TranscodedWallpaper文件。这个问题是Windows 7将文件命名为TranscodedWallpaper.jpg,Windows 8将其命名为TranscodedWallpaper.bmp,Windows 10命名为TranscodedWallpaper。虽然我想我们可以创建三个不同版本的文件并检查操作系统版本,但我更愿意在采用此路线之前验证其他解决方案。

我在这里完全遗漏了什么吗?有没有人建议我们如何设置它?

提前致谢!

1 个答案:

答案 0 :(得分:0)

经过一番游戏,这就是我想出的。我不是PowerShell大师所以请随意抛弃一些更好的解决方案。

# Get each folder under "Users"
$drive = (Get-Location).Drive.Root
$users = Get-ChildItem "$($drive)Users"

# For each user, load and edit their registry
foreach ( $user in $users ) {

    # If this isn't us, load their hive and set the directory
    # If this is us, use HKEY_CURRENT_USER
    if ( $user.Name -ne $env:username ) {
        reg.exe LOAD HKU\Temp "$($drive)Users\$($user.Name)\NTUSER.DAT"
        $dir = "Registry::HKEY_USERS\Temp\Control Panel\Desktop"
    } else {
        $dir = "Registry::HKEY_CURRENT_USER\Control Panel\Desktop"
    }

    # We don't care about users that don't have this directory
    if ( (Test-Path $dir) ) {

        # Set the image
        Set-ItemProperty -Path $dir -Name "Wallpaper" -value "$($drive)Users\Public\Pictures\Sample Pictures\Tulips.jpg"

        # Set the style to stretch
        Set-ItemProperty -Path $dir -Name "WallpaperStyle" -value 2

    }

    # Unload user's hive
    if ( $user.Name -ne $env:username ) {
        [gc]::Collect()
        reg.exe UNLOAD HKU\Temp
    }
}

我要感谢TheMadTechnician提出的GPO建议。在正常情况下,我绝对同意!