Я работаю над решением, где пользователи могут стирать мобильные устройства, зарегистрированные в Exchange 2010, через веб-страницу, используя Outlook Web Access - это не вариант.Я установил средства управления Exchange на своем компьютере разработчика, и пул приложений использует удостоверение, обладающее необходимыми правами для выполнения команд (назначенная группа ролей «Управление получателями»).Я использую следующий код для выполнения вайпов
string deviceId = "deviceid";
string username = "username";
RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
PSSnapInException snapInException = null;
PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException);
if(snapInException != null)
throw snapInException;
using(var runspace = RunspaceFactory.CreateRunspace(new MyPowershellHost(), rsConfig))
{
runspace.Open();
using(var pipeline = runspace.CreatePipeline())
{
pipeline.Commands.AddScript(@". ""C:\Program files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1""");
pipeline.Commands.AddScript("Connect-ExchangeServer -auto");
pipeline.Invoke();
}
ActiveSyncDeviceConfiguration actualDevice;
using(var pipeline = runspace.CreatePipeline())
{
pipeline.Commands.AddScript(string.Format("Get-ActiveSyncDeviceStatistics -Mailbox {0}", username));
var result = pipeline.Invoke();
actualDevice = result.Select(x => x.BaseObject as ActiveSyncDeviceConfiguration).Where(x => x.DeviceID.EndsWith(deviceId)).SingleOrDefault();
}
if(actualDevice != null)
{
var identity = actualDevice.Identity as ADObjectId;
using(var pipeline = runspace.CreatePipeline())
{
var cmd = new Command("Clear-ActiveSyncDevice");
cmd.Parameters.Add("Identity", identity.DistinguishedName);
pipeline.Commands.Add(cmd);
pipeline.Invoke();
}
}
}
Я могу заставить это работать, когда учетная запись пользователя добавлена в качестве локального администратора на машине, а также вошел в Windows.Я могу принять, если пользователь должен быть локальным администратором, но постоянный вход пользователя в систему нецелесообразен для серверного приложения.Класс MyPowershellHost - это просто базовая реализация хоста, позволяющая запускать скрипт RemoteExchange.ps1, так как он взаимодействует с пользовательским интерфейсом.
Я не могу понять, нужны ли пользователю дополнительные привилегии, или я просто делаю этонеправильно.