代码如下:
# 设置聚焦图片下载链接
$focusUrl = "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=10&mkt=en-US" # 获取最近的10张聚焦图片信息
# 设置保存图片的临时文件夹路径
$tempFolder = "F:\Temp\FocusImages"
# 确保临时文件夹存在
if (-not (Test-Path -Path $tempFolder)) {
New-Item -Path $tempFolder -ItemType Directory | Out-Null
}
try {
# 下载聚焦图片信息
$response = Invoke-RestMethod -Uri $focusUrl
# 随机选择一张图片信息
$randomImageInfo = Get-Random -InputObject $response.images
# 获取图片地址
$imageUrl = "https://www.bing.com" + $randomImageInfo.url
# 使用正则表达式从 URL 中提取文件名
$imageName = [regex]::Match($imageUrl, '\/([^\/\?]+)\??').Groups[1].Value
# 构造图片的本地保存路径
$imagePath = Join-Path -Path $tempFolder -ChildPath $imageName
# 下载图片到本地
Invoke-WebRequest -Uri $imageUrl -OutFile $imagePath
# 检查类型是否已经添加,如果没有,则添加它
if (-not ([System.Management.Automation.PSTypeName]'Wallpaper').Type) {
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class Wallpaper {
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
}
"@
}
# 设置桌面背景
[Wallpaper]::SystemParametersInfo(20, 0, $imagePath, 0)
} catch {
Write-Host "发生异常: $_"
}
以上 PowerShell 脚本的作用是:
- 定义了一个变量
$focusUrl,用于存储从 Bing API 获取最近的 10 张聚焦图片信息的链接。 - 定义了一个变量
$tempFolder,用于存储临时保存图片的文件夹路径。 - 使用
Test-Path函数检查临时文件夹是否存在,如果不存在,则创建该文件夹。 - 使用
Invoke-RestMethod函数从$focusUrl获取聚焦图片信息。 - 从返回的信息中随机选择一张图片,并提取图片的地址。
- 使用正则表达式从图片地址中提取文件名,保证不包含查询参数。
- 构造图片的本地保存路径。
- 使用
Invoke-WebRequest函数下载图片到本地。 - 使用
Add-Type函数添加类型定义,其中包含了设置桌面背景的功能。在添加之前,先检查类型是否已经存在,避免重复添加。 - 使用
[Wallpaper]::SystemParametersInfo方法设置桌面背景为下载的图片。 - 如果在以上步骤中出现异常,则会捕获异常并打印异常信息。