运行 PowerShell 命令远程使用 Java
run PowerShell command remotely using Java
我想运行在远程windows机器上使用Java一个PowerShell命令,实际上是打开入站防火墙端口。 script.ps1 包含以下命令
PowerShell cmd:- netsh advfirewall firewall add rule name="Open Port
(8077)" dir=in action=allow protocol=TCP localport=(8077)
以下代码在本地运行良好。但是我只想从我的本地机器在远程机器上做同样的事情,我不能手动做任何事情(甚至不能在那里创建一个 ps1 文件)。我在远程计算机上拥有管理员权限。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestMain2 {
public static void main(String[] args) throws IOException {
String command = "powershell.exe \"C:\Users\Administrator\Desktop\agent_port\script.ps1\"";
// Executing the command
Process powerShellProcess = Runtime.getRuntime().exec(command);
// Getting the results
powerShellProcess.getOutputStream().close();
String line;
System.out.println("Standard Output:");
BufferedReader stdout = new BufferedReader(new InputStreamReader(powerShellProcess.getInputStream()));
while ((line = stdout.readLine()) != null) {
System.out.println(line);
}
stdout.close();
System.out.println("Standard Error:");
BufferedReader stderr = new BufferedReader(new InputStreamReader(powerShellProcess.getErrorStream()));
while ((line = stderr.readLine()) != null) {
System.out.println(line);
}
stderr.close();
System.out.println("Done");
}
}
我也试过这个 link :-
您的 link 示例需要在远程 VM 上启用 Winrm 服务。默认情况下,Azure Windows VM 不允许 winrm 服务。所以,你不能使用这个例子。
对于 Azure VM,您可以使用 Azure Custom Script Extension 来执行此操作。
你可以使用这个 example。添加以下代码。
//Add Azure Custom Script Extension
windowsVM.update()
.defineNewExtension("shuitest")
.withPublisher("Microsoft.Compute")
.withType("CustomScriptExtension")
.withVersion("1.9")
.withMinorVersionAutoUpgrade()
.withPublicSetting("commandToExecute", "netsh advfirewall firewall add rule name=\"Open Port 8077\" dir=in action=allow protocol=TCP localport=8077")
.attach()
.apply();
我想运行在远程windows机器上使用Java一个PowerShell命令,实际上是打开入站防火墙端口。 script.ps1 包含以下命令
PowerShell cmd:- netsh advfirewall firewall add rule name="Open Port (8077)" dir=in action=allow protocol=TCP localport=(8077)
以下代码在本地运行良好。但是我只想从我的本地机器在远程机器上做同样的事情,我不能手动做任何事情(甚至不能在那里创建一个 ps1 文件)。我在远程计算机上拥有管理员权限。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestMain2 {
public static void main(String[] args) throws IOException {
String command = "powershell.exe \"C:\Users\Administrator\Desktop\agent_port\script.ps1\"";
// Executing the command
Process powerShellProcess = Runtime.getRuntime().exec(command);
// Getting the results
powerShellProcess.getOutputStream().close();
String line;
System.out.println("Standard Output:");
BufferedReader stdout = new BufferedReader(new InputStreamReader(powerShellProcess.getInputStream()));
while ((line = stdout.readLine()) != null) {
System.out.println(line);
}
stdout.close();
System.out.println("Standard Error:");
BufferedReader stderr = new BufferedReader(new InputStreamReader(powerShellProcess.getErrorStream()));
while ((line = stderr.readLine()) != null) {
System.out.println(line);
}
stderr.close();
System.out.println("Done");
}
}
我也试过这个 link :-
您的 link 示例需要在远程 VM 上启用 Winrm 服务。默认情况下,Azure Windows VM 不允许 winrm 服务。所以,你不能使用这个例子。
对于 Azure VM,您可以使用 Azure Custom Script Extension 来执行此操作。
你可以使用这个 example。添加以下代码。
//Add Azure Custom Script Extension
windowsVM.update()
.defineNewExtension("shuitest")
.withPublisher("Microsoft.Compute")
.withType("CustomScriptExtension")
.withVersion("1.9")
.withMinorVersionAutoUpgrade()
.withPublicSetting("commandToExecute", "netsh advfirewall firewall add rule name=\"Open Port 8077\" dir=in action=allow protocol=TCP localport=8077")
.attach()
.apply();