gpt4 book ai didi

java - 我想以管理员身份运行 PowerShell 并通过 Java 在管理员电源 shell 中执行命令

转载 作者:行者123 更新时间:2023-12-02 01:24:44 24 4
gpt4 key购买 nike

我正在开发一个 Java 程序,它允许我在我的 PC 上创建一个新的本地用户。唯一的问题是我必须以管理员身份执行 PowerShell 命令。

当我运行该文件时,我输入了名称和密码。然后我单击一个按钮以管理员身份启动 PowerShell。

问题

创建新用户的命令未在我以管理员身份启动的 PowerShell 中执行。

String command = "powershell.exe Start-Process powershell -Verb runAs ; New-LocalUser -Name " + str_name + " -Password (ConvertTo-SecureString " + str_pass + " -AsPlainText -Force)";
Process powerShellProcess = Runtime.getRuntime().exec(command);
powerShellProcess.getOutputStream().close();
String line;
System.out.println("Output:");
BufferedReader stdout = new BufferedReader(new InputStreamReader(
powerShellProcess.getInputStream()));
while ((line = stdout.readLine()) != null) {
System.out.println(line);
}
stdout.close();
System.out.println("Error:");
BufferedReader stderr = new BufferedReader(new InputStreamReader(
powerShellProcess.getErrorStream()));
while ((line = stderr.readLine()) != null) {
System.out.println(line);
}
stderr.close();
System.out.println("Done");

发生了什么

PowerShell 以管理员身份打开,但实际命令是在普通 PowerShell 中执行的,会打印此错误:访问被拒绝

那是因为我只能创建一个新的本地用户作为管理员。

为什么我的命令没有在以管理员身份运行的 PowerShell 中执行?

最佳答案

让我们解析该命令,看看会发生什么。

"powershell.exe Start-Process powershell -Verb runAs ; New-LocalUser -Name " 
+ str_name
+ " -Password (ConvertTo-SecureString " + str_pass + " -AsPlainText -Force)";

注意-Verb RunAs后面的分号。它是一个语句分隔符,因此Start-Process将是一个语句,New-LocalUser > 将是另一个。作为伪代码:

Start powershell.exe. Process 1

Start a new Powershell process as admin. Process 2

Run New-LocalUser. Process 1

注意到什么有趣的事情了吗? New-LocalUser 正在原始、非提升的 Powershell session (进程 1)中运行。由于它不是以管理员身份运行的,因此您将收到访问被拒绝的错误。

要运行用户创建,其命令需要传递到提升的 Powershell 进程,而不是父进程。使用 -ArgumentList 将命令传递给提升的命令,如下所示,

powershell.exe Start-Process powershell -Verb runAs -ArgumentList `
'New-LocalUser -Name "TestUser" -Password `
(ConvertTo-SecureString "H4rdT0Gue$$" -AsPlainText -Force)"'

请注意 -ArgumentListNewUser 参数的不同引号。调用嵌套 Powershell session 时,请注意以正确的方式构建参数字符串。

关于java - 我想以管理员身份运行 PowerShell 并通过 Java 在管理员电源 shell 中执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57106543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com