Adding Desktop Experience feature
This commit is contained in:
parent
6b836fc9f6
commit
4afacd7a11
7 changed files with 1224 additions and 1351 deletions
File diff suppressed because it is too large
Load diff
|
@ -108,6 +108,11 @@ namespace WebsitePanel.EnterpriseServer
|
|||
return GetRdsServerInternal(rdsSeverId);
|
||||
}
|
||||
|
||||
public static ResultObject SetRDServerNewConnectionAllowed(int itemId, bool newConnectionAllowed, int rdsSeverId)
|
||||
{
|
||||
return SetRDServerNewConnectionAllowedInternal(itemId, newConnectionAllowed, rdsSeverId);
|
||||
}
|
||||
|
||||
public static List<RdsServer> GetCollectionRdsServers(int collectionId)
|
||||
{
|
||||
return GetCollectionRdsServersInternal(collectionId);
|
||||
|
@ -457,6 +462,52 @@ namespace WebsitePanel.EnterpriseServer
|
|||
return ObjectUtils.FillObjectFromDataReader<RdsServer>(DataProvider.GetRDSServerById(rdsSeverId));
|
||||
}
|
||||
|
||||
private static ResultObject SetRDServerNewConnectionAllowedInternal(int itemId, bool newConnectionAllowed, int rdsSeverId)
|
||||
{
|
||||
ResultObject result = TaskManager.StartResultTask<ResultObject>("REMOTE_DESKTOP_SERVICES", "SET_RDS_SERVER_NEW_CONNECTIONS_ALLOWED"); ;
|
||||
try
|
||||
{
|
||||
// load organization
|
||||
Organization org = OrganizationController.GetOrganization(itemId);
|
||||
if (org == null)
|
||||
{
|
||||
result.IsSuccess = false;
|
||||
result.AddError("", new NullReferenceException("Organization not found"));
|
||||
return result;
|
||||
}
|
||||
|
||||
var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
|
||||
|
||||
var rdsServer = GetRdsServer(rdsSeverId);
|
||||
|
||||
if (rdsServer == null)
|
||||
{
|
||||
result.IsSuccess = false;
|
||||
result.AddError("", new NullReferenceException("RDS Server not found"));
|
||||
return result;
|
||||
}
|
||||
|
||||
rds.SetRDServerNewConnectionAllowed(newConnectionAllowed, rdsServer);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
result.AddError("REMOTE_DESKTOP_SERVICES_SET_RDS_SERVER_NEW_CONNECTIONS_ALLOWED", ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (!result.IsSuccess)
|
||||
{
|
||||
TaskManager.CompleteResultTask(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
TaskManager.CompleteResultTask();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static int GetOrganizationRdsUsersCountInternal(int itemId)
|
||||
{
|
||||
return DataProvider.GetOrganizationRdsUsersCount(itemId);
|
||||
|
@ -639,7 +690,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
RdsServer rdsServer = GetRdsServer(serverId);
|
||||
|
||||
if (!rds.CheckSessionHostFeatureInstallation(rdsServer.FqdName))
|
||||
//if (!rds.CheckSessionHostFeatureInstallation(rdsServer.FqdName))
|
||||
{
|
||||
rds.AddSessionHostFeatureToServer(rdsServer.FqdName);
|
||||
}
|
||||
|
|
|
@ -122,6 +122,12 @@ namespace WebsitePanel.EnterpriseServer
|
|||
return RemoteDesktopServicesController.GetRdsServer(rdsSeverId);
|
||||
}
|
||||
|
||||
[WebMethod]
|
||||
public ResultObject SetRDServerNewConnectionAllowed(int itemId, bool newConnectionAllowed, int rdsSeverId)
|
||||
{
|
||||
return RemoteDesktopServicesController.SetRDServerNewConnectionAllowed(itemId, newConnectionAllowed, rdsSeverId);
|
||||
}
|
||||
|
||||
[WebMethod]
|
||||
public List<RdsServer> GetCollectionRdsServers(int collectionId)
|
||||
{
|
||||
|
|
|
@ -48,6 +48,8 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
void RemoveSessionHostServerFromCollection(string organizationId, string collectionName, RdsServer server);
|
||||
void RemoveSessionHostServersFromCollection(string organizationId, string collectionName, List<RdsServer> servers);
|
||||
|
||||
void SetRDServerNewConnectionAllowed(bool newConnectionAllowed, RdsServer server);
|
||||
|
||||
List<StartMenuApp> GetAvailableRemoteApplications(string collectionName);
|
||||
List<RemoteApplication> GetCollectionRemoteApplications(string collectionName);
|
||||
bool AddRemoteApplication(string collectionName, RemoteApplication remoteApp);
|
||||
|
|
|
@ -411,6 +411,30 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
|
||||
#endregion
|
||||
|
||||
public void SetRDServerNewConnectionAllowed(bool newConnectionAllowed, RdsServer server)
|
||||
{
|
||||
Runspace runSpace = null;
|
||||
|
||||
try
|
||||
{
|
||||
runSpace = OpenRunspace();
|
||||
|
||||
Command cmd = new Command("Set-RDSessionHost");
|
||||
cmd.Parameters.Add("SessionHost", server.FqdName);
|
||||
cmd.Parameters.Add("NewConnectionAllowed", string.Format("${0}", newConnectionAllowed.ToString()));
|
||||
|
||||
ExecuteShellCommand(runSpace, cmd, false);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
}
|
||||
finally
|
||||
{
|
||||
CloseRunspace(runSpace);
|
||||
}
|
||||
}
|
||||
|
||||
#region Remote Applications
|
||||
|
||||
public List<StartMenuApp> GetAvailableRemoteApplications(string collectionName)
|
||||
|
@ -737,6 +761,8 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
ActiveDirectoryUtils.AddObjectToGroup(computerPath, GetComputerGroupPath(organizationId, collectionName));
|
||||
}
|
||||
}
|
||||
|
||||
SetRDServerNewConnectionAllowed(false, server);
|
||||
}
|
||||
|
||||
private void RemoveComputerFromCollectionAdComputerGroup(string organizationId, string collectionName, RdsServer server)
|
||||
|
@ -766,15 +792,36 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
bool installationResult = false;
|
||||
|
||||
Runspace runSpace = null;
|
||||
PSObject feature = null;
|
||||
|
||||
try
|
||||
{
|
||||
if (!CheckSessionHostFeatureInstallation(hostName))
|
||||
{
|
||||
runSpace = OpenRunspace();
|
||||
|
||||
var feature = AddFeature(runSpace, hostName, "RDS-RD-Server", true, true);
|
||||
feature = AddFeature(runSpace, hostName, "RDS-RD-Server", true, true);
|
||||
installationResult = (bool)GetPSObjectProperty(feature, "Success");
|
||||
}
|
||||
else
|
||||
{
|
||||
runSpace = OpenRunspace();
|
||||
installationResult = true;
|
||||
}
|
||||
|
||||
|
||||
if (installationResult && !IsFeatureInstalled(hostName, "Desktop-Experience", runSpace))
|
||||
{
|
||||
feature = AddFeature(runSpace, hostName, "Desktop-Experience", true, false);
|
||||
installationResult = (bool) GetPSObjectProperty(feature, "Success");
|
||||
}
|
||||
|
||||
if (installationResult && !IsFeatureInstalled(hostName, "NET-Framework-Core", runSpace))
|
||||
{
|
||||
feature = AddFeature(runSpace, hostName, "NET-Framework-Core", true, false);
|
||||
installationResult = (bool)GetPSObjectProperty(feature, "Success");
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
CloseRunspace(runSpace);
|
||||
|
@ -1087,38 +1134,22 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
|
||||
#region Windows Feature PowerShell
|
||||
|
||||
internal bool IsFeatureInstalled(string hostName, string featureName)
|
||||
internal bool IsFeatureInstalled(string hostName, string featureName, Runspace runSpace)
|
||||
{
|
||||
bool isInstalled = false;
|
||||
|
||||
Runspace runSpace = null;
|
||||
try
|
||||
{
|
||||
runSpace = OpenRunspace();
|
||||
|
||||
Command cmd = new Command("Get-WindowsFeature");
|
||||
cmd.Parameters.Add("Name", featureName);
|
||||
|
||||
var feature = ExecuteRemoteShellCommand(runSpace, hostName, cmd).FirstOrDefault();
|
||||
|
||||
if (feature != null)
|
||||
{
|
||||
isInstalled = (bool) GetPSObjectProperty(feature, "Installed");
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
CloseRunspace(runSpace);
|
||||
}
|
||||
|
||||
return isInstalled;
|
||||
}
|
||||
|
||||
internal PSObject AddFeature(Runspace runSpace, string hostName, string featureName, bool includeAllSubFeature = true, bool restart = false)
|
||||
{
|
||||
PSObject feature;
|
||||
|
||||
try
|
||||
{
|
||||
Command cmd = new Command("Add-WindowsFeature");
|
||||
cmd.Parameters.Add("Name", featureName);
|
||||
|
@ -1133,14 +1164,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
|
|||
cmd.Parameters.Add("Restart", "");
|
||||
}
|
||||
|
||||
feature = ExecuteRemoteShellCommand(runSpace, hostName, cmd).FirstOrDefault();
|
||||
}
|
||||
finally
|
||||
{
|
||||
CloseRunspace(runSpace);
|
||||
}
|
||||
|
||||
return feature;
|
||||
return ExecuteRemoteShellCommand(runSpace, hostName, cmd).FirstOrDefault();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -45,6 +45,8 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
|
|||
|
||||
private System.Threading.SendOrPostCallback RemoveSessionHostServersFromCollectionOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback SetRDServerNewConnectionAllowedOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback GetAvailableRemoteApplicationsOperationCompleted;
|
||||
|
||||
private System.Threading.SendOrPostCallback GetCollectionRemoteApplicationsOperationCompleted;
|
||||
|
@ -90,6 +92,9 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
|
|||
/// <remarks/>
|
||||
public event RemoveSessionHostServersFromCollectionCompletedEventHandler RemoveSessionHostServersFromCollectionCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event SetRDServerNewConnectionAllowedCompletedEventHandler SetRDServerNewConnectionAllowedCompleted;
|
||||
|
||||
/// <remarks/>
|
||||
public event GetAvailableRemoteApplicationsCompletedEventHandler GetAvailableRemoteApplicationsCompleted;
|
||||
|
||||
|
@ -478,6 +483,49 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
|
|||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/SetRDServerNewConnectionAllowed", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
public void SetRDServerNewConnectionAllowed(bool newConnectionAllowed, RdsServer server) {
|
||||
this.Invoke("SetRDServerNewConnectionAllowed", new object[] {
|
||||
newConnectionAllowed,
|
||||
server});
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.IAsyncResult BeginSetRDServerNewConnectionAllowed(bool newConnectionAllowed, RdsServer server, System.AsyncCallback callback, object asyncState) {
|
||||
return this.BeginInvoke("SetRDServerNewConnectionAllowed", new object[] {
|
||||
newConnectionAllowed,
|
||||
server}, callback, asyncState);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void EndSetRDServerNewConnectionAllowed(System.IAsyncResult asyncResult) {
|
||||
this.EndInvoke(asyncResult);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void SetRDServerNewConnectionAllowedAsync(bool newConnectionAllowed, RdsServer server) {
|
||||
this.SetRDServerNewConnectionAllowedAsync(newConnectionAllowed, server, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void SetRDServerNewConnectionAllowedAsync(bool newConnectionAllowed, RdsServer server, object userState) {
|
||||
if ((this.SetRDServerNewConnectionAllowedOperationCompleted == null)) {
|
||||
this.SetRDServerNewConnectionAllowedOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetRDServerNewConnectionAllowedOperationCompleted);
|
||||
}
|
||||
this.InvokeAsync("SetRDServerNewConnectionAllowed", new object[] {
|
||||
newConnectionAllowed,
|
||||
server}, this.SetRDServerNewConnectionAllowedOperationCompleted, userState);
|
||||
}
|
||||
|
||||
private void OnSetRDServerNewConnectionAllowedOperationCompleted(object arg) {
|
||||
if ((this.SetRDServerNewConnectionAllowedCompleted != null)) {
|
||||
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||
this.SetRDServerNewConnectionAllowedCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||
}
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
|
||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetAvailableRemoteApplications", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||
|
@ -949,6 +997,10 @@ namespace WebsitePanel.Providers.RemoteDesktopServices {
|
|||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
public delegate void RemoveSessionHostServersFromCollectionCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
public delegate void SetRDServerNewConnectionAllowedCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
|
||||
|
||||
/// <remarks/>
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||
public delegate void GetAvailableRemoteApplicationsCompletedEventHandler(object sender, GetAvailableRemoteApplicationsCompletedEventArgs e);
|
||||
|
|
|
@ -191,6 +191,22 @@ namespace WebsitePanel.Server
|
|||
}
|
||||
}
|
||||
|
||||
[WebMethod, SoapHeader("settings")]
|
||||
public void SetRDServerNewConnectionAllowed(bool newConnectionAllowed, RdsServer server)
|
||||
{
|
||||
try
|
||||
{
|
||||
Log.WriteStart("'{0}' SetRDServerNewConnectionAllowed", ProviderSettings.ProviderName);
|
||||
RDSProvider.SetRDServerNewConnectionAllowed(newConnectionAllowed, server);
|
||||
Log.WriteEnd("'{0}' SetRDServerNewConnectionAllowed", ProviderSettings.ProviderName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.WriteError(String.Format("'{0}' SetRDServerNewConnectionAllowed", ProviderSettings.ProviderName), ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
[WebMethod, SoapHeader("settings")]
|
||||
public List<StartMenuApp> GetAvailableRemoteApplications(string collectionName)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue