首页  >  文章  >  后端开发  >  如何使用管理员权限启动 powershell 进程并重定向 stdin (os.exec)

如何使用管理员权限启动 powershell 进程并重定向 stdin (os.exec)

王林
王林转载
2024-02-10 19:03:19426浏览

如何使用管理员权限启动 powershell 进程并重定向 stdin (os.exec)

php小编子墨今天给大家分享一种使用管理员权限启动powershell进程并重定向stdin的方法。在某些情况下,我们需要以管理员权限运行powershell脚本,但是直接运行可能会遇到权限问题。这时,我们可以使用os.exec函数来实现。os.exec函数可以启动一个进程,并将输入重定向到脚本中。通过这种方式,我们可以在脚本中以管理员权限执行命令,并且可以接收输入。在本文中,我们将详细介绍如何使用这种方法来解决权限问题,希望能对大家有所帮助。

问题内容

我想以管理员权限启动一个 powershell 进程并将标准输入重定向到编写器,除了如何以管理员身份运行它之外,我已经完成了所有工作。

// 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()

因为似乎没有像 process.verb 这样的东西可以设置为“runas”,所以我尝试使用 powershell 命令 start-process ... -verb runas 创建一个 powershell 进程并获取了该进程的 pid成功了,但似乎无法稍后使用 pid 来操作 stdin 和 stdout。process.verb 这样的东西可以设置为“runas”,所以我尝试使用 powershell 命令 start-process ... -verb runas 创建一个 powershell 进程并获取了该进程的 pid成功了,但似乎无法稍后使用 pid 来操作 stdin 和 stdout。

解决方法

感谢@jeroen-mostert,我有点明白了。我以管理员身份启动了 go 可执行文件,并使用了 StartProcess powershell.exe -verb RunAs

解决方法🎜🎜感谢@jeroen-mostert,我有点明白了。我以管理员身份启动了 go 可执行文件,并使用了 StartProcess powershell.exe -verb RunAs,它并没有像我一开始想要的那样工作,但至少它不再为 powershell 打开 UAC。🎜

以上是如何使用管理员权限启动 powershell 进程并重定向 stdin (os.exec)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除