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。