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

问题描述:

我有一个简短的.cmd文件,我想作为我的部署过程的一部分运行。不幸的是.cmd文件需要管理员权限。是否可以从rake内部获得管理员权限,还是需要以管理员身份启动shell?如何以管理员身份在rake任务中运行shell命令?

+0

请参阅'http://*.com/questions/9796028/execute-bash-commands-from-a-rakefile/14360488#14360488'关于如何在耙机中运行任何外部命令。 – Gizmomogwai 2016-12-28 14:08:22

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

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

唯一的麻烦是,runas提示凭据正确的,在外壳。所以,你必须互动。

IRB>系统 “运行方式...”
为FOOBAR /输入管理员密码:

this nasty looking batch/WSH answer从另一个问题上的SO。我不知道你把你​​的命令放在哪里,这看起来也是互动的。

您可以尝试支持显示UAC提示的PowerShell Start-Process cmdlet。

PS> Start-Process mybatchfile.cmd -Verb runas 

或者,在耙

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

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