英文:
How do I start a powershell process with administrator privilges and redirect stdin (os.exec)
问题
我想要以管理员权限启动一个 PowerShell 进程,并将标准输入重定向到一个写入器,除了如何以管理员身份运行它之外,其他都已经搞定。
// 启动 PowerShell
powershell := exec.Command("powershell")
// 添加一个将打开 UAC 并给予进程管理员权限的内容
powershell.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
powershell.Env = os.Environ()
// 创建管道以供稍后写入
stdin, err := powershell.StdinPipe()
if err != nil {
log.Fatal(err)
}
defer stdin.Close()
似乎没有 Process.Verb
这样的东西可以设置为 "runas",我尝试使用 PowerShell 命令 Start-Process ... -Verb runas
创建一个 PowerShell 进程,并成功获取了进程的 PID,但似乎没有办法稍后使用 PID 操纵标准输入和标准输出。
英文:
I want to start a powershell process with administrator priviliges and redirect stdin to a writer, I have everything working except how to run it as admin.
// Start powershell
powershell := exec.Command("powershell")
// Add something that will open UAC and give the process admin priviliges
powershell.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
powershell.Env = os.Environ()
// Create pipe to write to it later
stdin, err := powershell.StdinPipe()
if err != nil {
log.Fatal(err)
}
defer stdin.Close()
As it seems there is no such thing as Process.Verb
that I can set to "runas", I tried creating a powershell process by using powershell commands Start-Process ... -Verb runas
and got the pid of the process successfully, but it seems like there's no way to manipulate stdin and stdout later with a pid.
答案1
得分: 1
感谢@jeroen-mostert的帮助,我有点弄明白了。我以管理员身份启动了我的go可执行文件,并使用了StartProcess powershell.exe -verb RunAs
,虽然一开始它并不像我想的那样工作,但至少不再为powershell打开UAC了。
英文:
Thanks to @jeroen-mostert I kinda figured it out. I started my go executeable as admin and used StartProcess powershell.exe -verb RunAs
, it isn't working like I wanted in the beginning, but at least it doesnt open UAC for powershell anymore.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论