124 votes

Comment créer un raccourci en utilisant PowerShell

Je veux créer un raccourci avec PowerShell pour cet exécutable :

C:\Program Files (x86)\ColorPix\ColorPix.exe

Comment cela peut-il être fait ?

2 votes

Si vous souhaitez exécuter un raccourci en tant qu'administrateur, vous pouvez utiliser la commande suivante cette réponse .

0 votes

Vous devriez sérieusement envisager d'accepter la réponse de @JPBlanc. C'est une réponse en une phrase

1 votes

@KolobCanyon Attention, ma réponse est un lien symbolique, pas un raccourci.

184voto

CB. Points 24549

Je ne connais pas de cmdlet native dans powershell mais vous pouvez utiliser l'objet com à la place :

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$Home\Desktop\ColorPix.lnk")
$Shortcut.TargetPath = "C:\Program Files (x86)\ColorPix\ColorPix.exe"
$Shortcut.Save()

vous pouvez créer un script powershell sauvegarder comme set-shortcut.ps1 dans votre $pwd

param ( [string]$SourceExe, [string]$DestinationPath )

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($DestinationPath)
$Shortcut.TargetPath = $SourceExe
$Shortcut.Save()

et l'appeler comme ceci

Set-ShortCut "C:\Program Files (x86)\ColorPix\ColorPix.exe" "$Home\Desktop\ColorPix.lnk"

Si vous voulez passer des arguments à l'exe cible, cela peut être fait par :

#Set the additional parameters for the shortcut  
$Shortcut.Arguments = "/argument=value"  

avant $Shortcut.Save().

Pour plus de commodité, voici une version modifiée de set-shortcut.ps1. Elle accepte des arguments comme second paramètre.

param ( [string]$SourceExe, [string]$ArgumentsToSourceExe, [string]$DestinationPath )
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($DestinationPath)
$Shortcut.TargetPath = $SourceExe
$Shortcut.Arguments = $ArgumentsToSourceExe
$Shortcut.Save()

1 votes

C'est un point très mineur, mais par souci de cohérence, j'aurais la syntaxe suivante Set-ShortCut pour qu'elle ressemble davantage à MKLINK o Set-Alias où l'alias ou le lien vient comme premier argument et ensuite la cible. param ( [string]$LinkPath, [string]$TargetPath )

0 votes

L'une des limitations du composant COM WshShell ou de l'outil cmd /c mklink Les solutions de contournement sont un jeu de caractères très limité pour nommer le fichier .lnk. Un nom contenant un a échouera, par exemple. Une façon de contourner ce problème, si vous avez besoin d'un meilleur support de caractères, est de [Web.HttpUtility]::UrlEncode() (après Add-Type -AN System.Web ) le nom du fichier lors de la création du fichier .lnk, puis le renommer au nom UrlDecoded en utilisant Rename-Item.

3 votes

Lors de la création d'un raccourci sur vrai (par opposition à l'hypothèse d'un chemin codé en dur qui peut ou non être vrai, une mauvaise pratique que j'ai observée à de nombreuses reprises), l'option SpecialFolders d'un objet WScript peut s'avérer utile : $WshShell.SpecialFolders("Desktop") vous donnera le véritable chemin d'accès au dossier du bureau, que vous pourrez utiliser ultérieurement lors de l'appel à CreateShortcut .

52voto

JPBlanc Points 26156

Débutant PowerShell 5.0 New-Item , Remove-Item y Get-ChildItem ont été améliorés pour prendre en charge la création et la gestion des liens symboliques. Le site ItemType pour New-Item accepte une nouvelle valeur, SymbolicLink. Vous pouvez désormais créer des liens symboliques en une seule ligne en exécutant le cmdlet New-Item.

New-Item -ItemType SymbolicLink -Path "C:\temp" -Name "calc.lnk" -Value "c:\windows\system32\calc.exe"

Soyez prudent a SymbolicLink est différent d'un Raccourci les raccourcis sont juste un fichier. Ils ont une taille (une petite taille, qui fait juste référence à l'endroit où ils pointent) et ils nécessitent qu'une application supporte ce type de fichier pour être utilisés. Un lien symbolique est au niveau du système de fichiers, et tout le monde le voit comme le fichier original. Une application n'a besoin d'aucun support particulier pour utiliser un lien symbolique.

De toute façon, si vous voulez créer un Exécuter en tant qu'administrateur en utilisant Powershell, vous pouvez utiliser

$file="c:\temp\calc.lnk"
$bytes = [System.IO.File]::ReadAllBytes($file)
$bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON (Use –bor to set RunAsAdministrator option and –bxor to unset)
[System.IO.File]::WriteAllBytes($file, $bytes)

Si quelqu'un veut modifier quelque chose d'autre dans un fichier .LNK, vous pouvez vous référer à la documentation officielle de Microsoft .

4 votes

Est-il possible de définir également l'icône du raccourci ?

14 votes

Un lien symbolique est très différent d'un raccourci, cependant. Un lien symbolique créé à l'aide de New-Item en "${env:AppData}\Microsoft\Windows\SendTo" n'apparaîtra pas dans le menu "Envoyer vers" de l'Explorateur, par exemple, et ne permet pas de personnaliser les propriétés du raccourci comme l'icône ou le répertoire de travail.

0 votes

Si je comprends bien, si vous définissez un lien symbolique, le raccourci peut être utilisé à partir de n'importe quel shell, et de n'importe quel répertoire. C'est un peu comme définir une variable système. Est-ce correct ? Peut-on également l'utiliser pour les répertoires ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X