C # \ Exchange 2010 PS1 Script - PullRequest
       35

C # \ Exchange 2010 PS1 Script

0 голосов
/ 09 августа 2011

Я пытаюсь запустить сценарий PS1 с использованием удаленного powershell Exchange 2010 и c #. Я могу подключиться и запустить скрипт ps1, но в скрипте есть несколько мест, в которых используются командлеты exchange для обновления необходимой пользовательской информации. Один командлет, используемый сценарием, является получателем обновлений. Сценарий работает нормально, пока не попытается запустить этот командлет и выдает сообщение об ошибке:

Термин «получатель обновления» не распознается как имя командлета, функции, файла сценария или работоспособной программы.

Кто-нибудь знает, существуют ли какие-либо ограничения на запуск командлетов внутри сценариев PS1 из c #?

Спасибо

Ответы [ 3 ]

1 голос
/ 15 июня 2012

Чтобы запустить сценарий powershell для Exchange 2010 из командной строки, необходимо загрузить компоненты Exchange в начале сценария powershell. Добавьте эти 2 строки в ваш файл .ps1. Замените имя вашего сервера Exchange на EXCHANGESERVER в первой строке.

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://EXCHANGESERVER/PowerShell/ -Authentication Kerberos

Import-PSSession $Session
0 голосов
/ 11 февраля 2012

Или попробуйте этот код для Exchange 2007 от MSFT

       Runspace myRunspace = RunspaceFactory.CreateRunspace();
        myRunspace.Open();

        RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
        PSSnapInException snapInException = null;
        PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException);
        Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig);
        myRunSpace.Open(rsConfig);
0 голосов
/ 11 февраля 2012

Попробуйте этот пример кода (в курсе, что он работает для Exchange 2010)

        PSCredential credential = new PSCredential(@"domain\user", createPassword("Pass"));
        WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "exchange.ibm.com", 80, "/Powershell", "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential);
        connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default;
        Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo);

        try
        {
            runspace.Open();
            Pipeline pipeline = runspace.CreatePipeline();

            Command objCommand = new Command("");
            objCommand.Parameters.Add("Identity", @"dom\user");
            pipeline.Commands.Add(objCommand);

            Collection<PSObject> results = pipeline.Invoke();
        }
        catch 
        {
        }
        finally
        {
            runspace.Close();                   
        }
...