Это то, с чем PowerShell действительно хорош, и поэтому является причиной, чтобы отказаться от пакетных файлов и перейти на PowerShell.
PowerShell может общаться с .NET . Например, вы можете получить местоположение рабочего стола следующим образом:
[Environment]::GetFolderPath("Desktop")
PowerShell может взаимодействовать с объектами COM , включая WScript.Shell
, которые могут создавать ярлыки:
New-Object -ComObject WScript.Shell).CreateShortcut( ... )
Так что ваш скрипт может выглядеть так:
$linkPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "MyShortcut.lnk"
$targetPath = Join-Path ([Environment]::GetFolderPath("ProgramFiles")) "MyCompany\MyProgram.exe"
$link = (New-Object -ComObject WScript.Shell).CreateShortcut( $linkpath )
$link.TargetPath = $targetPath
$link.Save()
Ярлыки имеют множество настроек, которыми WScript.Shell не может манипулировать, например, опция «Запуск от имени администратора». Они доступны только через интерфейс Win32 IShellLinkDataList
, что очень неудобно, но это возможно.