Remote Application users changes

This commit is contained in:
vfedosevich 2015-02-05 05:55:24 -08:00
parent fe0edfbed2
commit 4ca584a5ca
12 changed files with 210 additions and 99 deletions

View file

@ -1111,7 +1111,7 @@ namespace WebsitePanel.EnterpriseServer
var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
var collection = GetRdsCollection(collectionId);
result.AddRange(rds.GetApplicationUsers(collection.Name, remoteApp.DisplayName));
result.AddRange(rds.GetApplicationUsers(collection.Name, remoteApp.Alias));
return result;
}
@ -1130,7 +1130,7 @@ namespace WebsitePanel.EnterpriseServer
return result;
}
var collection = GetRdsCollection(collectionId);
var collection = ObjectUtils.FillObjectFromDataReader<RdsCollection>(DataProvider.GetRDSCollectionById(collectionId));
var rds = GetRemoteDesktopServices(GetRemoteDesktopServiceID(org.PackageId));
rds.SetApplicationUsers(collection.Name, remoteApp, users.ToArray());
}
@ -1214,7 +1214,6 @@ namespace WebsitePanel.EnterpriseServer
}
remoteApp.ShowInWebAccess = true;
rds.AddRemoteApplication(collection.Name, remoteApp);
}
catch (Exception ex)
@ -1319,13 +1318,14 @@ namespace WebsitePanel.EnterpriseServer
}
List<RemoteApplication> existingCollectionApps = GetCollectionRemoteApplications(itemId, collection.Name);
List<RemoteApplication> remoteAppsToAdd = remoteApps.Where(x => !existingCollectionApps.Select(p => p.DisplayName).Contains(x.DisplayName)).ToList();
List<RemoteApplication> remoteAppsToAdd = remoteApps.Where(x => !existingCollectionApps.Select(p => p.Alias).Contains(x.Alias)).ToList();
foreach (var app in remoteAppsToAdd)
{
{
app.ShowInWebAccess = true;
AddRemoteApplicationToCollection(itemId, collection, app);
}
List<RemoteApplication> remoteAppsToRemove = existingCollectionApps.Where(x => !remoteApps.Select(p => p.DisplayName).Contains(x.DisplayName)).ToList();
List<RemoteApplication> remoteAppsToRemove = existingCollectionApps.Where(x => !remoteApps.Select(p => p.Alias).Contains(x.Alias)).ToList();
foreach (var app in remoteAppsToRemove)
{
RemoveRemoteApplicationFromCollection(itemId, collection, app);

View file

@ -34,5 +34,6 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
public string FilePath { get; set; }
public string FileVirtualPath { get; set; }
public string RequiredCommandLine { get; set; }
public string Alias { get; set; }
}
}

View file

