This post will show you how to use the Citrix XenApp 6 PowerShell SDK to obtain a list of applications from your XenApp 6 farm. We’ll look at how to do this with using the PowerShell Runspace and how to do this using the Citrix XenApp 6 wrapper assembly. The examples used in this post will be using an ASP.NET website, but the code can be reused in a Windows application, Console application, web service, etc.
Note: Be sure to read the getting started post for information about adding the correct references to your project.
Using the PowerShell Runspace
I added a Web Form to my project named RunSpaceFactory.aspx. Here is what it looks like:
using System.Management.Automation;
using System.Management.Automation.Runspaces;
namespace WebApplication1
{
public partial class RunSpaceFactory : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Runspace rs = RunspaceFactory.CreateRunspace();
rs.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = rs;
PSSnapInException ex;
rs.RunspaceConfiguration.AddPSSnapIn("Citrix.XenApp.Commands", out ex);
ps.AddCommand("Get-XAApplication");
// You can add a search string like this:
// ps.AddCommand("Get-XAApplication").AddParameter("BrowserName", "n*");
foreach (PSObject app in ps.Invoke())
{
Response.Write(app.Properties["DisplayName"].Value);
Response.Write("");
}
rs.Close();
}
}
}
Lines 10 – 14 are standard PowerShell things you would do to work with PowerShell in any C# application.
Line 17 adds the Citrix PowerShell SnapIn to the Runspace so we can execute the Citrix commands.
Lines 19 – 28 lists all the applications in the XenApp 6 farm.
Note line 21 & 22. If line 22 was uncommented, this excerpt would list all the applications that start with the letter ‘n’ by adding a parameter to the Get-XAApplication command. You can use any matching pattern here like ‘%o*’ which would get all applications whose second letter is ‘o’.
Using the Citrix XenApp 6 Wrapper Assembly
When using the Citrix XenApp 6 wrapper assembly, you first need to add references to the appropriate DLLs to your project. The DLLs can be found in %ProgramFiles%\Citrix\XenApp Server SDK\bin
After adding the references, here is the code to accomplish the same task from above:
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using Citrix.Management.Automation;
using Citrix.XenApp.Sdk;
using Citrix.XenApp.Commands;
namespace WebApplication1
{
public partial class ListApplications : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
GetXAApplicationByName apps = new GetXAApplicationByName();
apps.BrowserName = new string[] {"*"};
foreach (PSObject _app in CitrixRunspaceFactory.DefaultRunspace.ExecuteCommand(apps))
{
XAApplication app = (XAApplication)_app.BaseObject;
Response.Write(app.BrowserName);
Response.Write("");
}
}
}
}
As you can see, there is quite a bit less code here.
Line 14 sets up all your Runspace stuff and adds the appropriate command.
Line 15 adds a parameter to the command. This is an interesting line because the BrowserName property expects an array of strings. I’m just passing one string here, but you could pass several to match. For example, string[] {“n”, “%o”} would find all apps that either started with the letter ‘n’ or the second letter was ‘o’.
We loop through the results in lines 18 – 24. Note that I cast the PSObject (generic PowerShell object) to a XAApplication object. This helps with the type safety and IntelliSense. To be fair, you can do the exact same thing in the PowerShell Runspace example above if you wanted.
The Results
Here is what the Citrix Delivery Services Console looks like concerning published applications:
Here is the output from both examples:
What’s Next?
The next examples will show you how to publish and application as well as how to manage sessions. You can also get a jump start by downloading the example code below: