Powershell и брокер соединений C#

У нас проблема с использованием сценария C# для настройки посредника соединений с помощью Powershell.

Когда мы импортируем модуль remotedesktopservicesПоскольку роль хоста сеанса была установлена ​​и использована ранее, затем установите роль посредника соединений, поэтому мы должны перезапустить наш сценарий, чтобы получить правильный вывод.

Мы можем воспроизвести поведение, если будем использовать Powershell напрямую.

Это команды, которые мы называем:

PS C:\Windows\system32> import-module servermanager
PS C:\Windows\system32> import-module remotedesktopservices
PS C:\Windows\system32> add-windowsfeature rds-connection-broker

Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True  No       Success  {Remotedesktop-ConnectionBroker}

PS C:\Windows\system32> ls rds:

  Directory: RDS:

Name              Type   CurrentValue     GP  PermissibleValues PermissibleOperations
----              ----   ------------     --  ----------------- ---------------------
RDSConfiguration        Container           -           Get-Item, Get-ChildItem
RemoteApp           Container           -           Get-Item, Get-ChildItem

PS C:\Windows\system32> import-module -force remotedesktopservices
PS C:\Windows\system32> ls rds:

  Directory: RDS:

Name              Type   CurrentValue     GP  PermissibleValues PermissibleOperations
----              ----   ------------     --  ----------------- ---------------------
RDSConfiguration        Container           -           Get-Item, Get-ChildItem
RemoteApp           Container           -           Get-Item, Get-ChildItem

После перезапуска Powershell или нашей программы результат выглядит (правильно) следующим образом:

PS C:\Windows\system32> ls rds:

  Directory: RDS:

Name              Type   CurrentValue     GP  PermissibleValues PermissibleOperations
----              ----   ------------     --  ----------------- ---------------------
RDSConfiguration        Container           -           Get-Item, Get-ChildItem
RDSFarms            Container           -           Get-Item, Get-ChildItem
RemoteApp           Container           -           Get-Item, Get-ChildItem
ConnectionBroker        Container           -           Get-Item, Get-ChildItem

Нам нужен этот вывод без перезапуска нашей программы. Возможно ли получить новый новый Powershell в C#? "Удалить-модуль" и "импорт-модуль" не помогли.

Это наш код C# для получения пространства выполнения Powershell:

InitialSessionState iss = InitialSessionState.CreateDefault();
iss.ThrowOnRunspaceOpenError = true;
iss.ImportPSModule(initialRoles);

RemoteHost.powerShellRunspace = RunspaceFactory.CreateRunspace(iss);
RemoteHost.powerShellRunspace.Open();

Даже если мы создадим новое пространство выполнения powershell таким же образом, кажется, что старый Powershell загружен

1 ответ

Существует Power Shell Class в C Sharp, посмотрите на это. Он обеспечивает практически все функциональные возможности Power Shell. http://msdn.microsoft.com/en-us/library/system.management.automation.powershell%28v=vs.85%29.aspx

Вы также можете обновить Power Shell.

Дайте мне знать, если это решит вашу проблему, или что-то с моей стороны.

Другие вопросы по тегам