@ -643,7 +643,7 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
Command cmd = new Command("Get-RDRemoteApp");
cmd.Parameters.Add("CollectionName", collectionName);
cmd.Parameters.Add("ConnectionBroker", ConnectionBroker);
cmd.Parameters.Add("DisplayName", applicationName);
cmd.Parameters.Add("Alias", applicationName);
var application = ExecuteShellCommand(runspace, cmd, false).FirstOrDefault();
@ -899,21 +899,34 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
{
RemoveRdRap(runSpace, gatewayHost, policyName);
}
Log.WriteWarning(gatewayHost);
var userGroupParametr = string.Format("@({0})", string.Join(",", groups.Select(x => string.Format("\"{0}@{1}\"", x, RootDomain)).ToArray()));
var computerGroupParametr = string.Format("\"{0}@{1}\"", GetComputersGroupName(collectionName), RootDomain);
Command rdRapCommand = new Command("New-Item");
rdRapCommand.Parameters.Add("Path", string.Format("\"{0}\"", RapPath));
rdRapCommand.Parameters.Add("Name", string.Format("\"{0}\"", policyName));
rdRapCommand.Parameters.Add("UserGroups", userGroupParametr);
rdRapCommand.Parameters.Add("UserGroups", userGroupParametr);
rdRapCommand.Parameters.Add("ComputerGroupType", 1);
rdRapCommand.Parameters.Add("ComputerGroup", computerGroupParametr);
Log.WriteWarning("User Group:" + userGroupParametr);
Log.WriteWarning("Computer Group:" + computerGroupParametr);
ExecuteRemoteShellCommand(runSpace, gatewayHost, rdRapCommand, RdsModuleName);
Log.WriteWarning("RD RAP Added");
rdRapCommand.Parameters.Add("ComputerGroup", computerGroupParametr);
object[] errors;
for (int i = 0; i < 3; i++)
{
Log.WriteWarning(string.Format("Adding RD RAP ... {0}\r\nGateway Host\t{1}\r\nUser Group\t{2}\r\nComputer Group\t{3}", i + 1, gatewayHost, userGroupParametr, computerGroupParametr));
ExecuteRemoteShellCommand(runSpace, gatewayHost, rdRapCommand, out errors, RdsModuleName);
if (errors == null || !errors.Any())
{
Log.WriteWarning("RD RAP Added Successfully");
break;
}
else
{
Log.WriteWarning(string.Join("\r\n", errors.Select(e => e.ToString()).ToArray()));
}
}
}
internal void RemoveRdRap(Runspace runSpace, string gatewayHost, string name)
@ -1179,6 +1192,8 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
FileVirtualPath = Convert.ToString(GetPSObjectProperty(psObject, "FileVirtualPath"))
};
remoteApp.Alias = remoteApp.DisplayName;
return remoteApp;
}
@ -1493,6 +1508,12 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
}
internal Collection<PSObject> ExecuteRemoteShellCommand(Runspace runSpace, string hostName, Command cmd, params string[] moduleImports)
{
object[] errors;
return ExecuteRemoteShellCommand(runSpace, hostName, cmd, out errors, moduleImports);
}
internal Collection<PSObject> ExecuteRemoteShellCommand(Runspace runSpace, string hostName, Command cmd, out object[] errors, params string[] moduleImports)
{
Command invokeCommand = new Command("Invoke-Command");
invokeCommand.Parameters.Add("ComputerName", hostName);
@ -1512,9 +1533,9 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
ScriptBlock sb = invoke.Invoke(string.Format("{{{0}}}", commandString))[0].BaseObject as ScriptBlock;
invokeCommand.Parameters.Add("ScriptBlock", sb);
invokeCommand.Parameters.Add("ScriptBlock", sb);
return ExecuteShellCommand(runSpace, invokeCommand, false);
return ExecuteShellCommand(runSpace, invokeCommand, false, out errors);
}
internal Collection<PSObject> ExecuteRemoteShellCommand(Runspace runSpace, string hostName, List<string> scripts, params string[] moduleImports)
@ -1779,12 +1800,28 @@ namespace WebsitePanel.Providers.RemoteDesktopServices
prop.SetValue(session, GetPSObjectProperty(userSession, prop.Name).ToString(), null);
}
session.UserName = GetUserFullName(session.DomainName, session.UserName, runSpace);
result.Add(session);
}
return result;
}
private string GetUserFullName(string domain, string userName, Runspace runspace)
{
Command cmd = new Command("Get-WmiObject");
cmd.Parameters.Add("Class", "win32_useraccount");
cmd.Parameters.Add("Filter", string.Format("Domain = '{0}' AND Name = '{1}'", domain, userName));
var names = ExecuteShellCommand(runspace, cmd, false);
if (names.Any())
{
return names.First().Members["FullName"].Value.ToString();
}
return "";
}
#endregion
}
}

View file

@ -5641,6 +5641,9 @@
<data name="ERROR.RDSCOLLECTIONSETTINGS_NOT_UPDATES" xml:space="preserve">
<value>RDS Collection settings not updated</value>
</data>
<data name="ERROR.REMOTEAPPUSERS_NOT_UPDATED" xml:space="preserve">
<value>Remote application users not updated</value>
</data>
<data name="ERROR.REMOTE_DESKTOP_SERVICES_LOG_OFF_USER" xml:space="preserve">
<value>RDS User logging off error</value>
</data>

View file

@ -127,10 +127,10 @@
<value />
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Edit RDS Application</value>
<value>Edit RDS Collection</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit RDS Application</value>
<value>Edit RDS Collection</value>
</data>
<data name="locCollectionName.Text" xml:space="preserve">
<value>Collection Name:</value>
@ -144,4 +144,13 @@
<data name="locApplicationName.Text" xml:space="preserve">
<value>Application Name:</value>
</data>
<data name="secRdsApplicationUsers.Text" xml:space="preserve">
<value>Users</value>
</data>
<data name="secRdsApplicationEdit.Text" xml:space="preserve">
<value />
</data>
<data name="locLblApplicationName" xml:space="preserve">
<value>Application Name</value>
</data>
</root>

View file

