2017-01-17 5 views
1

Je souhaite changer l'icône d'un raccourci existant en utilisant Powershell. J'ai joué avec mais je ne pouvais pas régler les changements, donc je suis allé en ligne et est venu les mains vides. J'ai vu des exemples avec VB et Command Shell mais rien avec Powershell. Près de 99% ont démontré comment créer le raccourci mais j'ai juste besoin de savoir comment changer l'icône et seulement l'icône.Comment puis-je modifier les icônes des raccourcis d'URL existants à l'aide de Powershell?

Voici ce que je l'ai fait jusqu'à présent:

# 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" 

J'ai essayé de travailler avec le WScript.Shell ComObject mais qui semble ne créer que de nouveaux raccourcis. Je me sens comme où j'allais avec cela fonctionnerait s'il y avait un moyen d'enregistrer, mettre à jour et appliquer le nouveau chemin IconFile dans l'objet.

Je le fais comme une action de réparation en raison d'icônes (ou peut-être quelque chose dans le symbolique LNK?) "Rupture" et par défaut à une icône générique. Semble seulement être un problème avec les raccourcis. Le raccourci fonctionne parfaitement, tout va bien mais pour une raison ou une autre, les icônes par défaut. Si je rentre et réapplique le même nom d'icône via l'interface graphique, cela ne changera pas. Cependant, si je change le nom du fichier .ico par n'importe quelle mesure, puis le définir, cela fonctionne. Je ne sais pas pourquoi il le fait mais je voulais créer un script PS qui le ferait automatiquement (et je cherchais une excuse pour bloquer un script)

+0

Ce n'est pas un raccourci-lnk mais simplement un fichier texte, voir [la référence de format non-officiel] (http://www.lyberty.com/encyc/articles/tech/dot_url_format_-_an_unofficial_guide.html). – wOxxOm

Répondre

2

Le wscript.shellCreateShortcut method va créer un nouveau OU ouvrir un raccourci existant. Voici un petit script, où vous devrez définir $ShortcutPath, $IconLocation et $IconArrayIndex:

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

J'ai vu le '$ Shell.CreateShortcut()' avant, mais je pensais que cela allait créer un nouveau raccourci. Je devine qu'il crée un objet de ce raccourci afin qu'il puisse être accédé par programme? Quel est exactement le '$ IconArrayIndex'? Je pense que je me souviens avoir vu que c'était 0. – Rincewind

+0

@wOxxOm Cela vous dérangerait-il de mettre cela comme réponse? Et mentionnez '$ shortcut.Save()' lorsque vous avez terminé? Je vais le sélectionner comme réponse - ça a fonctionné après avoir joué un peu. – Rincewind

+1

Il n'y a pas besoin de la supercherie. Si le raccourci existe déjà, il l'ouvre. [Extrait de MSDN] (https://msdn.microsoft.com/en-us/library/xsy6k3ys (v = vs.84) .aspx): _CreateShortcut, méthode Crée un nouveau raccourci ou ouvre un raccourci existant. travaille sur Win10. – BenH

1

pour moi .iconlocation n'existe pas dans raccourci $ et donne une erreur (peut-être la version powershell ...). mais voici comment changer l'icône d'URL pour une coutume que je fait: (la partie principale est les commandes add-contenu)

$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

je l'écriture d'un script pour changer l'icône du dossier par défaut sur l'icône d'un réseau conduire. Cela pourrait aider quelque part. La commande est:

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