実際に受信ファイアウォールポートを開くリモートWindowsマシンでJavaを使用してPowerShellコマンドを実行します。 script.ps1は、以下のコマンドをJavaを使用してリモートでPowerShellコマンドを実行
PowerShellのcmdを含んでいます - ルール名= "オープンポート (8077)" DIR =アクションで=許可するプロトコル= TCPのlocalportで=(8077)を追加ファイアウォールのnetshをadvfirewall
次のコードは、ローカルで正常に動作します。しかし、私はローカルマシンからのみリモートマシン上で同じことをしたいので、私は手動で何もすることはできません(そこに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
なぜ複雑なレイヤーを追加するのですか? PowerShellは、 'invoke-command'(および他のメソッド)を使ってリモート実行をネイティブに処理します。これをJavaでラップするだけで問題はないかと尋ねています。どのようにあなたはリモートマシンの管理者権限を持っていますが、 "そこには何もできません"というのはどうですか? – alroc
リンクの例では、リモートサービスでwinrmサービスを有効にする必要があります。デフォルトでは、Azure Windows VMはwinrmサービスを有効にしません。 –
@alrocはい、私はJavaコードだけでそれをやらなければならないので、手動では何もできません。そのためにいくつかのビジネス要件があります。 また、以下のinvokeコマンドも試しましたが、5986ポートはデフォルトで開かれていません。 - ** invoke-command -ComputerName "192.168.0.0" -filepath "C:\ Users \ Administrator \ Desktop \ agent_port \ script。 ps1 "-credential" password "** – Ankit4mjis