Запустите командлеты оболочки управления Exchange от Visual Basic / C # /. Net App приложение
-
27-09-2019 - |
Вопрос
Цель: предоставить веб-службу, используя Visual Basic или C # или .NET, который взаимодействует с оболочкой управления Exchange, отправляя его команды для запуска командлетов и возвращает результаты в виде XML. (Обратите внимание, что мы могли бы использовать любую ланагую, чтобы написать службу, но поскольку это окна Windows, и у нас есть Visual Studio 2008, казалось, что простое решение будет просто использовать его для создания веб-сервиса VB / .NET. Действительно, это Было довольно легко сделать это, просто указать и нажмите.)
Проблема: как запустить командлет Shell Management Exchange из веб-сервиса, например, Get-PrivateGroupMember «Live президенты»
Похоже, что мы должны иметь возможность создать скрипт PowerShell, который запускает командлет, и сможет вызвать это из командной строки, и, таким образом, просто вызовите ее в рамках программы. Это звучит правильно? Если так, как бы я пошел об этом? Спасибо. Ответ может быть языком agnostic, но Visual Basic, вероятно, будет лучше всего, поскольку это то, что я загрузил тестовую веб-службу.
Решение 2
Ну, не получил ответ, но его разобрался. У меня была проблема получить 64-битный PowerShell для бега, но в конечном итоге обновлен до Exchange 2010 и использовал C #, а затем больше не было проблемой.
Краткий ответ заключается в том, что вы создаете новое приложение PowerShell в Visual Studio, то вы добавляете ссылку на систему. Phange.Automation DLL. Это позволяет вам настроить пространство имен для PowerShell и сделать его звонкам. http://msdn.microsoft.com/en-us/library/system.management.automation(vs.85).aspx. Вы создаете трубопровод, используя доступный класс трубопровода http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces.Pipeline(vs.85).aspx. Для того, чтобы трусить ваши команды обратно. Затем вы поместите свои команды, добавляете параметры при необходимости. Запустите приложение, и он вернет результаты из командлетов, которые вы вызвали в PowerShell, и вы можете отправиться оттуда.
Другие советы
Фактический код, адаптированный из MSDN http://msdn.microsoft.com/en-us/library/exchange/bb332449(v=exchg.80).aspx. Может быть сложно, потому что вы должны получить разрешения прямо и запустить его на Macine со всеми плагинами Exchange:
using Microsoft.Win32;
using System.Collections.ObjectModel;
using System.IO;
using System.Management.Automation.Runspaces;
using System.Reflection;
public static Runspace GetExchangeRunspace()
{
return GetExchangeRunspace("");
}
public static Runspace GetExchangeRunspace(string snapIn)
{
string consoleFilePath = (ScriptEngine.GetExchangeAssemblyPath()
+ "bin\\exshell.psc1").Replace("Exchange Server", "EXCHAN~1");
Response.Write("<br/>" + consoleFilePath);
PSConsoleLoadException warnings = null;
RunspaceConfiguration runspaceConfiguration
= RunspaceConfiguration.Create(consoleFilePath, out warnings);
if ((snapIn + "").Trim().Length > 0)
{
PSSnapInException warning = null;
Response.Write("<br/>Start AddPSSnapIn..." + snapIn);
Response.Write("<br/>"
+ runspaceConfiguration.AddPSSnapIn(snapIn, out warning));
Response.Write("<br/>" + warning);
}
return RunspaceFactory.CreateRunspace(runspaceConfiguration);
}
private static string GetExchangeAssemblyPath()
{
string path = "";
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(
"SOFTWARE\\Microsoft\\ExchangeServer\\v14\\Setup"); // or your version
if (key != null)
{
path = Path.GetFullPath(string.Concat(key.GetValue("MsiInstallPath")));
Response.Write(path);
}
}
catch (Exception ex) { }
return path;
}