У нас возникла проблема с использованием сценария 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 загружается