从 PowerShell 更改文件的图标

Change icon for file from PowerShell

我正在尝试创建带有自定义图标的 URL 文件,但由于某种原因,它无法正常工作。 这是我的代码:

#Downloading ico file
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile("url location of the icon file","C:\Users\Public\Pictures\filename.ico")

#Creating URL file
$wshShell = New-Object -ComObject "WScript.Shell"
$urlShortcut = $wshShell.CreateShortcut(
  (Join-Path $wshShell.SpecialFolders.Item("AllUsersDesktop") "myname.url")
)
$urlShortcut.TargetPath = "https://somewebsite"
$urlShortcut.IconLocation = "C:\Users\Public\Pictures\filename.ico"
$urlShortcut.Save()

图标文件已下载,URL 文件已创建,但图像未更改。我尝试了几种不同的方法,但都没有成功。

如果有人对此有一些意见,那就太好了。

亲切的问候,

您的情况不支持 .IconLocation 属性,但有一个解决方法:

# ... icon download code omitted

$shortcutFile = Join-Path $wshShell.SpecialFolders.Item('AllUsersDesktop') 'myname.url'
$iconFile = 'C:\Users\Public\Pictures\filename.ico'

$wshShell = New-Object -ComObject "WScript.Shell"
$urlShortcut = $wshShell.CreateShortcut($shortcutFile)
$urlShortcut.TargetPath = 'https://en.wikipedia.org'
$urlShortcut.Save()

# This updates the .url file directly to emulate what assigning 
# an icon interactively, via File Explorer, does.
@"
IconIndex=0
HotKey=0
IconFile=$iconFile
"@ | Add-Content -LiteralPath $shortcutFile

当您创建 URL 快捷方式文件(扩展名 .url)时:

  • 只有 one 可写 属性 被生成的 WshUrlShortcut 对象支持,即 TargetPath,它存储目标 URL.

  • 值得注意的是,这阻止了 IconLocation 属性 的使用,它仅在 可执行 快捷方式文件(扩展名 .lnk),它们是 WshShortcut 个对象。

然而,.url 文件格式 确实 支持自定义图标(默认情况下,使用默认浏览器的图标),但这需要分配它们 交互式,通过文件资源管理器。

幸运的是,.url 文件是 plain-text、.ini 类文件,因此很容易以编程方式直接更新该文件,从而模拟交互式分配图标的结果,如上图


或者 - 在你的情况下这可能是也可能不是一个选项 - 你可以创建一个常规的快捷方式文件,扩展名为 .lnk,这 - 也许令人惊讶 -也适用于分配给 .TargetPath 的 URL。分配给 .IconLocation 然后照常工作。
但是,有一些后果:

  • 显然,您最终会得到一个不同的文件扩展名,并且快捷方式文件不会被轻易识别为 URL扩展名的快捷方式。

  • .lnk 文件是 二进制 文件。

  • .lnkURLs 作为目标路径的文件莫名其妙地不允许 URL稍后通过文件资源管理器编辑。