Можно ли импортировать PSSession в существующий "OutOfProcessRunspace" - PullRequest
0 голосов
/ 31 мая 2018

Используя приведенный ниже код, запускается процесс powershell, и пространство выполнения открывается правильно.Отсюда я могу отправить команды powershell для создания и импорта удаленного сеанса powershell.Проблема заключается в том, что этот новый сеанс загружает и кэширует все импортированные модули в хост-процесс, а не процесс, порожденный CreateOutOfProcessRunspace (...). Open (), без возможности сбора мусора из кэшированных модулей.

PowerShellProcessInstance instance = new PowerShellProcessInstance(new Version(5, 1), null, null, true);
var runspace = RunspaceFactory.CreateOutOfProcessRunspace(new TypeTable(new string[0]), instance);
runspace.Open();

Использование сценария инициализации для экземпляра powershell застревает на runspace.Open().Насколько я могу судить, это никогда не истекает.Я позволил ему работать в течение хороших 5 минут (когда на извлечение удаленных модулей не требуется более 20 секунд), и состояние пространства выполнения все еще Opening.

string script = string.Join("\r\n", new string[] {
    "$Username = \"mailbox\"",
    "$SecurePass = ConvertTo-SecureString -AsPlainText password -Force",
    "$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Username,$SecurePass",
    "$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "url" -Credential $Credential -Authentication Basic -AllowRedirection",
    "Import-PSSession $session"
});

PowerShellProcessInstance instance = new PowerShellProcessInstance(new Version(5, 1), null, ScriptBlock.Create(script), true);
var runspace = RunspaceFactory.CreateOutOfProcessRunspace(new TypeTable(new string[0]), instance);
runspace.Open();

Кто-нибудьзнаете, как изолировать сеанс удаленного powershell в его собственный процесс и вызвать его из приложения ac #?

1 Ответ

0 голосов
/ 08 июня 2018

Для временного решения я планирую изолировать сеанс PowerShell в свой собственный процесс, создав отдельный исполняемый файл, который принимает команды Powershell и возвращает результаты.Таким образом, я могу закрыть этот процесс и освободить память, когда powershell не используется.

...