PowerShellを使用してショートカットを作成する方法


90

PowerShellを使用して、この実行可能ファイルのショートカットを作成します。

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

これはどのように行うことができますか?


2
管理者としてショートカットを実行する場合は、この回答を使用できます。
JPBlanc 2015年

@JPBlancの回答を受け入れることを真剣に検討する必要があります。ワンライナー
コロブキャニオン

@KolobCanyon注意してください。私の答えはシンボリックリンクであり、ショートカットではありません。
JPBlanc 2018

回答:


138

PowerShellのネイティブコマンドレットは知りませんが、代わりに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()

$ pwdにset-shortcut.ps1として保存するPowerShellスクリプトを作成できます

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

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

このように呼んで

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

ターゲットexeに引数を渡したい場合は、次のようにします。

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

$ Shortcut.Save()の

便宜上、set-shortcut.ps1の変更バージョンを以下に示します。2番目のパラメーターとして引数を受け入れます。

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
非常にマイナーですが、一貫性をSet-ShortCut保つために、コマンドレットの構文をのようMKLINKにするかSet-Alias、エイリアスまたはリンクを最初の引数として、次にターゲットとして指定します。 param ( [string]$LinkPath, [string]$TargetPath )
orad 2014年

WshShell COMコンポーネントまたはcmd /c mklink回避策の1つの制限は、.lnkファイルに名前を付けるための非常に制限された文字セットです。たとえば、→を含む名前は失敗します。これを回避する1つの方法は、より良い文字サポートが必要な場合、.lnkファイルの作成中にファイル名を[Web.HttpUtility]::UrlEncode()(の後にAdd-Type -AN System.Web)変更し、Rename-Itemを使用してUrlDecodedの名前に変更することです。
ブライアリー2015年

真のデスクトップにショートカットを作成する場合(かそうでないハードコードされたパスを想定するのではなく、私が何度も観察した過ち)、SpecialFoldersWScriptオブジェクトのメソッドが便利に$WshShell.SpecialFolders("Desktop")なる場合があります。デスクトップフォルダーCreateShortcut。後でを呼び出すときに使用できます。
午前

この方法をで使用しましたPS C:\Users\${myUser} $Shortcut = $WshShell.CreateShortcut("$C:\Users\${myUser}\home.lnk")。Windowsエクスプローラーから表示できるショートカットを作成しましたcd homeが、PS自体を入力するとエラーが発生しますcd : Cannot find path 'C:\Users\carpb\home' because it does not exist.
Ben Carp

44

PowerShell 5.0 New-Item以降ではRemove-ItemGet-ChildItemシンボリックリンクの作成と管理をサポートするように拡張されています。のItemTypeパラメータNew-Itemは、新しい値SymbolicLink を受け入れます。New-Itemコマンドレットを実行して、シンボリックリンクを1行で作成できるようになりました。

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

気をつけてくださいSymbolicLinkが異なっているショートカットのショートカットは単なるファイルです。それらにはサイズがあり(小さいもの、ポイントする場所を参照するだけ)、使用するためにはアプリケーションがそのファイルタイプをサポートする必要があります。シンボリックリンクはファイルシステムレベルであり、すべてが元のファイルと見なします。アプリケーションは、シンボリックリンクを使用するために特別なサポートを必要としません。

とにかく、Powershellを使用して実行管理者のショートカットを作成する場合は、

$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ファイルの何かを変更したい場合は、公式のMicrosoftドキュメントを参照できます


4
ショートカットのアイコンも設定できますか?
orad

6
ただし、シンボリックリンクはショートカットとは大きく異なります。New-Itemin "${env:AppData}\Microsoft\Windows\SendTo"を使用して作成されたシンボリックリンクは、エクスプローラの[送信]メニューに表示されません。たとえば、アイコンや作業ディレクトリなどのショートカットプロパティをカスタマイズすることはできません。
ブライアリー2015年

私が正しく理解していれば、シンボリックリンクを設定すれば、ショートカットはどのシェルからでも、どのディレクトリからでも使用できます。これは、システム変数を設定するようなものです。これは正しいです?ディレクトリにも使用できますか?
Ben Carp

1
PowerShell Devが、3行を次のような新しいパラメーターに実装するだけでなく、上記のように歪んで理解できないコードをどのように記述させるのかは驚くべきことですNew-Item -ItemType SymbolicLink -RunAsAdmin ...
not2qubit

1
@Luke、もちろん、これはエクスプローラーのリンクなので、ダブルクリックすると、calc.exeが起動します。したがって、PowerShell(& C:\temp\calc.lnk)を使用して起動すると実行されます。何を期待していますか?
JPBlanc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.