关于windows:如何以管理员身份在rake任务中运行shell命令?

How do I run a shell command inside a rake task as administrator?

我有一个简短的.cmd文件,我希望它作为部署过程的一部分运行。很遗憾,.cmd文件需要管理员权限。是否可以从rake中获得管理员权限,或者是否需要以admin身份启动shell?


您可以尝试使用runas命令。我不知道你的rake任务是什么样子,但是如果你在运行Kernel#system,试试看。

1
2
3
task :foo do
  system"runas /profile /user:#{ENV["COMPUTERNAME"]}/Administrator mybatchfile.cmd"
end

唯一的问题是,runas提示在shell中输入凭证。所以,你必须是互动的。

irb > system"runas ..."
Enter the password for FOOBAR/Administrator:

在另一个问题上有一个看起来很难看的批/wsh答案。我不知道你把命令放在哪里,这看起来也是交互式的。

您可以尝试使用支持显示UAC提示的PowerShell Start-ProcessCmdlet。

1
PS> Start-Process mybatchfile.cmd -Verb runas

或者,在耙子里

1
2
3
task :foo do
  system"powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -command "Start-Process mybatchfile.cmd -Verb runas""
end

但这也将启动一个UAC对话。整个过程需要是互动的。不能有交互式生成脚本。您唯一的选择是允许构建服务器在关闭UAC的情况下运行…然后,您不必做任何事情,因为默认情况下,您的所有提示都将是admin。