#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);