PowerShell kullanarak bir kısayol nasıl oluşturulur


92

Bu yürütülebilir dosya için PowerShell ile bir kısayol oluşturmak istiyorum:

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

Bu nasıl yapılabilir?


2
Yönetici olarak bir Kısayol çalıştırmak istiyorsanız, bu yanıtı kullanabilirsiniz .
JPBlanc

@ JPBlanc'ın cevabını ciddi olarak kabul etmelisiniz. It's a one liner
Kolob Canyon

@KolobCanyon Dikkatli olun, cevabım kısayol değil Sembolik bir bağlantıdır.
JPBlanc

Yanıtlar:


143

Powershell'de herhangi bir yerel cmdlet bilmiyorum ama bunun yerine com nesnesini kullanabilirsiniz:

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

$ pwd dosyanıza set-kısayol.ps1 olarak kaydederek bir powershell betiği oluşturabilirsiniz

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

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

ve böyle çağır

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

Hedef exe'ye argümanlar iletmek istiyorsanız, şu şekilde yapılabilir:

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

$ Shortcut.Save () öncesinde .

Kolaylık sağlamak için, set-kısayol.ps1'in değiştirilmiş bir sürümü burada. Argümanları ikinci parametresi olarak kabul eder.

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
Çok küçük, ama sadece tutarlılık uğruna ben sözdizimini olurdu Set-ShortCutdaha gibi olmak için komutu MKLINKveya Set-Aliasdiğer ad veya bağlantı ilk argüman ve sonra hedef olarak giriyor. param ( [string]$LinkPath, [string]$TargetPath )
orad

WshShell COM bileşeninin veya cmd /c mklinkgeçici çözümlerin bir sınırlaması, .lnk dosyasını adlandırmak için çok sınırlı bir karakter kümesidir. Örneğin → içeren bir isim başarısız olur. Bunu aşmanın bir yolu, daha iyi karakter desteğine ihtiyacınız varsa , .lnk dosyasını oluştururken dosya adını [Web.HttpUtility]::UrlEncode()(sonra Add-Type -AN System.Web) ve ardından Yeniden Adlandır-Öğeyi kullanarak UrlDecoded adıyla yeniden adlandırmaktır.
brianary

Gerçek masaüstünde kısayol oluştururken ( doğru olabilecek veya olmayabilecek sabit kodlanmış bir yol varsaymanın aksine, defalarca gözlemlediğim bir yanlış uygulama), SpecialFoldersbir WScript nesnesinin yöntemi kullanışlı olabilir: $WshShell.SpecialFolders("Desktop")size doğru yolu verecektir. daha sonra arama sırasında kullanabileceğiniz masaüstü klasörü CreateShortcut.
amn

Bu yöntemi ile kullandım PS C:\Users\${myUser} $Shortcut = $WshShell.CreateShortcut("$C:\Users\${myUser}\home.lnk"). Bu windows explorer görülebilir bir kısayol yarattı, ama ben daktilo ederken cd homePS kendisinde bir hata alıyorumcd : Cannot find path 'C:\Users\carpb\home' because it does not exist.
Ben Sazan

47

PowerShell 5.0 başlayarak New-Item, Remove-Itemve Get-ChildItemyaratmak ve sembolik bağlantıları yönetmek desteklemek üzere geliştirilmiştir. İçin ItemType parametresi, New-Itemyeni bir değer olan SymbolicLink'i kabul eder. Artık New-Item cmdlet'ini çalıştırarak tek bir satırda sembolik bağlantılar oluşturabilirsiniz.

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

Dikkatli olun bir SymbolicLink bir farklıdır Kısayolunda kısayolları sadece dosya vardır. Boyutları vardır (sadece gösterdikleri yere işaret eden küçük bir boyut) ve kullanılmaları için o dosya türünü desteklemek için bir uygulamaya ihtiyaç duyarlar. Sembolik bir bağ, dosya sistemi seviyesidir ve her şey onu orijinal dosya olarak görür. Bir uygulamanın sembolik bağlantı kullanmak için özel bir desteğe ihtiyacı yoktur.

Her neyse, Powershell'i kullanarak Yönetici Olarak Çalıştır kısayolu oluşturmak istiyorsanız,

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

LNK dosyasında başka bir şeyi değiştirmek isteyen biri varsa, resmi Microsoft belgelerine başvurabilirsiniz .


4
Kısayol simgesini de ayarlamak mümkün müdür?
orad

7
Bununla birlikte, bir sembolik bağlantı bir kısayoldan çok farklıdır. Bir sembolik bağı kullanılarak oluşturulan New-Itemiçinde "${env:AppData}\Microsoft\Windows\SendTo"örneğin menüsünden için Explorer Gönder gösterilmeyecektir ve simgenin veya çalışma dizinine gibi Kısayol özelliklerini özelleştirme izin vermez.
brianary

Doğru anlarsam, sembolik bir bağlantı ayarlarsanız, kısayol herhangi bir kabuktan ve herhangi bir dizinden kullanılabilir. Bu biraz bir sistem değişkeni ayarlamak gibi. Bu doğru mu? Dizinler için de kullanabilir misiniz?
Ben Sazan

1
Bunun yerine sadece bu gibi yeni bir parametre haline 3 satırları uygulanması, PowerShell Dev yerine yukarıda gösterildiği gibi bize çarpılmış ve anlaşılmaz kod yazma var nasıl şaşırtıcı: New-Item -ItemType SymbolicLink -RunAsAdmin ....
not2qubit

1
@Luke, ama tabii ki bu bir gezgin bağlantısı, yani üzerine çift tıkladığınızda calc.exe'yi başlatıyor. Böylece PowerShell ( & C:\temp\calc.lnk) ile başlattığınızda yapar . Ne bekliyorsunuz ?
JPBlanc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.