对于为什么从w/in PS运行而不是从定义为:
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -File "C:\Users\bin\ChangeDesktop.ps1"ChangeDesktop.ps1的内容:
set-itemproperty -path "HKCU:Control Panel\Desktop" -name WallPaper -value ""
rundll32.exe user32.dll, UpdatePerUserSystemParameters如果我在PS“命令提示符”环境中,桌面背景会自动移除和刷新,在此之外,我必须手动刷新桌面以实现更改。
系统是Windows 2008 R2 -新安装。脚本执行策略被设置为RemoteSigned,我没有看到任何PS错误。我只是没有看到桌面刷新自动运行时,从桌面快捷方式。
抓头
发布于 2012-02-25 01:14:17
实际上,rundll32.exe user32.dll, UpdatePerUserSystemParameters并没有在2008年的x64盒子上为我更换壁纸。但这确实..。它调用Win32 API来调用更改壁纸。如果您将它保存为您的ChangeDesktop.ps1脚本,那么它应该可以工作。由于它是在下面,它将删除任何桌面壁纸。但是,如果您确实想设置一个,可以使用支持的图像文件的路径编辑最后一行,如下所示:
[Wallpaper.Setter]::SetWallpaper( 'C:\Wallpaper.bmp', 0 )第二个论点是样式设计:
0:瓷砖1:中心2:拉伸3:无变化
剧本:
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();
}
}
}
"@
[Wallpaper.Setter]::SetWallpaper( '', 0 )来自PoshCode:http://poshcode.org/491
发布于 2016-05-25 07:34:16
这可能听起来很奇怪,但对我有效的是使用单引号而不是双引号。所以看起来是这样:
Set-ItemProperty -path "HKCU:Control Panel\Desktop" -name 'wallpaper' -value 'some value'
rundll32.exe user32.dll, UpdatePerUserSystemParameters发布于 2016-11-29 19:43:24
这个剧本很神奇。对于域部署,我们不希望它在用户每次登录时不断地更改背景。
我做了以下更改,以便检查背景是否存在于所需位置的计算机上,如果它确实存在,则退出,如果不继续复制文件并设置背景。
它首先映射隐藏共享,将文件复制到所需的目录,设置壁纸,然后断开隐藏共享。如果您的公司已经使用了"X“,请插入另一个驱动器号。:D
$strFileName="C:\Users\Public\Pictures\background.jpg"
If (Test-Path $strFileName){
# // File exists
Exit-PSSession
}Else{
# // File does not exist
New-PSDrive -Name X -PSProvider Filesystem -Root \\hiddenfileshare\wallpapers
Copy-Item X:\background.jpg C:\Users\Public\Pictures
[Wallpaper.Setter]::SetWallpaper( 'C:\Users\Public\Pictures\background.jpg', 0 )
Remove-PSDrive X
}https://stackoverflow.com/questions/9440135
复制相似问题