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.
Дайте мне знать, если это решит вашу проблему, или что-то с моей стороны.