60

Voglio creare un collegamento con PowerShell per questo eseguibile:Come creare un collegamento utilizzando Powershell

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

Come si può fare?

+1

Begining PowerShell 5.0 New-Item, Remove-Item e Get-ChildItem sono stati migliorati per supportare la creazione e la gestione di collegamenti simbolici [vedere questa risposta] (http://stackoverflow.com/a/29002672/608772) – JPBlanc

+1

Se si desidera eseguire un collegamento come amministratore è possibile utilizzare [questa risposta] (http://stackoverflow.com/a/29002207/608772). – JPBlanc

risposta

86

Non so qualsiasi cmdlet nativo in PowerShell ma è possibile utilizzare com oggetto invece:

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

è possibile creare uno script PowerShell Salva con nome set-shortcut.ps1 nel vostro $ pwd

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

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

e chiamare in questo modo

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

Se si desidera passare argomenti al exe di destinazione, può essere effettuata mediante:

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

prima $ Shortcut.Save().

Per comodità, qui è una versione modificata di set-shortcut.ps1. Accetta argomenti come secondo parametro.

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() 
+0

Grazie, funziona :) – cethint

+1

Felice di aiutare, accetta come risposta! Grazie 1 –

+1

Molto piccolo, ma solo per motivi di coerenza avrei la sintassi del cmdlet 'Set-ShortCut' per essere più simile a' MKLINK', o 'Set-Alias' dove l'alias o il collegamento viene come primo argomento e poi il bersaglio. 'param ([stringa] $ LinkPath, [stringa] $ TargetPath)' – orad

19

partire PowerShell 5.0 New-Item, Remove-Item, e Get-ChildItem sono stati migliorati per supportare la creazione e la gestione di link simbolici. Il parametro ItemType per New-Item accetta un nuovo valore, SymbolicLink. Ora è possibile creare collegamenti simbolici in una singola riga eseguendo il cmdlet New-Item.

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

Attenzione un SymbolicLink è diverso da un Shortcut, i collegamenti sono solo un file. Hanno una dimensione (una piccola, che fa semplicemente riferimento a dove puntano) e richiedono un'applicazione per supportare quel tipo di file per poter essere utilizzato. Un collegamento simbolico è a livello di file system e tutto lo vede come il file originale. Un'applicazione non ha bisogno di supporto speciale per utilizzare un collegamento simbolico.

In ogni caso, se si desidera creare un amministratore Esegui come collegamento utilizzando PowerShell è possibile utilizzare

$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) 

Se qualcuno vuole cambiare qualcosa di diverso in un file .LNK è possibile fare riferimento a official Microsoft documentation.

+3

È possibile anche impostare l'icona per il collegamento? – orad

+1

Un collegamento simbolico è molto diverso da un collegamento, però. Un collegamento simbolico creato usando 'Nuovo elemento' in' "$ {env: AppData} \ Microsoft \ Windows \ SendTo" 'non verrà visualizzato nel menu Invia a Explorer, ad esempio, e non consente la personalizzazione delle proprietà di collegamento come icona o directory di lavoro. – brianary

+0

@brianary ha perfettamente ragione, ho fatto una confusione qui! Modifico la mia risposta in modo che chiunque possa parlare di downvote. – JPBlanc

Problemi correlati