Не удается отключить или включить почтовый ящик Exchange, выполняющий команду Powershell в C # - PullRequest
2 голосов
/ 14 марта 2011

У меня есть пара очень простых команд powershell.

disable-mailbox dadelgad -confirm:$false
enable-mailbox -identity 'dadelgad' -database 'NET5014DB10' -Alias 'dadelgad'

Первая команда - отключить почтовый ящик для обмена, а вторая - почтовый ящик.Я вошел в систему как пользователь, который входит в группу «Управление организацией» и имеет полные права администратора для Exchange, но не является администратором домена.Если я запускаю эти команды непосредственно в Powershell, они работают нормально, но они не работают при вызове из C #.

Я создал очень простое приложение для оконных форм, имеющее пару кнопок, которые вызывают эти команды из кода C #.При запуске приложения от имени пользователя с полным правом Exchange большинство команд работают без проблем, таких как get-mailbox -identity 'dadelgad'.Я могу установить флаги в Exchange, добавить псевдонимы электронной почты и выполнять большинство функций, но не могу отключить или включить учетную запись.

Нужно ли мне быть администратором домена, чтобы выполнять эти функции.Это почти похоже на проблему с разрешениями, но пользователь имеет полные права на Exchange и может выполнять обе эти команды непосредственно в Powershell.

Любая помощь будет признательна?

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Я использовал приведенный ниже код для создания почтового ящика, и я изменил его для включения почтового ящика, и он также должен работать для отключения. Обязательно найдите лучший способ защитить пароль от учетной записи, чем просто жестко его кодировать.

SecureString password = new SecureString();
string username = "youruseraccount";
string str_password = "thepassword";
string exchangeserver = "yourexchangeserver";
string liveIdconnectionUri = "http://" + exchangeserver +"/Powershell?serializationLevel=Full";
foreach (char x in str_password) {
    password.AppendChar(x);
}

PSCredential credential = new PSCredential(username, password);
WSManConnectionInfo connectionInfo = new WSManConnectionInfo((new Uri(liveIdconnectionUri)), "http://schemas.microsoft.com/powershell/Microsoft.Exchange",credential);
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default;

Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo);
PowerShell powershell = PowerShell.Create();
runspace.Open();
powershell.Runspace = runspace;

PSCommand command1 = new PSCommand();
command1.AddCommand("Enable-Mailbox");
command1.AddParameter("Identity", "dadelgad");
command1.AddParameter("Database", "NET5014DB10");
//Add as many parameters as you need

powershell.Commands = command1;
powershell.Invoke();

Чтобы выполнить дополнительные команды, создайте новую PSCommand, добавьте в нее экземпляр powershell таким же образом, но после предыдущего вызова и снова вызовите powershell.

Грег

1 голос
/ 22 марта 2011

Я наконец понял, что вызвало эту проблему, поэтому я передаю вам информацию на случай, если вы столкнетесь с той же проблемой.Я нашел решение на serverfault.com на этот URL .Происходило то, что пользователь, под которым я вошел и программа запускалась, был заблокирован UAC (контроль доступа пользователей).Выключение решило проблему.Ну, не совсем решено, так как я не должен был так широко раскрываться, но сказал мне, в чем проблема.Теперь мне нужно вернуться и посмотреть, могу ли я настроить разрешения, чтобы позволить программе работать, но также и обеспечить защиту.

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