web-dev-qa-db-ja.com

Powershellを使用して実行管理者ショートカットを作成する方法

私のPowerShellスクリプトで、.exeへのショートカットを作成します( この質問 からの回答に似たものを使用します):

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

ここで、ショートカットを作成するときに、スクリプトに追加して、デフォルトで管理者として実行するようにするにはどうすればよいですか?

19
Michelle

この回答は、この質問に対する優れた回答の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の公式ドキュメント を参照してください。

34
Jan Chrbolka