2017-01-17 15 views
1

Я хочу изменить значок для существующего ярлыка, используя Powershell.Как изменить значки для существующих ярлыков ссылок с помощью Powershell?

Я играл с ним, но я не мог установить изменения, поэтому я пошел в интернет и подошел с пустыми руками. Я видел примеры с VB и командной оболочкой, но ничего с Powershell. Почти 99% продемонстрировали, как создать ярлык, но мне просто нужно знать, как изменить значок и только значок.

Вот что я сделал до сих пор:

# Make a copy of the icon in the directory 
PS> cd Program Files (x86)\Dir\Fol\ 
PS Program Files (x86)\Dir\Fol> cp 1234567890.ico 12345678901.ico 

# Gets the IconFile property and changes it to the new icon 
PS Program Files (x86)\Dir\Fol> cd Desktop\Folder\ 
PS Desktop\Folder>(Get-Content "file name")[6] 
IconFile=C:\Program Files (x86)\Dir\Fol\1234567890.ico 
PS Desktop\Folder>(Get-Content "file name")[6] -replace ".ico","1.ico" 

Я пытался работать с WScript.Shell ComObject, но это, кажется, только создавать новые ярлыки.

Мне нравится, когда я собираюсь с ним работать, если бы был способ сохранить, обновить и применить новый путь IconFile в объекте.

Я делаю это как действие исправления из-за значков (или, может быть, что-то в символическом LNK?), «Ломающихся» и по умолчанию использующих общий значок. Кажется, только проблема с ярлыками. Ярлык работает отлично, все в порядке, но по той или иной причине значки по умолчанию. Если я войду и повторно использую одно и то же имя значка через GUI, он не изменится. Однако, если я изменяю имя файла .ico по какой-либо мере, а затем устанавливаю его, он работает. Не знаю, почему он это делает, но я хотел создать сценарий PS, который будет делать это автоматически (и я искал оправдание, чтобы затушить скрипт)

+0

Это не ярлык lnk, а просто текстовый файл, см. [Неофициальный формат ссылки] (http://www.lyberty.com/encyc/articles/tech/dot_url_format_-_an_unofficial_guide.html). – wOxxOm

ответ

2

wscript.shellсоздаст новый открытый ИЛИ существующий ярлык. Вот краткий сценарий, где вам нужно будет определить, $ShortcutPath$IconLocation и $IconArrayIndex:

$Shell = New-Object -ComObject ("WScript.Shell") 
$Shortcut = $Shell.CreateShortcut($ShortcutPath) 
$Shortcut.IconLocation = "$IconLocation, $IconArrayIndex" 
$Shortcut.Save() 
+0

Я видел '$ Shell.CreateShortcut()' раньше, но я думал, что собирается создать новый ярлык. Я предполагаю, что он создает объект этого ярлыка, чтобы к нему можно было обращаться программно? Что такое '$ IconArrayIndex'? Я думаю, что я помню, что он был указан как 0. – Rincewind

+0

@wOxxOm Не могли бы вы сказать, что это ответ? И упомянуть '$ shortcut.Save()' при завершении? Я выберу его в качестве своего ответа - он работал после битвы. – Rincewind

+1

Нет необходимости в обмане. Если ярлык уже существует, он открывает его. [Цитируется из MSDN] (https://msdn.microsoft.com/en-us/library/xsy6k3ys (v = vs.84) .aspx): _CreateShortcut Method Создает новый ярлык или открывает существующий ярлык. Также тестируется работая над Win10. – BenH

1

для меня .iconlocation не существует в $ ярлыке и выдает ошибку (может быть версия Powershell ...). но вот как изменились URL значка на обычай, который я сделал: (основная часть команды надстройки содержания)

$WshShell = New-Object -comObject WScript.Shell 

$path = "C:\Users\USER\desktop\WEBSITE.url" 

$targetpath = "https://WEBSITE.com" 

$iconlocation = "C:\Users\USER\Desktop\YourIcon.ico" 

$iconfile = "IconFile=" + $iconlocation 

$Shortcut = $WshShell.CreateShortcut($path) 

$Shortcut.TargetPath = $targetpath 

$Shortcut.Save() 

Add-Content $path "HotKey=0" 

Add-Content $path "$iconfile" 

Add-Content $path "IconIndex=0" 
1

я писал сценарий, чтобы изменить значок папки по умолчанию на значок сети водить машину. Это может помочь где-то. Команда:

$ ShortCut.IconLocation = "C: \ WINDOWS \ system32 \ imageres.dll, 28";