Kévin Subileau

Espace personnel

Gérer les raccourcis avec Powershell

Powershell - Créer, lire et modifier des raccourcis

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.

3 Commentaires

Dernier commentaire il y a 24/01/2021

Envoyer une réponse à Nirmel MOUCHIQUEL Annuler la réponse.

ou

Champs Requis *.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>