我试图从java在Exchange服务器上创建邮箱。我在服务器上创建一个批处理文件并尝试执行它,因此它运行并创建邮箱。正在创建批处理文件但尚未创建。我已经发现它正在尝试在本地计算机而不是服务器中查找该文件。有没有办法可以强制它在服务器上运行?我的代码如下
package com.exchange;
import java.io.*;
public class CreateMailbox { public static void main(String[] args) throws IOException, InterruptedException { try {
String COMMAND1="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe
-command \".'C:\\Program Files\\Microsoft\\Exchange Server\\V14\\bin\\RemoteExchange.ps1';Connect-ExchangeServer
-auto;Enable-Mailbox admin123@imbl.corp -Database \"TESTDB\"\"> C:\\Users\\admin\\Desktop\\ActiveSyncDeviceAccessRule_output.txt 2>C:\\Users\\admin\\Desktop\\standardError.txt";
System.out.println(COMMAND1);
String ErrorCommand1 = "echo %errorlevel% >C:\\exitCode.txt";
String SPACE = " ";
final File file = new File("\\\\192.168.205.245\\C$\\Users\\admin\\Desktop\\Create.bat");
Boolean CreatenewFileVar = file.createNewFile();
if(CreatenewFileVar)
{
System.out.println("File Created in: " + file);
}
PrintWriter writer = new PrintWriter(file, "UTF-8");
writer.println(COMMAND1);
writer.println(ErrorCommand1);
writer.println(SPACE);
writer.close();
Process p1 = Runtime.getRuntime().exec("cmd /c Start \\\\192.168.205.245\\c$\\Users\\admin\\Desktop\\Create.bat");
int exitVal = p1.waitFor();
System.out.println("Exited with error code "+exitVal);
} catch (final IOException e) {
System.out.println("Error " + e); } } }
非常感谢任何建议/帮助。我不是一名高级程序员,并且在互联网的帮助下完成了这项编码。
答案 0 :(得分:0)
我会使用另一种解决方案,即Remote Powershell(更多信息' here和性能提示here)。因此,您可以调整代码以执行以下操作:
$CASServer = 'fqdn'
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "http://$CASServer/powershell" -Authentication Kerberos
Import-PSSession $Session
$password = ConvertTo-SecureString -String "Pa55w0rd!"
New-Mailbox -UserPrincipalName chris@contoso.com -Alias chris -Database "Mailbox Database 1" -Name ChrisAshton -OrganizationalUnit Users -Password $password -FirstName Chris -LastName Ashton -DisplayName "Chris Ashton" -ResetPasswordOnNextLogon $true
这是从远程与MS Exchange交互的正确方法。没有人会尝试创建一个CMD,然后触发它并在之后将其抛弃,因为它会变得复杂(考虑到Exchange Server端的安全性)。顺便在Java中实现上述内容,请检查StackOverflow发布here和here。