首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从快捷方式更改桌面的Powershell脚本

从快捷方式更改桌面的Powershell脚本
EN

Stack Overflow用户
提问于 2012-02-25 00:55:58
回答 4查看 48.3K关注 0票数 14

对于为什么从w/in PS运行而不是从定义为:

代码语言:javascript
复制
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -File "C:\Users\bin\ChangeDesktop.ps1"

ChangeDesktop.ps1的内容:

代码语言:javascript
复制
set-itemproperty -path "HKCU:Control Panel\Desktop" -name WallPaper -value ""
rundll32.exe user32.dll, UpdatePerUserSystemParameters

如果我在PS“命令提示符”环境中,桌面背景会自动移除和刷新,在此之外,我必须手动刷新桌面以实现更改。

系统是Windows 2008 R2 -新安装。脚本执行策略被设置为RemoteSigned,我没有看到任何PS错误。我只是没有看到桌面刷新自动运行时,从桌面快捷方式。

抓头

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-25 01:14:17

实际上,rundll32.exe user32.dll, UpdatePerUserSystemParameters并没有在2008年的x64盒子上为我更换壁纸。但这确实..。它调用Win32 API来调用更改壁纸。如果您将它保存为您的ChangeDesktop.ps1脚本,那么它应该可以工作。由于它是在下面,它将删除任何桌面壁纸。但是,如果您确实想设置一个,可以使用支持的图像文件的路径编辑最后一行,如下所示:

代码语言:javascript
复制
[Wallpaper.Setter]::SetWallpaper( 'C:\Wallpaper.bmp', 0 )

第二个论点是样式设计:

0:瓷砖1:中心2:拉伸3:无变化

剧本:

代码语言:javascript
复制
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

票数 28
EN

Stack Overflow用户

发布于 2016-05-25 07:34:16

这可能听起来很奇怪,但对我有效的是使用单引号而不是双引号。所以看起来是这样:

代码语言:javascript
复制
Set-ItemProperty -path "HKCU:Control Panel\Desktop" -name 'wallpaper' -value 'some value'
rundll32.exe user32.dll, UpdatePerUserSystemParameters
票数 0
EN

Stack Overflow用户

发布于 2016-11-29 19:43:24

这个剧本很神奇。对于域部署,我们不希望它在用户每次登录时不断地更改背景。

我做了以下更改,以便检查背景是否存在于所需位置的计算机上,如果它确实存在,则退出,如果不继续复制文件并设置背景。

它首先映射隐藏共享,将文件复制到所需的目录,设置壁纸,然后断开隐藏共享。如果您的公司已经使用了"X“,请插入另一个驱动器号。:D

代码语言:javascript
复制
$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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9440135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档