Используя приведенный ниже код, запускается процесс 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 #?