Powershell и брокер соединений C # - PullRequest
3 голосов
/ 22 марта 2011

У нас возникла проблема с использованием сценария 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 #?«remove-module» и «import-module» не помогли.

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

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

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

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

1 Ответ

0 голосов
/ 25 июля 2011

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

Вы также можете обновить power shell.

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

...