Я сделал это, и это боль.Единственный способ программно сделать что-либо в Exchange - это PowerShell, что означает, что вам нужно запускать команды PowerShell из C #.
В идеале вы можете открыть удаленный сеанс PowerShell на одном из ваших серверов Exchange.У Microsoft есть пример того, как сделать это здесь: Получить список пользователей почты с помощью командной консоли Exchange .
Создание удаленного сеанса PowerShell будет выглядеть примерно так, при этом используетсяKerberos для проверки подлинности и запуска команды PowerShell Get-Users -ResultSize 10
:
var connectionUri = "https://<server>/PowerShell";
var remoteMachineCredentials = new PSCredential(domainAndUserName, securePassword);
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(
new Uri(connectionUri),
"http://schemas.microsoft.com/powershell/Microsoft.Exchange",
remoteMachineCredentials) {
AuthenticationMechanism = AuthenticationMechanism.Kerberos,
SkipRevocationCheck = true
}
using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo)) {
using (PowerShell powershell = PowerShell.Create()) {
powershell.AddCommand("Get-Users");
powershell.AddParameter("ResultSize", 10);
runspace.Open();
powershell.Runspace = runspace;
var results = powershell.Invoke();
//do something with the results
}
}
Вы также можете использовать AuthenticationMechanism.NegotiateWithImplicitCredential
для проверки подлинности с учетными данными, под которыми работает ваше приложение, если это то, что вам нужно.
Я использую SkipRevocationCheck = true
, чтобы пропустить проверку отзыва SSL-сертификата сервера.В моей среде у сервера, на котором я работал, нет доступа в Интернет, поэтому проверка отзыва не выполняется.Это может или не может быть правдой для вас.
Вы можете сделать это без использования удаленного PowerShell, но это включает в себя установку инструментов управления Exchange на компьютер, на котором работает ваше приложение, и естьнекоторые другие осложнения.Постарайся избежать этого.Если возможно, используйте удаленный PowerShell.
После того, как вы поняли это, вы можете запустить любую команду PowerShell, например New-Mailbox
.
Вы, конечно,хотите прочитать результаты ответа PowerShell, поэтому есть еще одна статья о том, как использовать ответ командлета командной консоли Exchange .
. Имейте в виду, что ошибки PowerShell по умолчанию не завершаются (они не будут генерировать исключение), поэтому вы должны проверять наличие ошибок при каждом запуске команды.Для этого проверьте коллекцию powershell.Streams.Error
.