使用 PowerShell 脚本自动更换 Windows 锁屏壁纸
该文章根据 CC-BY-4.0 协议发表,转载请遵循该协议。
本文地址:https://fenying.net/post/2024/06/12/rotate-lock-screen-picture-by-powershell/
Bug 11 的奇怪问题+1——锁屏幻灯片完全无法工作——无论如何选择合适的目录,它永远都只有两个错误提示:
- 你选择的目录无法用作幻灯片放映屏幕保护程序的图片目录。
- 你选择的目录中没有图片。
但是呢,如果你选择单张图片,而不使用幻灯片,它就可以正常显示。
好吧,我已经无法容忍微软的蠢货工程师了,所以,让我们用 Powershell 脚本来解决这个问题。
思路很简单,就是写一个 Powershell 脚本,每次运行时,从指定目录中随机选择一张图片,然后设置为锁屏壁纸。
然后再设置一个定时任务,每隔一段时间(我这里设定是一天)运行一次这个脚本,就可以实现定时随机更换锁屏壁纸了。
先看看随机选择图片并设置为锁屏壁纸的 Powershell 脚本:
1$ImageDirectory = $PSScriptRoot # 这里是你存放图片的目录,我假设就是脚本所在的目录
2
3# 获得该目录下的所有文件
4$Files = Get-ChildItem -Path $ImageDirectory
5
6# 过滤出图片文件
7$ImageFiles = $Files | Where-Object { $_.Extension -in ".jpg", ".jpeg", ".png" }
8
9# 随机选择一张图片
10$RandomImage = Get-Random -InputObject $ImageFiles
11
12# 锁屏壁纸的注册表路径
13$Key = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\PersonalizationCSP'
14
15# 设置锁屏壁纸的注册表项
16Set-ItemProperty -Path $Key -Name LockScreenImagePath -Value $RandomImage.FullName
把这段内容保存为 set-random-lock-screen.ps1
文件,放进你的图片目录,先不要执行。
我们先按下 Win-R
,输入 regedit
打开注册表编辑器,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PersonalizationCSP
,确保该目录存在(不存在就创建一个)。
现在,我们来执行这个脚本
- 按下
Win-X
,打开“Windows Powershell (管理员)”。 - 输入
cd "你的图片目录"
,切换到你的图片目录 - 输入
powershell -ExecutionPolicy Bypass -File "set-random-lock-screen.ps1"
,执行这个脚本。
搞定,现在锁屏,看看是不是已经更换了锁屏壁纸。
接下来,我们再来设置一个定时任务,让它每天晚上十二点运行一次这个脚本。
打开 Powershell,输入如下命令:
1$ScriptPath = "C:\Users\Demo\Pictures\LockScreenPictures\set-random-lock-screen.ps1" # 这里是你的脚本路径,请替换成你的实际路径
2
3$TaskName = "SetRandomLockScreen"
4
5$Trigger = New-ScheduledTaskTrigger -Daily -At 12am
6
7$Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$ScriptPath`""
8
9Register-ScheduledTask -TaskName $TaskName -Trigger $Trigger -Action $Action -RunLevel Highest -User "SYSTEM"
当然,你也可以改成每次开机都运行一次,或者每隔几小时运行一次,这取决于你的需求。以30分钟运行一次为例,在上面的终端里继续执行如下命令:
1$Task = Get-ScheduledTask -TaskName $TaskName
2$Task.Triggers.Repetition.Interval = 'PT30M' # 每30分钟运行一次
3$Task.Triggers.Repetition.Duration = 'PT23H30M' # 持续23小时30分钟
4
5$Task | Set-ScheduledTask
使用这个方案有一个好处,幻灯片有时候会组合多张图片,并不美观,影响我们欣赏图片,而使用单张图片模式则每次只会显示一张。😄
但与此同时,也有一个缺点,那就是在锁屏的时候,并不会更新锁屏壁纸,只有在解锁后才会更新。😅