Maison  >  Article  >  développement back-end  >  Comment démarrer un processus PowerShell avec des privilèges d'administrateur et rediriger stdin (os.exec)

Comment démarrer un processus PowerShell avec des privilèges d'administrateur et rediriger stdin (os.exec)

王林
王林avant
2024-02-10 19:03:19423parcourir

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

L'éditeur PHP Zimo partagera aujourd'hui avec vous une méthode pour démarrer le processus PowerShell avec les privilèges d'administrateur et rediriger stdin. Dans certains cas, nous devons exécuter le script PowerShell avec des droits d'administrateur, mais son exécution directe peut rencontrer des problèmes d'autorisation. À ce stade, nous pouvons utiliser la fonction os.exec pour y parvenir. La fonction os.exec démarre un processus et redirige les entrées vers un script. De cette façon, nous pouvons exécuter des commandes avec des droits d'administrateur dans le script et recevoir des entrées. Dans cet article, nous présenterons en détail comment utiliser cette méthode pour résoudre les problèmes d'autorisation, nous espérons qu'elle sera utile à tout le monde.

Contenu de la question

Je souhaite démarrer un processus PowerShell avec des droits d'administrateur et rediriger stdin vers l'écrivain, j'ai tout qui fonctionne sauf comment l'exécuter en tant qu'administrateur.

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

Comme il ne semble pas y avoir quelque chose comme process.verb qui puisse être défini sur "runas", j'ai essayé de créer un PowerShell à l'aide de la commande PowerShell start-process ... -verb runas Le processus et l'obtention du pid du processus ont réussi, mais il semble que je ne pourrai pas utiliser le pid plus tard pour faire fonctionner stdin et stdout. process.verb 这样的东西可以设置为“runas”,所以我尝试使用 powershell 命令 start-process ... -verb runas 创建一个 powershell 进程并获取了该进程的 pid成功了,但似乎无法稍后使用 pid 来操作 stdin 和 stdout。

解决方法

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

Solution🎜🎜Grâce à @jeroen-mostert, j'ai en quelque sorte compris. J'ai démarré l'exécutable go en tant qu'administrateur et utilisé StartProcess powershell.exe -verb RunAs et cela n'a pas fonctionné comme je le voulais en premier lieu, mais au moins cela ne fonctionne plus pour PowerShell. UAC. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer