Cách tạo lối tắt bằng PowerShell


90

Tôi muốn tạo lối tắt bằng PowerShell cho tệp thực thi này:

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

Điều này có thể giải quyết như thế nào?


2
Nếu bạn muốn chạy Lối tắt với tư cách Quản trị viên, bạn có thể sử dụng câu trả lời này .
JPBlanc

Bạn nên nghiêm túc xem xét việc chấp nhận câu trả lời của @ JPBlanc. Đó là một lớp lót
Kolob Canyon

@KolobCanyon Hãy cẩn thận, câu trả lời của tôi là một liên kết tượng trưng, ​​không phải là một phím tắt.
JPBlanc

Câu trả lời:


139

Tôi không biết bất kỳ lệnh ghép ngắn gốc nào trong powershell nhưng bạn có thể sử dụng đối tượng com để thay thế:

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

bạn có thể tạo một tệp lệnh powershell lưu dưới dạng set-shortcut.ps1 trong $ pwd của mình

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

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

và gọi nó như thế này

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

Nếu bạn muốn chuyển đối số đến exe đích, nó có thể được thực hiện bằng cách:

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

trước $ Shortcut.Save ().

Để thuận tiện, đây là phiên bản sửa đổi của set-shortcut.ps1. Nó chấp nhận các đối số làm tham số thứ hai của nó.

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
Rất nhỏ, nhưng chỉ vì mục đích nhất quán, tôi sẽ có cú pháp của Set-ShortCutlệnh ghép ngắn giống hơn MKLINK, hoặc Set-Aliasnơi bí danh hoặc liên kết xuất hiện như đối số đầu tiên và sau đó là đích. param ( [string]$LinkPath, [string]$TargetPath )
orad

Một hạn chế của thành phần WshShell COM hoặc cmd /c mklinkcách giải quyết là bộ ký tự rất hạn chế để đặt tên cho tệp .lnk. Ví dụ, tên có chứa → sẽ bị lỗi. Một cách giải quyết vấn đề này, nếu bạn cần hỗ trợ ký tự tốt hơn, là [Web.HttpUtility]::UrlEncode()(sau Add-Type -AN System.Web) tên tệp trong khi tạo tệp .lnk, sau đó đổi tên nó thành tên UrlDecoded bằng cách sử dụng Rename-Item.
brianary,

Khi tạo lối tắt trên màn hình thực (trái ngược với việc giả sử một đường dẫn được mã hóa cứng có thể đúng hoặc có thể không đúng, một sơ suất mà tôi đã quan sát nhiều lần), SpecialFoldersphương thức của một đối tượng WScript có thể hữu ích: $WshShell.SpecialFolders("Desktop")sẽ mang lại cho bạn đường dẫn thực sự đến thư mục màn hình nền mà bạn có thể sử dụng sau đó khi gọi CreateShortcut.
28/09/17

Tôi đã sử dụng phương pháp này với PS C:\Users\${myUser} $Shortcut = $WshShell.CreateShortcut("$C:\Users\${myUser}\home.lnk"). Nó đã tạo ra một lối tắt có thể được nhìn thấy từ trình khám phá cửa sổ, nhưng khi tôi nhập cd homevào chính PS, tôi gặp lỗicd : Cannot find path 'C:\Users\carpb\home' because it does not exist.
Ben Carp,

44

Bắt đầu PowerShell 5.0 New-Item, Remove-ItemGet-ChildItemđã được cải tiến để hỗ trợ tạo và quản lý các liên kết tượng trưng. Các itemtype tham số cho New-Itemchấp nhận một giá trị mới, SymbolicLink. Bây giờ bạn có thể tạo các liên kết tượng trưng trong một dòng bằng cách chạy lệnh ghép ngắn New-Item.

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

Hãy cẩn thận một SymbolicLink khác với một Shortcut , các phím tắt chỉ là một tập tin. Chúng có kích thước (Một kích thước nhỏ, chỉ tham chiếu đến nơi chúng trỏ đến) và chúng yêu cầu một ứng dụng hỗ trợ loại tệp đó để được sử dụng. Một liên kết tượng trưng là cấp hệ thống tệp và mọi thứ đều coi nó là tệp gốc. Một ứng dụng không cần hỗ trợ đặc biệt để sử dụng một liên kết tượng trưng.

Dù sao nếu bạn muốn tạo lối tắt Run As Administrator bằng Powershell, bạn có thể sử dụng

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

Nếu ai đó muốn thay đổi nội dung khác trong tệp .LNK, bạn có thể tham khảo tài liệu chính thức của Microsoft .


4
Có thể đặt biểu tượng cho phím tắt không?
orad

7
Tuy nhiên, một liên kết biểu tượng rất khác với một phím tắt. Ví dụ: một liên kết biểu tượng được tạo bằng cách sử dụng New-Itemtrong "${env:AppData}\Microsoft\Windows\SendTo"sẽ không hiển thị trong menu Gửi Đến của Explorer và không cho phép tùy chỉnh các thuộc tính Lối tắt như biểu tượng hoặc thư mục làm việc.
brianary,

Nếu tôi hiểu chính xác, nếu bạn đặt một liên kết tượng trưng, ​​phím tắt có thể được sử dụng từ bất kỳ trình bao nào và từ bất kỳ thư mục nào. Nó giống như thiết lập một hệ thống var. Điều này có chính xác? Bạn cũng có thể sử dụng nó cho các thư mục?
Ben Carp,

1
Nó ngạc nhiên như thế nào PowerShell Dev ấy nhờ chúng tôi viết được méo mó và mã không thể hiểu như trình bày ở trên, thay vì chỉ thực hiện 3 dòng vào một tham số mới như thế này: New-Item -ItemType SymbolicLink -RunAsAdmin ....
not2qubit

1
@Luke, nhưng tất nhiên, đó là một liên kết thám hiểm, vì vậy khi bạn nhấp đúp vào nó, nó sẽ bắt đầu calc.exe. Vì vậy, nó sẽ xảy ra khi bạn khởi động nó với PowerShell ( & C:\temp\calc.lnk). Bạn mong chờ điều gì ?
JPBlanc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.