Размещение ограниченного Powershell с пользовательскими командлетами
Я размещаю PowerShell в своем приложении и настроил ограниченный пул RunSpace, который в основном пуст (насколько мне известно).
public class MyPowerShell : IDisposable
{
private RunspacePool _runspacePool;
private PowerShell _shell;
public MyPowerShell()
{
try
{
var initialSessionState = InitialSessionState.CreateRestricted(SessionCapabilities.RemoteServer);
_runspacePool = RunspaceFactory.CreateRunspacePool(initialSessionState);
_shell = PowerShell.Create();
_shell.RunspacePool = _runspacePool;
_shell.RunspacePool.Open();
_shell.AddCommand("Import-Module").AddParameter("Assembly", Assembly.GetExecutingAssembly());
_shell.Invoke();
_shell.Commands.Clear();
}
catch (Exception ex)
{
throw;
}
}
public void Dispose()
{
_shell.RunspacePool.Close();
_shell.Dispose();
}
public string[] Exec(string commandText)
{
var results = new List<string>();
try
{
_shell.AddScript(commandText);
foreach (var str in _shell.AddCommand("Out-String").Invoke<string>())
{
results.Add(str);
}
}
catch (Exception ex)
{
results.Add(ex.Message);
}
return results.ToArray();
}
}
очевидно, когда я запускаю этот код...
_shell.AddCommand("Import-Module").AddParameter("Assembly", Assembly.GetExecutingAssembly());
_shell.Invoke();
_shell.Commands.Clear();
происходит сбой, потому что нет доступного командлета Import-Module. Итак, мой вопрос: как я могу импортировать модуль без доступного командлета "Import-Module"?
Это сообщение об ошибке, которое я получаю...
Термин "Модуль импорта" не распознается как имя командлета, функции, файла сценария или работоспособной программы. Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку.
1 ответ
Я нашел решение, не могу вспомнить, где я сейчас и я забыл, что задал этот вопрос! Во всяком случае, здесь это в интересах любого с такой же проблемой.
var initialSessionState = InitialSessionState.CreateRestricted(SessionCapabilities.RemoteServer);
initialSessionState.ImportPSModule(new [] { "ModuleName1", "ModuleName2" });
На самом деле я не вижу, какой модуль я пытался импортировать, когда задавал этот вопрос, но я успешно использовал приведенный выше код для использования командлетов PowerShell для администрирования AppFabric.