@ -2,6 +2,9 @@
<%@ Register Src="../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
<%@ Register Src="UserControls/RDSCollectionUsers.ascx" TagName="CollectionUsers" TagPrefix="wsp"%>
<%@ Register Src="UserControls/RDSCollectionTabs.ascx" TagName="CollectionTabs" TagPrefix="wsp" %>
<%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="../UserControls/CollapsiblePanel.ascx" %>
<%@ Register Src="../UserControls/ItemButtonPanel.ascx" TagName="ItemButtonPanel" TagPrefix="wsp" %>
<script type="text/javascript" src="/JavaScript/jquery.min.js?v=1.4.4"></script>
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
@ -12,40 +15,50 @@
</div>
<div class="Content">
<div class="Center">
<div class="Title">
<div class="Title">
<asp:Image ID="imgEditRDSCollection" SkinID="EnterpriseStorageSpace48" runat="server" />
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Edit RDS Application"></asp:Localize>
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Edit RDS Collection"></asp:Localize>
-
<asp:Literal ID="litCollectionName" runat="server" Text="" />
</div>
<div class="FormContentRDS">
<wsp:SimpleMessageBox id="messageBox" runat="server" />
<table>
<tr>
<td class="FormSimpleLabel" style="width: 120px;"><asp:Localize ID="locCollectionName" runat="server" meta:resourcekey="locCollectionName" Text="Collection Name:"></asp:Localize></td>
<td class="FormSimpleLabel">
<asp:Localize ID="locCName" runat="server" Text="" />
</td>
</tr>
<tr>
<td class="FormSimpleLabel" style="width: 120px;"><asp:Localize ID="locApplicationName" runat="server" meta:resourcekey="locApplicationName" Text="Collection Name:"></asp:Localize></td>
<td class="FormSimpleLabel">
<asp:Localize ID="locAppName" runat="server" Text="" />
</td>
</tr>
</table>
<fieldset id="UsersPanel" runat="server">
<legend><asp:Localize ID="locUsersSection" runat="server" meta:resourcekey="locUsersSection" Text="Users"></asp:Localize></legend>
<wsp:SimpleMessageBox id="SimpleMessageBox1" runat="server" />
<wsp:CollectionTabs id="tabs" runat="server" SelectedTab="rds_collection_edit_apps" />
<wsp:CollapsiblePanel id="secRdsApplicationEdit" runat="server"
TargetControlID="panelRdsApplicationEdit" meta:resourcekey="secRdsApplicationEdit" Text="">
</wsp:CollapsiblePanel>
<asp:Panel runat="server" ID="panelRdsApplicationEdit">
<div style="padding: 10px;">
<table>
<tr>
<td class="FormLabel150" style="width: 150px;">
<asp:Localize ID="locLblApplicationName" runat="server" meta:resourcekey="locLblApplicationName" Text="Application Name"/>
</td>
<td>
<asp:TextBox ID="txtApplicationName" runat="server" CssClass="TextBox300" />
<asp:RequiredFieldValidator ID="valApplicationName" runat="server" ErrorMessage="*" ControlToValidate="txtApplicationName" ValidationGroup="SaveRDSCollection"/>
</td>
</tr>
</table>
</div>
</asp:Panel>
<wsp:CollapsiblePanel id="secRdsApplicationUsers" runat="server"
TargetControlID="panelRdsApplicationUsers" meta:resourcekey="secRdsApplicationUsers" Text="">
</wsp:CollapsiblePanel>
<asp:Panel runat="server" ID="panelRdsApplicationUsers">
<div style="padding: 10px;">
<wsp:CollectionUsers id="users" runat="server" />
</div>
</fieldset>
<div class="FormFooter">
<asp:Button id="btnSave" runat="server" Text="Save" CssClass="Button1" meta:resourcekey="btnSave" ValidationGroup="SaveRDSCollectoin" OnClick="btnSave_Click"></asp:Button>
<asp:ValidationSummary ID="valSummary" runat="server" ShowMessageBox="True" ShowSummary="False" ValidationGroup="SaveRDSCollectoin" />
</div>
</div>
</div>
</asp:Panel>
<div class="FormFooterClean">
<wsp:ItemButtonPanel id="buttonPanel" runat="server" ValidationGroup="SaveRDSCollection"
OnSaveClick="btnSave_Click" OnSaveExitClick="btnSaveExit_Click" />
</div>
</div>
</div>
</div>
</div>

View file

