Que ce soit pour réaliser un script d'installation ou un traitement particulier sur un grand nombre de postes, il arrive parfois que l’on ait besoin de lire, modifier ou créer un raccourci à l’aide d’un script. Pour ce dernier cas, on peut se contenter de coder un copier/coller d'un raccourci préfabriqué, mais cette méthode peut manquer de souplesse car elle ne permet pas par exemple d'adapter le raccourci créé selon certains paramètres.
Avec Powershell, il est en fait possible de créer un raccourci à partir de zéro, mais aussi d’en lire les propriétés et de les modifier, en utilisant simplement les fonctionnalités de l’objet COM Wscript.Shell
.
Pour cela, il faut commencer par créer un nouvel objet Wscript.Shell
en utilisant la cmdlet New-Object
:
$Shell = New-Object -ComObject Wscript.Shell
Ensuite, on utilise la méthode CreateShortcut
pour créer un objet raccourci associé à un chemin. Le nom de cette méthode est un peu trompeur car elle s’applique aussi bien que vous souhaitiez créer, lire ou modifier un raccourci. En fait, elle ne crée pas véritablement le raccourci sur le disque dur mais seulement sa représentation en mémoire (instanciation de la classe WshShortcut
ou WshURLShortcut
). Elle prend en paramètre le chemin du raccourci à lire ou à créer. Penser bien à ajouter l’extension .lnk ou .url selon que votre raccourci pointe respectivement vers un fichier ou une adresse Internet.
$Shortcut = $Shell.CreateShortcut($env:USERPROFILE + "\Desktop\Mon raccourci.lnk")
Vous disposez ensuite d’un ensemble de propriétés sur l’objet obtenu que vous pouvez lire ou modifier selon vos souhaits :
# Cible du raccourci $Shortcut.TargetPath = "C:\chemin\vers\votre\executable.exe" # Paramètres optionnels de ligne de commande $Shortcut.Arguments = "-arguments –si -necessaire" # Dossier cible $Shortcut.WorkingDirectory = "C:\chemin\vers\le\dossier\de\travail"; # Taille de la fenêtre d'exécution (normale, réduite ou agrandie) $Shortcut.WindowStyle = 1; # Raccourci clavier $Shortcut.Hotkey = "CTRL+SHIFT+F"; # Chemin vers l'icône du raccourci $Shortcut.IconLocation = "C:\chemin\vers\votre\executable.exe, 0";
A noter que dans le cas d’un raccourci vers une adresse Internet, seule la propriété TargetPath
est disponible.
Enfin, vous pouvez faire appel à la méthode Save
pour enregistrer le raccourci créé ou les modifications apportées à un raccourci existant :
$Shortcut.Save()
Et c’est tout ! Plutôt simple n’est-ce pas ?
Pour aller un peu plus loin, on peut ensuite combiner tout cela pour créer une ou plusieurs fonctions de manipulation des fichiers raccourcis. Voici par exemple une fonction permettant de récupérer le chemin cible d'un raccourci :
function function Get-ShortcutTarget { <# .SYNOPSIS This function returns the target of a shortcut file (LNK or URL extension). .EXAMPLE Get-ShortcutTarget -FilePath 'C:\Users\profilename\Desktop\MyShortcut.lnk' .PARAMETER FilePath The shortcut's file path (don't forget the extension !) #> [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)] [ValidateScript({ Test-Path -Path $_ -PathType Leaf })] [Alias('Fullname')] [string[]]$FilePath ) process { $ShellObject = New-Object -ComObject Wscript.Shell ($ShellObject.CreateShortcut($FilePath)).TargetPath } }
A vous ensuite d'adapter ou de créer vos propres fonctions selon vos besoins. N'hésitez pas également à faire quelques recherches sur Internet, et notamment sur Github, où vous pourrez trouver des fonctions toutes prêtes pour traiter les raccourcis, comme ici par exemple.
Bonjour, comment déplacer un raccourci créé ainsi sur le bureau vers le menu démarrer ?
Bonjour,
Plutôt que de le déplacer, autant le créer directement à son emplacement adéquat.
Pour créer le raccourci pour tous les utilisateurs du poste, il faut le placer dans le dossier
C:\ProgramData\Microsoft\Windows\Start Menu
. Pour le créer uniquement pour un profil utilisateur, c'est dans le dossierC:\Users\<utilisateur>\Microsoft\Windows\Start Menu
.Bonjour, Comment faire le meme processus avec un fichier lnk ou peut-etre ico ou autre, mais pour un dossier?
Je m'explique: je genere un fichier type debut.bat. D'autres fichiers y sont lies et ce fichier debut correspond au premier fichier execute si je compile mes fichiers. Le fichier-conteneur compile peut se denommer alors debut.exe. Jusque-la, ca va. Mais, serait-il possible de generer le meme type de fichier qu'un .exe, mais simplement a partir de 1.un raccourci a un fichier de lancement, 2.l'icone (lnk?) du raccourci en tant qu'icone du dossier contenant tout le code-source? Ainsi, le dossier a pour apparence le fichier lnk, relie au premier fichier a executer. Dans ce cas-la, un compilateur n'a plus grand-chose d'utile et le processus est aussi efficace. Est-ce possible et comment faire? De deux choses l'une ou les deux: comment placer un fichier lnk a la place de l'icone du dossier, ou bien, comment faire un raccourci avec un fichier .ico que je peux effectivement placer comme icone de dossier?