从 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
文件是 二进制 文件。
.lnk
以 URLs 作为目标路径的文件莫名其妙地不允许 URL稍后通过文件资源管理器编辑。
我正在尝试创建带有自定义图标的 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
文件是 二进制 文件。.lnk
以 URLs 作为目标路径的文件莫名其妙地不允许 URL稍后通过文件资源管理器编辑。