新建一个autorun.vbs文件, 修改其中Bing-Wallpapers.ps1的路径, 然后把autorun.vbs放到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
set ws=wscript.createobject("wscript.shell")
ws.run "PowerShell.exe -ExecutionPolicy Bypass -File C:\Users\jin7\Documents\WindowsPowerShell\Bing-Wallpapers.ps1",0
新建Bing-Wallpapers.ps1文件
# Bing Wallpapers
# Fetch the Bing wallpaper image of the day
# <https://github.com/timothymctim/Bing-wallpapers>
#
# Copyright (c) 2015 Tim van de Kamp
# License: MIT license
# Modified by 周蒙牛
Param(
# Get the Bing image of this country
[ValidateSet('en-US', 'de-DE', 'en-AU', 'en-CA', 'en-NZ', 'en-UK', 'ja-JP', 'zh-CN')][string]$locale = 'zh-CN',
# Download the latest $files wallpapers
[int]$files = 0,
# Resolution of the image to download
[ValidateSet('auto', '1024x768', '1280x720', '1366x768', '1920x1080')][string]$resolution = 'auto',
# Destination folder to download the wallpapers to
[string]$downloadFolder = "$([Environment]::GetFolderPath("MyPictures"))\Bing-Wallpapers"
)
# Max item count: the number of images we'll query for
[int]$maxItemCount = [System.Math]::max(1, [System.Math]::max($files, 8))
# URI to fetch the image locations from
[string]$hostname = "https://www.bing.com"
[string]$uri = "$hostname/HPImageArchive.aspx?format=xml&idx=0&n=$maxItemCount&mkt=$locale"
# Get the appropiate screen resolution
if ($resolution -eq 'auto') {
Add-Type -AssemblyName System.Windows.Forms
$primaryScreen = [System.Windows.Forms.Screen]::AllScreens | Where-Object {$_.Primary -eq 'True'}
if ($primaryScreen.Bounds.Width -le 1024) {
$resolution = '1024x768'
}
elseif ($primaryScreen.Bounds.Width -le 1280) {
$resolution = '1280x720'
}
elseif ($primaryScreen.Bounds.Width -le 1366) {
$resolution = '1366x768'
}
else {
$resolution = '1920x1080'
}
}
# Check if download folder exists and otherwise create it
if (!(Test-Path $downloadFolder)) {
New-Item -ItemType Directory $downloadFolder
}
$request = Invoke-WebRequest -Uri $uri
[xml]$content = $request.Content
$items = New-Object System.Collections.ArrayList
foreach ($xmlImage in $content.images.image) {
[datetime]$imageDate = [datetime]::ParseExact($xmlImage.startdate, 'yyyyMMdd', $null)
[string]$imageUrl = "$hostname$($xmlImage.urlBase)_$resolution.jpg"
# Add item to our array list
$item = New-Object System.Object
$item | Add-Member -Type NoteProperty -Name date -Value $imageDate
$item | Add-Member -Type NoteProperty -Name url -Value $imageUrl
$null = $items.Add($item)
}
# Keep only the most recent $files items to download
if (!($files -eq 0) -and ($items.Count -gt $files)) {
# We have too many matches, keep only the most recent
$items = $items|Sort date
while ($items.Count -gt $files) {
# Pop the oldest item of the array
$null, $items = $items
}
}
Write-Host "Downloading images..."
$client = New-Object System.Net.WebClient
$imgsArr = @()
foreach ($item in $items) {
$baseName = $item.date.ToString("yyyy-MM-dd")
$destination = "$downloadFolder\$baseName.jpg"
$url = $item.url
$imgsArr = $imgsArr + $destination
# Download the enclosure if we haven't done so already
if (!(Test-Path $destination)) {
Write-Debug "Downloading image to $destination"
$client.DownloadFile($url, "$destination")
}
}
if ($files -gt 0) {
# We do not want to keep every file; remove the old ones
Write-Host "Cleaning the directory..."
$i = 1
Get-ChildItem -Filter "????-??-??.jpg" $downloadFolder | Sort -Descending FullName | ForEach-Object {
if ($i -gt $files) {
# We have more files than we want, delete the extra files
$fileName = $_.FullName
Write-Debug "Removing file $fileName"
Remove-Item "$fileName"
}
$i++
}
}
#The code is from https://stackoverflow.com/questions/9440135/powershell-script-from-shortcut-to-change-desktop
Add-Type @"
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace Wallpaper
{
public enum Style : int
{
Tile, Center, Stretch, NoChange
}
public class Setter {
public const int SetDesktopWallpaper = 20;
public const int UpdateIniFile = 0x01;
public const int SendWinIniChange = 0x02;
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern int SystemParametersInfo (int uAction, int uParam, string lpvParam, int fuWinIni);
public static void SetWallpaper ( string path, Wallpaper.Style style ) {
SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );
RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);
switch( style )
{
case Style.Stretch :
key.SetValue(@"WallpaperStyle", "2") ;
key.SetValue(@"TileWallpaper", "0") ;
break;
case Style.Center :
key.SetValue(@"WallpaperStyle", "1") ;
key.SetValue(@"TileWallpaper", "0") ;
break;
case Style.Tile :
key.SetValue(@"WallpaperStyle", "1") ;
key.SetValue(@"TileWallpaper", "1") ;
break;
case Style.NoChange :
break;
}
key.Close();
}
}
}
"@
$today = Get-Date -UFormat "%Y-%m-%d"
$yesterday = Get-Date (Get-Date).AddDays(-1) -UFormat "%Y-%m-%d"
$theDayBeforeYesterday = Get-Date (Get-Date).AddDays(-2) -UFormat "%Y-%m-%d"
$lastPicDate = Get-Date $items[0].date -UFormat "%Y-%m-%d"
switch ($lastPicDate) {
$today {
$wallpaper = "$downloadFolder\" + $today + '.jpg'
break
}
$yesterday {
$wallpaper = "$downloadFolder\" + $yesterday + '.jpg'
break
}
$theDayBeforeYesterday {
$wallpaper = "$downloadFolder\" + $theDayBeforeYesterday + '.jpg'
break
}
Default {
$imgsArr = $imgsArr | Sort-Object {Get-Random}
$wallpaper = $imgsArr[0]
break
}
}
[Wallpaper.Setter]::SetWallpaper( $wallpaper, 2 )
本文链接: https://www.pstips.net/set-bing-story-image-as-desktop-wallpapers.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

在win7 64位 运行,壁纸消失
我win10 64没问题. 升级你的powershell到最新版
或者你自己调试脚本
图片下载到哪里了?删除了吗?能不能把它下载到ps1脚本所在目录?
~/Pictures/Bing-Wallpapers
今天是22号,保存的图片时间为什么是21号呢?
虽然Bing的API时间是昨天,但它下载保存的时间是今天呀。
bing的壁纸都是昨天的, 保存的时间也是昨天的. 乖乖
你点一下必应首页右下角的叹号 – 下载今日美图,保存日期是今天。
毕竟是每天凌晨更新的。
$today = Get-Date (Get-Date).AddDays(-1) -UFormat “%Y-%m-%d”
$yesterday = Get-Date (Get-Date).AddDays(-2) -UFormat “%Y-%m-%d”
$theDayBeforeYesterday = Get-Date (Get-Date).AddDays(-3) -UFormat “%Y-%m-%d”
对应的地方改下.
改下代码对应的地方 看上面