
Так, чтобы при запуске скрипта появлялся запрос от UAC

Утилита runas.exe меня не устроила, т.к. она требует явного указания имени пользователя, ввода пароля или использования saved credentials. «Сторонние» утилиты я даже не рассматривал – ошибки в коде я и сам сделаю, зачем мне еще чужие? :)
Перепробовав несколько вариантов я остановился на собственноручно написанном скрипте для PowerShell:
$ErrorActionPreference = 'Stop' $si = New-Object System.Diagnostics.ProcessStartInfo $si.FileName = $args[0] $si.Arguments = [String]::Join(' ', $args[1..($args.Count - 1)]) $si.Verb = 'RunAs' $si.UseShellExecute = $true $process = [System.Diagnostics.Process]::Start($si) # Very strange code... # But I spy it in MSBuild... # I hope these guys know what they are doing! :) $process.WaitForExit() do { [System.Threading.Thread]::Sleep(0) } while (!$process.HasExited) Exit $process.ExitCode
Фактически, это вызов ShellExecuteEx() с параметром lpVerb = «RunAs».
Использовать комманлет Start-Process у меня не получилось, т.к. при одновременном указании параметров -Verb RunAs и -Wait он завершается с ошибкой:
PS C:\Users\psg> Start-Process 'cmd.exe' -Verb RunAs -Wait
Start-Process : Access is denied
At line:1 char:14
+ Start-Process <<<< 'cmd.exe' -Verb RunAs -Wait
+ CategoryInfo : NotSpecified: (:) [Start-Process], Win32Exception
+ FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.PowerShell.Commands.StartProcessCommandВпрочем, может быть, я просто плохо искал, и нужная мне утилита все-таки существует?.. В таком случае я буду рад вашим комментариям!

