Как создать ярлык Run As Administrator с помощью Powershell

В моем PowerShell script я создаю ярлык для .exe(используя что-то похожее на ответ от this question):

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

Теперь, когда я создаю ярлык, как мне добавить в script, чтобы он по умолчанию запускался в качестве администратора?

Ответ 1

Этот ответ является переводом PowerShell отличного ответа на этот вопрос Как я могу использовать JScript для создания ярлыка, который использует " Запуск от имени администратора.

Короче говоря, вам нужно прочитать файл .lnk в виде массива байтов. Найдите байт 21 (0x15) и измените бит 6 (0x20) на 1. Это флаг RunAsAdministrator. Затем вы записываете свой байтовый массив обратно в файл .lnk.

В вашем коде это будет выглядеть так:

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

$bytes = [System.IO.File]::ReadAllBytes("$Home\Desktop\ColorPix.lnk")
$bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON
[System.IO.File]::WriteAllBytes("$Home\Desktop\ColorPix.lnk", $bytes)

Если кто-то захочет что-то изменить в файле .LNK, вы можете обратиться к официальной документации Microsoft.

Ответ 2

Правильный переключатель -Elevate для этого не работает?

    CreateShortcut -name "myApp" -Target 
    "${env:ProgramFiles}\mApp\myApp.exe" -OutputDirectory 
    "C:\Users\Public\Desktop" -Elevated True