$bing="www.bing.com" $xmlURL="http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US" $saveDir="D:\wallpapers\" $picExt=".jpg" $desiredPicRes="_1440x900"
$fullstop = $false$saveDir ile belirtilen klasörün var olduğundan emin olmalıyız. Fedora için yaptığımız gibi var olsun olmasın yaratılması için
New-Item -ItemType Directory -Path $saveDir -ErrorAction SilentlyContinue | Out-Null
if (-Not (Test-Path $saveDir))
{
New-Item -ItemType Directory _path $saveDir
}
[xml]$response = (New-Object System.Net.WebClient).DownloadString($xmlURL) $defaultPicURL = $response.images.image.url $desiredPicURL = $response.images.image.urlbase + $desiredPicRes + $picExt
$checkfile = $checkfile.split(".")[1] + "." + $checkfile.split(".")[2]
try {
$resp = iwr -Uri ($bing + $desiredPicURL) -EA Stop -Method Head
# desired URL OK
Write-Host "desired res OK."
$picName = $desiredPicURL.split(".")[1] + "." + $desiredPicURL.split(".")[2]
$fullPath = Join-Path -Path $saveDir -ChildPath $picName
}
catch {
# desired not available
try {
$resp = iwr -Uri ($bing + $defaultPicURL) -EA Stop -Method Head
Write-Host "desired not found, falling back to default."
$picName = $defaultPicURL.split("&")[0]
$picName = $picName.split(".")[1] + "." + $picName.split(".")[2]
$fullPath = Join-Path -Path $saveDir -ChildPath $picName
}
catch {
# neither default available
Write-Host "None available right now."
$fullstop = $true
Break
}
}
finally {
if ($fullstop) {
# here means nothing found
Add-Content -Path $logfile -Value "$bugun - nothing found."
}
else {
# hear means something is found, either desired or default
try {
$resp = iwr -Uri ($bing + $defaultPicURL) -OutFile $fullPath
Add-Content -Path $logfile -Value "$bugun - downloaded : $fullpath"
Set-WallPaper $fullpath
}
catch {
$hata = $PSItem.Exception.ToString()
Write-Host "last stage error: $hata"
Add-Content -Path $logfile -Value "$bugun - last stage error."
}
}
}
Write-Host "File is already downloaded:" (dir (Join-Path -Path $saveDir -ChildPath ($checkfile + "*")))[0]
Add-Content -Path $logfile -Value "$bugun - file is already downloaded."
}
Hayatını kodlama ile kazananlar; yukarıdaki karmaşa için kusura bakmayın.
Sonrasında bunu Görev Zamanlayıcısıyla otomatik çalıştırmaya ayarlamak kalıyor. Bunun için Set-ExecutionPolicy ile çalıştırma politikasını uygun şekilde değiştirmek, ps1 dosyasını imzalamak ya da komut satırından powershell.exe ile birlikte -ExecutionPolicy anahtarını kullanmak gerekebilir.
Function
Set-WallPaper
(
$Image
) {
<#
.SYNOPSIS
Applies a specified wallpaper to the current user's desktop
.PARAMETER Image
Provide the exact path to the image
.EXAMPLE
Set-WallPaper -Image "C:\Wallpaper\Default.jpg"
#>
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
$ret
=
[Params]
::SystemParametersInfo(
$SPI_SETDESKWALLPAPER
, 0,
$Image
,
$fWinIni
)
}