2017-12-13 25 views
0

実際に受信ファイアウォールポートを開くリモートWindowsマシンでJavaを使用してPowerShellコマンドを実行します。 script.ps1は、以下のコマンドをJavaを使用してリモートでPowerShellコマンドを実行

PowerShellのcmdを含んでいます - ルール名= "オープンポート (8077)" DIR =アクションで=許可するプロトコル= TCPのlocalportで=(8077)を追加ファイアウォールのnetshをadvfirewall

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

+0

なぜ複雑なレイヤーを追加するのですか? PowerShellは、 'invoke-command'(および他のメソッド)を使ってリモート実行をネイティブに処理します。これをJavaでラップするだけで問題はないかと尋ねています。どのようにあなたはリモートマシンの管理者権限を持っていますが、 "そこには何もできません"というのはどうですか? – alroc

+1

リンクの例では、リモートサービスでwinrmサービスを有効にする必要があります。デフォルトでは、Azure Windows VMはwinrmサービスを有効にしません。 –

+0

@alrocはい、私はJavaコードだけでそれをやらなければならないので、手動では何もできません。そのためにいくつかのビジネス要件があります。 また、以下のinvokeコマンドも試しましたが、5986ポートはデフォルトで開かれていません。 - ** invoke-command -ComputerName "192.168.0.0" -filepath "C:\ Users \ Administrator \ Desktop \ agent_port \ script。 ps1 "-credential" password "** – Ankit4mjis

答えて

1

あなたのリンクの例のニーズをリモート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(); 
+0

ありがとうございました!今私の仕事は終わった。 – Ankit4mjis

関連する問題