60

Quiero crear un acceso directo con Powershell para este ejecutable:Cómo crear un acceso directo usando Powershell

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

¿Cómo puede hacerse esto?

+1

Inicio de PowerShell 5.0 Nuevo-Elemento, Eliminar-Elemento y Get-ChildItem se han mejorado para permitir la creación y administración de enlaces simbólicos [ver esta respuesta] (http://stackoverflow.com/a/29002672/608772) – JPBlanc

+1

If desea ejecutar un Administrador de acceso directo como puede usar [esta respuesta] (http://stackoverflow.com/a/29002207/608772). – JPBlanc

Respuesta

86

No sé cualquier cmdlet nativo en powershell pero se puede usar en lugar de objetos COM:

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

puede crear un script de PowerShell guardar como configuración shortcut.ps1 en su $ pwd

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

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

y llamarlo como esto

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

Si quiere pasar argumentos al exe objetivo, se puede hacer por:

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

antes $ Shortcut.Save().

Para su comodidad, aquí hay una versión modificada de set-shortcut.ps1. Acepta argumentos como su segundo parámetro.

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

Gracias, funciona :) – cethint

+1

¡Feliz de ayudar, acepta esto como la respuesta! Gracias1 –

+1

Muy poco importante, pero por el bien de la coherencia me gustaría tener la sintaxis del cmdlet 'Set-ShortCut' para ser más como' MKLINK', o 'Set-Alias' donde el alias o enlace viene como primer argumento y luego el objetivo. 'param ([cadena] $ LinkPath, [cadena] $ TargetPath)' – orad

19

partir PowerShell 5.0 New-Item, Remove-Item y Get-ChildItem se han mejorado para apoyar la creación y administración de vínculos simbólicos. El ItemType parámetro para New-Item acepta un nuevo valor, SymbolicLink. Ahora puede crear enlaces simbólicos en una sola línea ejecutando el cmdlet New-Item.

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

tener cuidado un SymbolicLink es diferente de un acceso directo, accesos directos son sólo un archivo. Tienen un tamaño (uno pequeño, que solo hace referencia a dónde apuntan) y requieren una aplicación que admita ese tipo de archivo para poder ser utilizado. Un enlace simbólico es el nivel del sistema de archivos, y todo lo ve como el archivo original. Una aplicación no necesita soporte especial para usar un enlace simbólico.

De todos modos, si desea crear un administrador Ejecutar como acceso directo mediante PowerShell puede utilizar

$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 alguien quiere cambiar algo más en un archivo LNK puede hacer referencia a official Microsoft documentation.

+3

¿Es posible establecer también el icono para el acceso directo? – orad

+1

Sin embargo, un enlace simbólico es muy diferente de un acceso directo. Un enlace simbólico creado usando 'Nuevo-Elemento' en' "$ {env: AppData} \ Microsoft \ Windows \ SendTo" 'no se mostrará en el menú Enviar a Explorador a, por ejemplo, y no permite personalizar las propiedades de Acceso directo como icono o directorio de trabajo. – brianary

+0

@brianary está en lo cierto, hice una confusión aquí! Edito mi respuesta para que cualquiera pueda rechazarla. – JPBlanc

Cuestiones relacionadas