@ -44,17 +44,38 @@ namespace WebsitePanel.Portal.RDS
{
var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
var applications = ES.Services.RDS.GetCollectionRemoteApplications(PanelRequest.ItemID, collection.Name);
var remoteApp = applications.Where(x => x.DisplayName.Equals(PanelRequest.ApplicationID, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var collectionUsers = ES.Services.RDS.GetRdsCollectionUsers(PanelRequest.CollectionID);
var remoteApp = applications.Where(x => x.Alias.Equals(PanelRequest.ApplicationID, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var organizationUsers = ES.Services.Organizations.GetOrganizationUsersPaged(PanelRequest.ItemID, null, null, null, 0, Int32.MaxValue).PageUsers;
var applicationUsers = ES.Services.RDS.GetApplicationUsers(PanelRequest.ItemID, PanelRequest.CollectionID, remoteApp);
locCName.Text = collection.Name;
locAppName.Text = remoteApp.DisplayName;
litCollectionName.Text = collection.Name;
txtApplicationName.Text = remoteApp.DisplayName;
var remoteAppUsers = organizationUsers.Where(x => applicationUsers.Contains(x.DomainUserName));
users.SetUsers(collectionUsers.Where(x => applicationUsers.Contains(x.SamAccountName)).ToArray());
users.SetUsers(remoteAppUsers.ToArray());
}
}
private bool SaveApplicationUsers()
{
try
{
var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
var applications = ES.Services.RDS.GetCollectionRemoteApplications(PanelRequest.ItemID, collection.Name);
var remoteApp = applications.Where(x => x.Alias.Equals(PanelRequest.ApplicationID, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
remoteApp.DisplayName = txtApplicationName.Text;
ES.Services.RDS.SetApplicationUsers(PanelRequest.ItemID, PanelRequest.CollectionID, remoteApp, users.GetUsers().Select(x => x.AccountName).ToArray());
}
catch (Exception ex)
{
ShowErrorMessage("REMOTEAPPUSERS_NOT_UPDATED", ex);
return false;
}
return true;
}
protected void btnSave_Click(object sender, EventArgs e)
{
if (!Page.IsValid)
@ -62,17 +83,19 @@ namespace WebsitePanel.Portal.RDS
return;
}
try
{
var collection = ES.Services.RDS.GetRdsCollection(PanelRequest.CollectionID);
var applications = ES.Services.RDS.GetCollectionRemoteApplications(PanelRequest.ItemID, collection.Name);
var remoteApp = applications.Where(x => x.DisplayName.Equals(PanelRequest.ApplicationID, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
ES.Services.RDS.SetApplicationUsers(PanelRequest.ItemID, PanelRequest.CollectionID, remoteApp, users.GetUsers().Select(x => x.AccountName).ToArray());
SaveApplicationUsers();
}
Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "rds_collection_edit_apps", "CollectionId=" + PanelRequest.CollectionID, "ItemID=" + PanelRequest.ItemID));
}
catch (Exception)
protected void btnSaveExit_Click(object sender, EventArgs e)
{
if (!Page.IsValid)
{
return;
}
if (SaveApplicationUsers())
{
Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "rds_collection_edit_apps", "CollectionId=" + PanelRequest.CollectionID, "ItemID=" + PanelRequest.ItemID));
}
}
}

View file

@ -40,67 +40,94 @@ namespace WebsitePanel.Portal.RDS {
protected global::System.Web.UI.WebControls.Localize locTitle;
/// <summary>
/// messageBox control.
/// litCollectionName control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
protected global::System.Web.UI.WebControls.Literal litCollectionName;
/// <summary>
/// locCollectionName control.
/// SimpleMessageBox1 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locCollectionName;
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox SimpleMessageBox1;
/// <summary>
/// locCName control.
/// tabs control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locCName;
protected global::WebsitePanel.Portal.RDS.UserControls.RdsServerTabs tabs;
/// <summary>
/// locApplicationName control.
/// secRdsApplicationEdit control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locApplicationName;
protected global::WebsitePanel.Portal.CollapsiblePanel secRdsApplicationEdit;
/// <summary>
/// locAppName control.
/// panelRdsApplicationEdit control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locAppName;
protected global::System.Web.UI.WebControls.Panel panelRdsApplicationEdit;
/// <summary>
/// UsersPanel control.
/// locLblApplicationName control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlGenericControl UsersPanel;
protected global::System.Web.UI.WebControls.Localize locLblApplicationName;
/// <summary>
/// locUsersSection control.
/// txtApplicationName control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locUsersSection;
protected global::System.Web.UI.WebControls.TextBox txtApplicationName;
/// <summary>
/// valApplicationName control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.RequiredFieldValidator valApplicationName;
/// <summary>
/// secRdsApplicationUsers control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secRdsApplicationUsers;
/// <summary>
/// panelRdsApplicationUsers control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Panel panelRdsApplicationUsers;
/// <summary>
/// users control.
@ -112,21 +139,12 @@ namespace WebsitePanel.Portal.RDS {
protected global::WebsitePanel.Portal.RDS.UserControls.RDSCollectionUsers users;
/// <summary>
/// btnSave control.
/// buttonPanel control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnSave;
/// <summary>
/// valSummary control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.ValidationSummary valSummary;
protected global::WebsitePanel.Portal.ItemButtonPanel buttonPanel;
}
}

View file

@ -42,7 +42,7 @@
<asp:TemplateField meta:resourcekey="gvUserName" HeaderText="gvUserName">
<ItemStyle Width="30%" Wrap="false"/>
<ItemTemplate>
<asp:Literal ID="litUserName" runat="server" Text='<%# string.Format("{0}\\{1}", Eval("DomainName"), Eval("UserName")) %>'/>
<asp:Literal ID="litUserName" runat="server" Text='<%# Eval("UserName") %>'/>
<asp:HiddenField ID="hfUnifiedSessionId" runat="server" Value='<%# Eval("UnifiedSessionId") %>'/>
</ItemTemplate>
</asp:TemplateField>

View file

@ -153,4 +153,7 @@
<data name="headerAddApps.Text" xml:space="preserve">
<value>Available Remote Applications</value>
</data>
<data name="lnkDisplayName" xml:space="preserve">
<value>ShowProgressDialog('Loading ...');</value>
</data>
</root>

View file

@ -24,16 +24,11 @@
<ItemStyle Width="90%" Wrap="false">
</ItemStyle>
<ItemTemplate>
<asp:Literal ID="litDisplayName" runat="server" Text='<%# Eval("DisplayName") %>'></asp:Literal>
<asp:hyperlink id="lnkDisplayName" meta:resourcekey="lnkDisplayName" runat="server" Text='<%# Eval("DisplayName") %>' NavigateUrl='<%# GetCollectionUsersEditUrl(Eval("Alias").ToString()) %>'/>
<asp:HiddenField ID="hfFilePath" runat="server" Value='<%# Eval("FilePath") %>'/>
<asp:HiddenField ID="hfRequiredCommandLine" runat="server" Value='<%# Eval("RequiredCommandLine") %>'/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:hyperlink id="lnkUsers" meta:resourcekey="lnkUsers" runat="server" NavigateUrl='<%# GetCollectionUsersEditUrl(Eval("DisplayName").ToString()) %>'>Users</asp:hyperlink>
</ItemTemplate>
</asp:TemplateField>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />

View file

@ -113,8 +113,8 @@ namespace WebsitePanel.Portal.RDS.UserControls
var sessionHosts = ES.Services.RDS.GetRdsCollectionSessionHosts(PanelRequest.CollectionID);
var addedApplications = GetApps();
var displayNames = addedApplications.Select(p => p.DisplayName);
apps = apps.Where(x => !displayNames.Contains(x.DisplayName)).ToList();
var aliases = addedApplications.Select(p => p.Alias);
apps = apps.Where(x => !aliases.Contains(x.Alias)).ToList();
if (Direction == SortDirection.Ascending)
{
@ -132,7 +132,7 @@ namespace WebsitePanel.Portal.RDS.UserControls
foreach (var host in sessionHosts)
{
if (!requiredParams.Contains(string.Format("/v:{0}", host.ToLower())))
{
{
var fullRemote = new StartMenuApp
{
DisplayName = string.Format("Full Desktop - {0}", host.ToLower()),
@ -140,6 +140,15 @@ namespace WebsitePanel.Portal.RDS.UserControls
RequiredCommandLine = string.Format("/v:{0}", host.ToLower())
};
var sessionHost = collection.Servers.Where(s => s.FqdName.Equals(host, StringComparison.CurrentCultureIgnoreCase)).First();
if (sessionHost != null)
{
fullRemote.DisplayName = string.Format("Full Desktop - {0}", sessionHost.Name.ToLower());
}
fullRemote.Alias = fullRemote.DisplayName.Replace(" ", "");
if (apps.Count > 0)
{
apps.Insert(0, fullRemote);
@ -201,7 +210,7 @@ namespace WebsitePanel.Portal.RDS.UserControls
RemoteApplication app = new RemoteApplication();
app.Alias = (string)gvApps.DataKeys[i][0];
app.DisplayName = ((Literal)row.FindControl("litDisplayName")).Text;
app.DisplayName = ((HyperLink)row.FindControl("lnkDisplayName")).Text;
app.FilePath = ((HiddenField)row.FindControl("hfFilePath")).Value;
app.RequiredCommandLine = ((HiddenField)row.FindControl("hfRequiredCommandLine")).Value;