Как запускать команды Powershell через Java на сервере - PullRequest
0 голосов
/ 07 мая 2019

Я хочу запускать скрипты PowerShell через сервлет Java. В тестировании localhost (Windows 10 Pro 64bit) все работает нормально. Теперь я развернул свой код на удаленном сервере (Tomcat 8.5 на Windows Server 2012 R2 64bit) и попытался запустить его, но из сценариев powershell ничего не выводится. Кажется, они совсем не бегают или не общаются. (cmd_line не печатается вообще, а check_ps_execution остается false.)

Я уже пытался изменить '"powershell " + ps_..._status.ps1 " + username' на '"cmd /C powershell " + ps_..._status.ps1 " + username', чтобы запустить его через CLI вместо PowerShell, но это имело тот же эффект.

Нет сообщения об ошибке, но нет и вывода.

Я запускаю ps-Script непосредственно на сервере через cmd и powershell, и в обоих случаях он работал нормально. Они расположены по тому же пути, что и на localhost.

public static boolean checkForwardingStatus(String username) throws IOException {
    boolean forwarding = false;
    boolean check_ps_execution = false;

    Runtime runtime = Runtime.getRuntime();
    Process proc = runtime.exec("cmd /C powershell " + ps_script_path + "check_forwarding_status.ps1 " + username);
    InputStream is = proc.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader reader = new BufferedReader(isr);
    String cmd_line;
    while ((cmd_line = reader.readLine()) != null) {
        check_ps_execution = true;
        logger.info(cmd_line);
        if (cmd_line.contains("ForwardingAddress")) {
            if (cmd_line.contains("[something it should contain]")) {
                forwarding = true;
            }
        }
    }
    reader.close();
    proc.getOutputStream().close();
    if (!check_ps_execution) {
        logger.error("PS Script checkForwardingStatus did not run!");
    }
    logger.info("Forwarding: " + forwarding);
    return forwarding;
}

Скрипт PowerShell:

$user_name=$args[0]
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://[server]/PowerShell/ -Authentication Kerberos
Import-PSSession $Session
Get-Mailbox -Identity "$user_name" | fl *Forwarding*, *DeliverToMailboxAndForward*, *WindowsEmailAddress*

Что я могу попробовать запустить скрипт?

UPDATE: Когда я захожу на сервер, запускаю PowerShell и выполняю пример сценария с моим собственным именем пользователя, он работает нормально. Но если я попробую другое имя пользователя, я получу следующий код ошибки:

FullyQualifiedErrorId : ErrorNoCommandsImportedBecauseOfSkipping,Microsoft.PowerShell.Commands.ImportPSSessionCommand

Так что, я думаю, это проблема авторизации.

1 Ответ

1 голос
/ 07 мая 2019

Файл не был запущен, поскольку сервер не смог найти файл.Как только файл развернут на сервере, вам может потребоваться загрузить файл с сервера на компьютер, на котором развернута война.

Попробуйте реализовать поток ошибок для exec RunTime, чтобы точно увидеть ошибку.Вы можете следовать https://stackoverflow.com/a/5748494/4597596 за то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...