首頁 >後端開發 >Golang >如何使用管理員權限啟動 powershell 進程並重新導向 stdin (os.exec)

如何使用管理員權限啟動 powershell 進程並重新導向 stdin (os.exec)

王林
王林轉載
2024-02-10 19:03:19472瀏覽

如何使用管理员权限启动 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。

解決方法

感謝@jeroen-mostert,我有點明白了。我以管理員身份啟動了go 執行文件,並使用了StartProcess powershell.exe -verb RunAs,它並沒有像我一開始想要的那樣工作,但至少它不再為powershell 打開UAC。

以上是如何使用管理員權限啟動 powershell 進程並重新導向 stdin (os.exec)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除