web-dev-qa-db-ja.com

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

この実行可能ファイルのPowerShellでショートカットを作成したい:

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

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

77
cethint

私は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"  

before $ 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()
117
CB.

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

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

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

とにかく、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の公式ドキュメント を参照できます。

32
JPBlanc