Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk memulakan proses powershell dengan hak pentadbir dan ubah hala stdin (os.exec)

Bagaimana untuk memulakan proses powershell dengan hak pentadbir dan ubah hala stdin (os.exec)

王林
王林ke hadapan
2024-02-10 19:03:19423semak imbas

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

Editor PHP Zimo hari ini akan berkongsi dengan anda kaedah untuk memulakan proses powershell dengan keistimewaan pentadbir dan mengubah hala stdin. Dalam sesetengah kes, kita perlu menjalankan skrip powershell dengan keistimewaan pentadbir, tetapi menjalankannya secara langsung mungkin menghadapi masalah kebenaran. Pada masa ini, kita boleh menggunakan fungsi os.exec untuk mencapai ini. Fungsi os.exec memulakan proses dan mengubah hala input ke dalam skrip. Dengan cara ini kita boleh melaksanakan arahan dengan hak pentadbir dalam skrip dan boleh menerima input. Dalam artikel ini, kami akan memperkenalkan secara terperinci cara menggunakan kaedah ini untuk menyelesaikan masalah kebenaran, kami berharap ia akan membantu semua orang.

Kandungan soalan

Saya ingin memulakan proses powershell dengan hak pentadbir dan mengalihkan stdin kepada penulis, semuanya berfungsi kecuali cara menjalankannya sebagai pentadbir.

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

Memandangkan nampaknya tiada apa-apa seperti process.verb yang boleh ditetapkan kepada "runas", saya cuba mencipta powershell menggunakan perintah powershell start-process ... -verb runas Proses dan mendapatkan pid proses berjaya, tetapi nampaknya saya tidak boleh menggunakan pid kemudian untuk mengendalikan stdin dan stdout. process.verb 这样的东西可以设置为“runas”,所以我尝试使用 powershell 命令 start-process ... -verb runas 创建一个 powershell 进程并获取了该进程的 pid成功了,但似乎无法稍后使用 pid 来操作 stdin 和 stdout。

解决方法

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

Penyelesaian🎜🎜Terima kasih kepada @jeroen-mostert, saya agak memahaminya. Saya memulakan go executable sebagai pentadbir dan menggunakan StartProcess powershell.exe -verb RunAs dan ia tidak berfungsi seperti yang saya mahu pada mulanya, tetapi sekurang-kurangnya ia tidak berfungsi untuk powershell lagi Hidupkan UAC. 🎜

Atas ialah kandungan terperinci Bagaimana untuk memulakan proses powershell dengan hak pentadbir dan ubah hala stdin (os.exec). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam