Heim > Backend-Entwicklung > Golang > So starten Sie einen Powershell-Prozess mit Administratorrechten und leiten stdin (os.exec) um

So starten Sie einen Powershell-Prozess mit Administratorrechten und leiten stdin (os.exec) um

王林
Freigeben: 2024-02-10 19:03:19
nach vorne
466 Leute haben es durchsucht

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

Der PHP-Editor Zimo wird Ihnen heute eine Methode vorstellen, mit der Sie den Powershell-Prozess mit Administratorrechten starten und stdin umleiten können. In einigen Fällen müssen wir das Powershell-Skript mit Administratorrechten ausführen, aber bei der direkten Ausführung kann es zu Berechtigungsproblemen kommen. Zu diesem Zeitpunkt können wir die Funktion os.exec verwenden, um dies zu erreichen. Die Funktion os.exec startet einen Prozess und leitet Eingaben in ein Skript um. Auf diese Weise können wir mit Administratorrechten im Skript Befehle ausführen und Eingaben entgegennehmen. In diesem Artikel stellen wir detailliert vor, wie Sie diese Methode zur Lösung von Berechtigungsproblemen verwenden können. Wir hoffen, dass sie für alle hilfreich ist.

Frageninhalt

Ich möchte einen Powershell-Prozess mit Administratorrechten starten und stdin zum Writer umleiten. Bei mir funktioniert alles, außer wie man es als Administrator ausführt.

// 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()
Nach dem Login kopieren

Da es scheinbar nichts wie process.verb gibt, das auf „runas“ gesetzt werden kann, habe ich versucht, eine Powershell mit dem Powershell-Befehl start-process ... -verb zu erstellen runas Der Prozess und das Abrufen der PID des Prozesses waren erfolgreich, aber es scheint, dass ich die PID später nicht verwenden kann, um stdin und stdout zu bedienen. process.verb 这样的东西可以设置为“runas”,所以我尝试使用 powershell 命令 start-process ... -verb runas 创建一个 powershell 进程并获取了该进程的 pid成功了,但似乎无法稍后使用 pid 来操作 stdin 和 stdout。

解决方法

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

Lösung🎜🎜Dank @jeroen-mostert habe ich es irgendwie herausgefunden. Ich habe die ausführbare Go-Datei als Administrator gestartet und StartProcess powershell.exe -verb RunAs verwendet und es hat nicht so funktioniert, wie ich es ursprünglich wollte, aber zumindest funktioniert es nicht mehr für Powershell. Einschalten UAC. 🎜

Das obige ist der detaillierte Inhalt vonSo starten Sie einen Powershell-Prozess mit Administratorrechten und leiten stdin (os.exec) um. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage