Cara membuat pintasan menggunakan PowerShell

90

Saya ingin membuat pintasan dengan PowerShell untuk eksekusi ini:

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

Bagaimana ini bisa dilakukan?

cethint
sumber
2
Jika Anda ingin menjalankan Shortcut As Administrator, Anda dapat menggunakan jawaban ini .
JPBlanc
Anda harus secara serius mempertimbangkan untuk menerima jawaban @ JPBlanc. Ini satu kapal
Kolob Canyon
@KolobCanyon Hati-hati, jawaban saya adalah tautan Simbolik, bukan jalan pintas.
JPBlanc

Jawaban:

139

Saya tidak tahu cmdlet asli apa pun di PowerShell tetapi Anda dapat menggunakan objek com sebagai gantinya:

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

Anda dapat membuat skrip PowerShell simpan sebagai set-shortcut.ps1 di $ pwd Anda

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

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

dan menyebutnya seperti ini

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

Jika Anda ingin meneruskan argumen ke exe target, itu dapat dilakukan dengan:

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

sebelum $ Shortcut.Save ().

Untuk kenyamanan, berikut adalah versi modifikasi dari set-shortcut.ps1. Ini menerima argumen sebagai parameter keduanya.

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()
CB.
sumber
1
Sangat kecil, tetapi hanya demi konsistensi saya akan memiliki sintaks Set-ShortCutcmdlet lebih seperti MKLINK, atau di Set-Aliasmana alias atau tautan muncul sebagai argumen pertama dan kemudian target. param ( [string]$LinkPath, [string]$TargetPath )
orad
Salah satu batasan baik dari komponen WshShell COM atau cmd /c mklinksolusi adalah kumpulan karakter yang sangat terbatas untuk penamaan file .lnk. Sebuah nama yang mengandung a → akan gagal, misalnya. Salah satu cara untuk mengatasi ini, jika Anda membutuhkan dukungan karakter yang lebih baik, adalah [Web.HttpUtility]::UrlEncode()(setelah Add-Type -AN System.Web) nama file saat membuat file .lnk, kemudian mengganti namanya menjadi nama UrlDecoded menggunakan Rename-Item.
Brianary
Saat membuat pintasan pada desktop yang sebenarnya (sebagai lawan dengan asumsi jalur hard-code yang mungkin atau mungkin tidak benar, malpraktek yang saya amati berkali-kali), SpecialFoldersmetode objek WScript mungkin berguna: $WshShell.SpecialFolders("Desktop")akan memberi Anda jalur yang benar ke folder desktop, yang dapat Anda gunakan selanjutnya saat menelepon CreateShortcut.
amn
Saya menggunakan metode ini dengan PS C:\Users\${myUser} $Shortcut = $WshShell.CreateShortcut("$C:\Users\${myUser}\home.lnk"). Itu membuat pintasan yang dapat dilihat dari windows explorer, tetapi ketika saya mengetik cd homedi PS itu sendiri saya mendapatkan kesalahancd : Cannot find path 'C:\Users\carpb\home' because it does not exist.
Ben Carp
44

Memulai PowerShell 5.0 New-Item,, Remove-Itemdan Get-ChildItemtelah ditingkatkan untuk mendukung pembuatan dan pengelolaan tautan simbolik. The ItemType parameter untuk New-Itemmenerima nilai baru, SymbolicLink. Sekarang Anda dapat membuat tautan simbolik dalam satu baris dengan menjalankan cmdlet Item Baru.

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

Hati-hati yang SymbolicLink berbeda dari Shortcut , jalan pintas hanya file. Mereka memiliki ukuran (yang kecil, yang hanya mereferensikan ke mana mereka menunjuk) dan mereka membutuhkan aplikasi untuk mendukung tipe file tersebut agar dapat digunakan. Tautan simbolis adalah level sistem file, dan semuanya melihatnya sebagai file asli. Aplikasi tidak memerlukan dukungan khusus untuk menggunakan tautan simbolis.

Pokoknya jika Anda ingin membuat shortcut Run As Administrator menggunakan Powershell bisa Anda gunakan

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

Jika ada yang ingin mengubah sesuatu yang lain dalam file .LNK, Anda dapat merujuk ke dokumentasi resmi Microsoft .

JPBlanc
sumber
4
Apakah mungkin juga menyetel ikon untuk pintasan?
orad
7
Symlink sangat berbeda dari shortcut. Tautan simbolis yang dibuat menggunakan New-Itemin "${env:AppData}\Microsoft\Windows\SendTo"tidak akan ditampilkan di menu Kirim Ke Explorer, misalnya, dan tidak mengizinkan penyesuaian properti Pintasan seperti ikon atau direktori kerja.
Brianary
Jika saya mengerti dengan benar, jika Anda menetapkan tautan simbolis, pintasan dapat digunakan dari shell mana pun, dan dari direktori mana pun. Ini seperti menyetel var sistem. Apakah ini benar? Bisakah Anda juga menggunakannya untuk direktori?
Ben Carp
1
Ini mengejutkan bagaimana PowerShell Dev yang suka memiliki kita menulis berkerut dan kode dimengerti seperti yang ditunjukkan di atas, bukan hanya melaksanakan 3 baris menjadi parameter baru seperti ini: New-Item -ItemType SymbolicLink -RunAsAdmin ....
not2qubit
1
@ Luke, tapi tentu saja, ini adalah tautan penjelajah, jadi ketika Anda mengekliknya dua kali, calc.exe akan dimulai. Begitu pula saat Anda memulainya dengan PowerShell ( & C:\temp\calc.lnk). Apa yang kamu harapkan ?
JPBlanc