Я пытаюсь выполнить простой запрос в нашей AD из программы на C#, но всегда получаю ошибку «Не удается связаться с сервером», которую я не понимаю. Я думаю, это может быть связано с некоторыми правами, которые я пропускаю, но не могу выяснить или найти нужные мне права.
Это команда powershell
Remove-ADGroupMember -Identity "GrpLanguageFrench" -Members "MazMa" -Confirm:$false
Это C# код
InitialSessionState iss = InitialSessionState.CreateDefault();
string[] modules = { "activedirectory" };
iss.ImportPSModule(modules);
//Create PowerShell runspace
Runspace runspace = RunspaceFactory.CreateRunspace(iss);
runspace.Open();
Pipeline pipeline1 = runspace.CreatePipeline();
Command myCommandR1 = new Command("Remove-ADGroupMember");
myCommandR1.Parameters.Add("Identity", "GrpLanguageFrench");
myCommandR1.Parameters.Add("Members", "MazMa");
myCommandR1.Parameters.Add("Confirm", false);
pipeline1.Commands.Add(myCommandR1);
try
{
//execute script
pipeline1.Invoke();
} catch (Exception e) {
mw.WriteLog("Exception of type " + e.GetType().ToString() + " was thrown during execution of powershell command : " + e.Message);
return;
} finally {
//close runspace
runspace.Close();
}
И вот моя среда возобновилась:
- wind c => Контроллер домена
- app => сервер, на котором c# приложение работает
- admin => учетная запись администратора домена
- appsuser => учетная запись, которая запускает приложение
Если я запускаю программу из приложения сервера Зарегистрировавшись как appsuser, я получаю следующую ошибку: Исключение типа System.Management.Automation.CmdletInvocationException возникло во время выполнения команды powershell: Невозможно связаться с сервером. Это может быть связано с тем, что этот сервер не существует, он в данный момент не работает или на нем не запущены веб-службы Active Directory.
Если я запускаю команду powershell непосредственно из серверного приложения, зарегистрированного как appsuser, он работает
Если я запускаю программу из серверного приложения, зарегистрированного как администратор, это работает => Это то, что заставляет меня думать, что это не связано с веб-службой AD или чем-то, что нужно установить (RSAT) в моем приложении сервер.
Это оставило бы только права, но тогда это не должно работать как appsuser в Powershell, так что ... Поэтому я застрял на данный момент, пытаясь выяснить, какие права отсутствуют в моей учетной записи для выполнения Powershell. Команды через код.
Ответы Габриэлю Люси:
Брандмауэр: Нет, и поскольку он работает непосредственно с powershell, я не верю, что что-то может блокировать пользователя на сетевом уровне (или не понимаю, как пройдет прямой Powershell)
Причина для этого: я унаследовал то, что было на месте, когда я приехал Ved, и у нас есть много программ, доступных для пользователей, не являющихся администраторами, для выполнения действий над AD (блокировка / разблокировка учетных записей, сброс паролей, изменение членства в группах и т. д. c ...). В настоящее время у пользователя, на котором работают все эти программы, слишком много привилегий (они могли бы изменить пароль администратора домена, если немного его обманули ... А так как мы школа ... Ну, мы до сих пор повезло!) И я пытаюсь настроить пользователя с минимальными правами, чтобы иметь возможность делать то, что он должен делать. Поэтому моя первоначальная цель состояла в том, чтобы заставить его работать, не затрагивая сами программы (поскольку они работают), но я должен признать, что ваше предложение кажется более практичным, чем попытка вызвать Powershell (старый «разработчик» не имел опыта программирования). так что, я думаю, он был более склонен к использованию Powershell, так как знал это). Я немного поищу и протестирую то, что вы предложили, по крайней мере, я надеюсь, что смогу получить более понятное сообщение об ошибке, чем «сервер не найден».