Pergunta

Objetivo: Forneça um serviço da Web usando o Visual Basic ou C# ou .NET que interage com o Shell de gerenciamento do Exchange, enviando comandos para executar cmdlets e retornar os resultados como XML. (Observe que poderíamos usar qualquer Lanaguage para escrever o serviço, mas como é uma caixa do Windows e temos o Visual Studio 2008, parecia que a solução mais fácil seria usá -la apenas para criar um serviço da web VB/.NET. De fato, ela Foi muito fácil de fazer isso, apenas aponte e clique.)

Problema: Como executar um shell cmdlet do Exchange Management do Serviço da Web, por exemplo, Get-DistributionGroupMember "Live Presidents"

Parece que devemos ser capazes de criar um script do PowerShell que executa o cmdlet e capaz de chamar isso da linha de comando e, assim, apenas chamá -lo de dentro do programa. Isso soa correto? Se sim, como eu iria fazer isso? Obrigado. A resposta pode ser agnóstica de idioma, mas o Visual Basic provavelmente seria o melhor, pois é isso que eu carreguei o serviço da Web de teste.

Foi útil?

Solução 2

Bem, não obtive uma resposta, mas meio que descobri. Eu tive um problema em obter um PowerShell de 64 bits para correr, mas eventualmente atualizei para o Exchange 2010 e usei C# e não havia mais um problema.

A resposta curta é que você cria um novo aplicativo PowerShell no Visual Studio e adiciona uma referência à DLL System.Management.Automation. Isso permite que você configure um espaço para nome para o PowerShell e faça chamadas para ele. http://msdn.microsoft.com/en-us/library/system.management.automation(vs.85).aspx Você cria um pipeline usando a aula de pipeline disponível http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces.pipline(vs.85).aspx Para colocar seus comandos de volta. Em seguida, você coloca seus comandos, adicione parâmetros, se necessário. Execute o aplicativo e ele retornará os resultados dos cmdlets que você chamou no PowerShell e você pode ir a partir daí.

Outras dicas

O código real adaptado do msdn http://msdn.microsoft.com/en-us/library/exchange/bb332449(v=exchg.80).aspx Pode ser complicado, porque você precisa acertar as permissões e executá-lo em um Macine com todos os plug-ins do 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;
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top