php小編子墨今天給大家分享一種使用管理員權(quán)限啟動(dòng)powershell進(jìn)程并重定向stdin的方法。在某些情況下,我們需要以管理員權(quán)限運(yùn)行powershell腳本,但是直接運(yùn)行可能會(huì)遇到權(quán)限問(wèn)題。這時(shí),我們可以使用os.exec函數(shù)來(lái)實(shí)現(xiàn)。os.exec函數(shù)可以啟動(dòng)一個(gè)進(jìn)程,并將輸入重定向到腳本中。通過(guò)這種方式,我們可以在腳本中以管理員權(quán)限執(zhí)行命令,并且可以接收輸入。在本文中,我們將詳細(xì)介紹如何使用這種方法來(lái)解決權(quán)限問(wèn)題,希望能對(duì)大家有所幫助。
問(wèn)題內(nèi)容
我想以管理員權(quán)限啟動(dòng)一個(gè) powershell 進(jìn)程并將標(biāo)準(zhǔn)輸入重定向到編寫(xiě)器,除了如何以管理員身份運(yùn)行它之外,我已經(jīng)完成了所有工作。
// 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()
登錄后復(fù)制
因?yàn)樗坪鯖](méi)有像 process.verb 這樣的東西可以設(shè)置為“runas”,所以我嘗試使用 powershell 命令 start-process ... -verb runas 創(chuàng)建一個(gè) powershell 進(jìn)程并獲取了該進(jìn)程的 pid成功了,但似乎無(wú)法稍后使用 pid 來(lái)操作 stdin 和 stdout。
解決方法
感謝@jeroen-mostert,我有點(diǎn)明白了。我以管理員身份啟動(dòng)了 go 可執(zhí)行文件,并使用了 StartProcess powershell.exe -verb RunAs,它并沒(méi)有像我一開(kāi)始想要的那樣工作,但至少它不再為 powershell 打開(kāi) UAC。






