gpt4 book ai didi

java - 如何在服务器上通过 Java 运行 Powershell 命令

转载 作者:行者123 更新时间:2023-12-02 09:55:47 25 4
gpt4 key购买 nike

我想通过 java Servlet 运行 PowerShell 脚本。在本地主机(Windows 10 Pro 64位)测试中,一切正常。现在,我将代码部署在远程服务器(Windows Server 2012 R2 64 位上的 Tomcat 8.5)上并尝试运行它,但 powershell 脚本没有输出。他们似乎根本不跑,或者不回复。 (根本没有打印 cmd_line,并且 check_ps_execution 保持 false。)

我已经尝试将 '"powershell "+ ps_..._status.ps1 "+ username' 更改为 '"cmd/C powershell "+ ps_..._status .ps1 "+ username' 通过 CLI 而不是 PowerShell 运行它,但它具有相同的效果。

没有错误消息,但也没有输出。

我通过 cmd 和 powershell 直接在服务器上运行 ps 脚本,在这两种情况下都运行良好。它们位于与本地主机相同的路径中。

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*

我可以尝试什么来运行该脚本?

更新:当我登录到服务器时,运行 PowerShell 并使用我自己的用户名执行示例脚本,它工作正常。但如果我尝试不同的用户名,我会收到以下错误代码:

FullyQualifiedErrorId : ErrorNoCommandsImportedBecauseOfSkipping,Microsoft.PowerShell.Commands.ImportPSSessionCommand

所以我猜这是一个授权问题。

最佳答案

文件未运行,因为服务器无法找到该文件。将文件部署到服务器上后,您可能需要将文件从服务器下载到部署 war 的计算机上。

尝试为 RunTime exec 实现错误流以准确查看错误。您可以关注https://stackoverflow.com/a/5748494/4597596对于相同的。

关于java - 如何在服务器上通过 Java 运行 Powershell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56021597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com