昨日、管理者としてコマンドラインからスクリプトを実行しようといくつかの時間を費やしました。 右クリック>「管理者として実行」に相当するものが必要でした:
スクリプトを実行すると、UACからのリクエストが
runas.exeユーティリティは私に合わなかった 明示的なユーザー名、パスワード、または保存された資格情報が必要です。 サードパーティのユーティリティも検討していませんでした-自分でコードを間違えますが、なぜ見知らぬ人が必要なのですか? :)
いくつかのオプションを試した後、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
実際、これはパラメーターlpVerb = "RunAs"を使用した
ShellExecuteEx()の呼び出しです。
Start-Processコマンドレットの使用に成功しませんでした。 -Verb RunAsおよび-Waitパラメーターを指定すると、エラーで失敗します。
PS C:\ Users \ psg> Start-Process 'cmd.exe' -Verb RunAs -Wait
開始プロセス:アクセスが拒否されました
行:1文字:14
+ Start-Process <<<< 'cmd.exe' -Verb RunAs -Wait
+ CategoryInfo:NotSpecified:(:) [Start-Process]、Win32Exception
+ FullyQualifiedErrorId:System.ComponentModel.Win32Exception、Microsoft.PowerShell.Commands.StartProcessCommand
しかし、たぶん私は見栄えが悪く、必要なユーティリティはまだ存在しているのでしょうか?..その場合、私はあなたのコメントに喜んでいるでしょう!