Импортировать модуль в удаленный сеанс Powershell с помощью c#

#c# #session #powershell #exchange-server

#c# #сеанс #powershell #exchange-server

Вопрос:

Я столкнулся с проблемой, которая вызывает у меня головную боль (в буквальном смысле), я надеюсь, что вы сможете мне с этим помочь :

Учитывая, что мой Powershell находится на другом сервере, чем мое приложение, в c # вы можете создать «удаленный сеанс Powershell», определив WSManConnectionInfo и используя это при создании «runspace».

Что-то вроде :

 var runspace = RunspaceFactory.CreateRunspace(WSManConnectionInfo);
  

Но проблема в том, что :

Когда мы работаем с удаленным сеансом, мы можем использовать только некоторые команды (доступны не все команды). Таким образом, вы не можете использовать команду «Import-Module» непосредственно в удаленном сеансе.

Поэтому я прошу вас, можете ли вы помочь мне найти решение на c # (или просто подсказку) для использования импортированного модуля в удаленном сеансе.

Я знаю, что существует множество решений (чистая команда Powershell), но я просто недостаточно хорош, чтобы преобразовать эти решения в c #.

Ответ №1:

Хм, я могу использовать Import-Module в удаленном сеансе, например:

 var connectionInfo = new WSManConnectionInfo(new Uri("http://foo.acme.com:5985"));
var runspace = RunspaceFactory.CreateRunspace(connectionInfo);
runspace.Open();

using (var powershell = PowerShell.Create())
{
    powershell.Runspace = runspace;
    powershell.AddScript("Import-Module PSCX");
    var results = powershell.Invoke();
    powershell.AddScript("Get-Uptime | Out-String");
    results = powershell.Invoke();
    foreach (var result in results)
    {
        Console.WriteLine(result);
    }

    runspace.Close();
}
  

Это выводит:

 Uptime                                   LastBootUpTime
------                                   --------------
10.20:21:06.6432615                      6/26/2014 6:29:00 PM
  

Возможно ли, что ваш модуль зависит от разрядности, возможно, это 32-разрядный модуль, который загружается только в сеанс PowerShell x86? Сеанс по умолчанию будет 64-разрядным (при условии, что удаленная ОС 64-разрядная). Если выяснится, что ваш модуль является 32-разрядным, подключитесь к Microsoft.Конечная точка Powersell32.

 var connectionInfo = new WSManConnectionInfo(new Uri("http://foo.acme.com:5985"), "http://schemas.microsoft.com/powershell/Microsoft.PowerShell32", PSCredential.Empty);