Java - выполнять команды построчно в одной оболочке - PullRequest
0 голосов
/ 16 июня 2020

Я новичок в java с Talend Open Studio. Я хотел бы знать, можно ли запустить powershell.exe с помощью «Import-Module ActiveDirectory», а затем запускать команды динамики без перезагрузки powershell с помощью «Import-Module ...».

Я знаю это не сработает, но мою идею можно было бы перевести так:

Runtime.getRuntime().Exec("powershell.exe");
Runtime.getRuntime().Exec("Import-Module ActiveDirectory");
Runtime.getRuntime().Exec("Get-ADUser TestLogin1");
Runtime.getRuntime().Exec("Set-ADUser -Identity TestLogin1 -Company MyCompany1");
Runtime.getRuntime().Exec("Get-ADUser TestLogin2");
Runtime.getRuntime().Exec("Set-ADUser -Identity TestLogin2 -Company MyCompany2");

Чтобы это работало, мне нужно сделать ...

Runtime.getRuntime().Exec("powershell.exe /c Import-Module ActiveDirectory ; Get-ADUser TestLogin");
Runtime.getRuntime().Exec("powershell.exe /c Import-Module ActiveDirectory ; Set-ADUser -Identity TestLogin1 -Company MyCompany1");
Runtime.getRuntime().Exec("powershell.exe /c Import-Module ActiveDirectory ; Get-ADUser TestLogin_2");
Runtime.getRuntime().Exec("powershell.exe /c Import-Module ActiveDirectory ; Set-ADUser -Identity TestLogin2 -Company MyCompany2");

Не хочу go через файл сценария, потому что первая команда обновления (Set-ADUser) может повлиять на следующую команду обновления.

Спасибо.

1 Ответ

0 голосов
/ 19 июня 2020

Я нашел решение с библиотекой jPowerShell от profesorfalken

https://github.com/profesorfalken/jPowerShell

//Creates PowerShell session (we can execute several commands in the same session)
   try (PowerShell powerShell = PowerShell.openSession()) {
       //Execute a command in PowerShell session
       PowerShellResponse response = powerShell.executeCommand("Import-Module ActiveDirectory");

       //Get an ADUser
       PowerShellResponse response = powerShell.executeCommand("Get-ADUser TestLogin1");
       //Print results ADUser
       System.out.println("PS : " + response.getCommandOutput());
       //Set an ADUser
       PowerShellResponse response = powerShell.executeCommand("Set-ADUser -Identity TestLogin1 -Company MyCompany1");

       //Get an ADUser
       PowerShellResponse response = powerShell.executeCommand("Get-ADUser TestLogin2");
       //Print results ADUser
       System.out.println("PS : " + response.getCommandOutput());
       //Set an ADUser
       PowerShellResponse response = powerShell.executeCommand("Set-ADUser -Identity TestLogin2 -Company MyCompany2");

   } catch(PowerShellNotAvailableException ex) {
       //Handle error when PowerShell is not available in the system
       //Maybe try in another way?
   }
...