使用Java

时间:2017-12-13 12:38:24

标签: java powershell azure port windows-firewall

我想在远程Windows机器上使用Java运行PowerShell命令,这实际上是打开入站防火墙端口。 script.ps1 包含以下命令

  

PowerShell cmd: - netsh advfirewall防火墙添加规则名称=“打开端口   (8077)“dir = in action = allow protocol = TCP localport =(8077)

enter image description here

以下代码在本地运行正常。但是我想在本地机器的远程机器上做同样的事情,我不能手动做任何事情(甚至不在那里创建一个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");

    }
}

我也试过这个链接: - Running Powershell script remotely through Java

1 个答案:

答案 0 :(得分:1)

您的链接示例需要在远程VM上启用Winrm Sevice。默认情况下,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();