Привет, я не пробовал это специально с PowerShell, но я попробовал его с пакетными файлами и Windows Shell Host. Альтернативой использованию RMI является использование предоставляемых окон возможностей DCOM. Таким образом вам не нужно будет развертывать дополнительную удаленную службу на машине Windows. Вместо этого вы можете использовать сервер DCOM, предоставляемый каждой машиной Windows. Windows-машина выдает что-то, называемое Windows Shell Host. Этот хост оболочки Windows можно использовать для выполнения сценариев удаленно. Поскольку почти все в Windows поставляется в виде COM-объектов, я ожидаю, что Powershell также станет зарегистрированным сервисом COM, который вам нужно просто узнать.
В этой ссылке вы найдете решение проблемы с помощью Windows Shell Host и J-Interop как реализация Java протокола DCOM: How to call a remote bat file using jinterop
/ Create a session
JISession session = JISession.createSession(<domain>, <user>, <password>);
session.useSessionSecurity(true);
// Execute command
JIComServer comStub = new JIComServer(JIProgId.valueOf("WScript.Shell"),<IP>, session);
IJIComObject unknown = comStub.createInstance();
final IJIDispatch shell = (IJIDispatch)JIObjectFactory.narrowObject((IJIComObject)unknown.queryInterface(IJIDispatch.I ID));
JIVariant results[] = shell.callMethodA("Exec", new Object[]{new JIString("%comspec% /c asadmin.bat")});
Если вам нужен выход из партии вы может использовать StdOut для его чтения.
JIVariant stdOutJIVariant = wbemObjectSet_dispatch.get("StdOut");
IJIDispatch stdOut = (IJIDispatch)JIObjectFactory.narrowObject(stdOutJIVariant.getObjectAsComObject());
// Read all from stdOut
while(!((JIVariant)stdOut.get("AtEndOfStream")).getObjectAsBoolean()){
System.out.println(stdOut.callMethodA("ReadAll").getObjectAsString().getString());
}
Проверить эту ссылку: https://social.technet.microsoft.com/Forums/office/en-US/d32537bd-0aef-440e- 8760-6b3085390c37/executing-powershell-script-via-java? Forum = winserverpowershell В самом конце этого есть рабочий пример, включающий обработку ошибок. – Martin
Спасибо, но этого недостаточно, мне нужно войти в систему и выполнить удаленный скрипт; Например, я запустил код на моем компьютере Ubuntu -> connect to Windows machine -> execute на этом компьютере -> получить результат выполнения. Хотя, спасибо – GVArt
Возможно, связано: https://serverfault.com/questions/638659/managing-windows-powershell-from-linux-terminal –