目标:使用Visual Basic或C#或.NET提供与Exchange命令行管理程序交互的Web服务,发送命令以运行cmdlet,并将结果作为XML返回。 (请注意,我们可以使用任何语言来编写服务,但由于它是Windows Box并且我们有Visual Studio 2008,因此最简单的解决方案似乎只是使用它来创建VB / .NET Web服务。实际上,它这很简单,只需点击即可。)
问题:如何从Web服务运行Exchange命令行管理程序cmdlet,例如,Get-DistributionGroupMember“Live Presidents”
似乎我们应该能够创建运行cmdlet的PowerShell脚本,并且能够从命令行调用它,因此只需从程序中调用它。这听起来不错吗?如果是这样我将如何解决这个问题?谢谢。答案可能与语言无关,但Visual Basic可能是最好的,因为这是我加载测试Web服务的。
答案 0 :(得分:1)
从MSDN http://msdn.microsoft.com/en-us/library/exchange/bb332449(v=exchg.80).aspx改编的实际代码可能很棘手,因为您必须获得权限并在包含所有Exchange插件的macine上运行它:
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;
}
答案 1 :(得分:0)
嗯,没有得到答案,但有点想通了。我在运行64位PowerShell时遇到了问题,但最终升级到Exchange 2010并使用了C#,然后就不再有问题了。
简短的回答是,您在Visual Studio中创建一个新的PowerShell应用程序,然后添加对System.Management.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中调用的cmdlet的结果,您可以从那里开始。