• View Communities
    • Citrix Developer Network
      The place for unfiltered straight talk on Citrix products. Blogs, code downloads, best practices, APIs, and more can all be found here.
    • Citrix Ready Community Verified
      Does it work with Citrix? Application compatibility questions are a thing of the past with the new Citrix Community Verified site.
    • Blogs
      Learn the latest from the Citrix employees who are building application delivery infrastructure technologies.
    • Blogosphere
      The Citrix Blogosphere is a window into the thousands of conversations taking place about Citrix and Application Delivery.
  •  Sign In
The Citrix Blog
The Citrix Blog
Latest insights from Citrites into our products, technology, and culture
Permalink | Twitter Post to Twitter | Comments (0) | Views (116) |

posted by Craig Ellrod

Custom Load balancing allows you to distribute client requests across multiple servers and optimize resource utilization. Load balancers improve server fault tolerance and end-user response time. In a scenario with a limited number of servers providing service to a large number of clients, a server can become overloaded and degrade server performance. Load balancing is used to prevent bottlenecks by forwarding the client requests to the servers best suited to handle them. Thus, balancing the load.

Load balancers are logically located between the client and the server farm. Load balancing is used to manage traffic flow to the servers in the server farm. The network diagram shows the topology of a basic load balancing configuration. Load Balancing can be performed on HTTP, HTTP, SSL, FTP, TCP, SSL_TCP, UDP, SSL_BRIDGE, NNTP, DNS, ANY, SIP-UDP, DNS-TCP, and RTSP.

Load balancing uses a number of algorithms, called load balancing methods, to determine how to distribute the load among the servers. When a load balancer is configured to use a custom load balancing method, it calculates a load metric for the servers (N) based on server CPU usage, memory and/or response time.

The following example shows how a Load Balancer works using the custom method. The load balancer selects the server by using the value (N) of the following expression:
N = A custom metric calculated on the server for CPU Usage, memory and/or response time.

  • Server-1 is using 20 MB of memory.
  • Server-2 is using 70 MB of memory.
  • Server-3 is using 80 MB of memory.

The requests are delivered as follows:

  • Server-1 receives the first, second, third, fourth and fifth request because it has the lowest N value.
  • Server-1 and Server-2 then have the same N value, so round robin is performed. Server-2 receives the sixth request, Server-1 receives the seventh request.
  • Server-1, Server-2, Server-3 then have the same N value, so round robin is performed.

Whether it's load balancing XenApp Web Interface, iPhone/iPad resources, websites, linux servers, windows servers, e-commerce sites, or enterprise applications, NetScaler is the perfect choice. NetScaler, available as a network device or as a virtualized appliance, is a web application delivery appliance that accelerates internal and externally-facing web application up to 5x, optimizes application availability through advanced L4-7 traffic management, increases security with an integrated application firewall, and substantially lowers costs by increasing web server efficiency.

Citrix NetScaler is a comprehensive system deployed in front of web servers that combines high-speed load balancing and content switching with application acceleration, highly-efficient data compression, static and dynamic content caching, SSL acceleration, network optimization, application performance monitoring, and robust application security.

Available as a virtual machine, the NetScaler is perfect for load balancing virtual servers in the datacenter or in the cloud.

Read more here.

Its powerful!

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (121) |

posted by Craig Ellrod

Load balancing uses a number of algorithms, called load balancing methods, to determine how to distribute the load among the servers. When a Load balancer is configured to use the token method, it selects a server based on the value of a token extracted from the client request. You can configure the location and size of the token. For subsequent requests with the same token,the load balancer chooses the same server that handled the initial request. As you can imagine, this provides a level of persistence for the client requests.

The following example shows how a Load Balancer works using the token method:

  • Requests with "AA" in the URL are sent to Server-1.
  • Requests with "BB" in the URL are sent to Server-2.
  • Requests with "CC" in the URL are sent to Server-3.

Whether it's load balancing XenApp servers, iPhone/iPad resources, websites, linux servers, windows servers, e-commerce sites, or enterprise applications, NetScaler is the perfect choice. NetScaler, available as a network device or as a virtualized appliance, is a web application delivery appliance that accelerates internal and externally-facing web application up to 5x, optimizes application availability through advanced L4-7 traffic management, increases security with an integrated application firewall, and substantially lowers costs by increasing web server efficiency.

Citrix NetScaler is a comprehensive system deployed in front of web servers that combines high-speed load balancing and content switching with application acceleration, highly-efficient data compression, static and dynamic content caching, SSL acceleration, network optimization, application performance monitoring, and robust application security. Available as a virtual machine, the NetScaler is perfect for load balancing virtual servers in the datacenter or in the cloud.

Read more here.

Its powerful!

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (375) |


The recent release candidates for Citrix XenClient come with an experimental feature known as Secure Application Sharing.  It's also been referred to as seamless applications.  So what exactly is it, and how can you use it to be even more productive with XenClient?

Imagine you have your customized personal VM running on XenClient with all your favorite personal apps running.  And you also have a business VM running at the same time that has all your work documents.  Your company has strict policies that you cannot run or store personal applications and data in this business environment.  But, you want flexibility.  You want to be able to work as you want, as you please, and be productive at the same time - you want the XenClient formula of Flexibility, Security and Performance. 

Enter Secure Application Sharing capability of Citrix XenClient.  This capability allows you to securely subscribe to applications published by other VMs.  It's a complete self-service model that uses Citrix Dazzle.  See the user guide on how to set it up.

Take the picture below.

The "active focus VM" here is your customized personal VM, and "Business 1" and "Business 2" are the VMs that your IT department has given to you - and that you downloaded from the Citrix Synchronizer, correct?  These business VMs are enabled to publish business applications installed on them locally, and you subscribe to them from your personal VM using Citrix Dazzle.  All you need to do is enable "Subscribe to Applications" in the experimental tab of your personal VM settings.  Once subscribed, you can start the subscribed business applications right from your personal VM, and they will securely (and seamlessly) be displayed and interacted with in your personal VM.  Note, they will run locally in the VM that published them, in this case your business VMs. 

Now, what if you were completely immersed in the Citrix experience and had applications streamed to your business VMs?  No problem.  This "double-hop" scenario is supported as well.  The applications could have been hosted, and that would also work just great.

And, as a very effective presenter puts it, "one last thing".  Don't like the color and width of the border of the published applications in your customized personal environment?  You can change that in 3 simple steps.

  1. In the publishing VM, start registry editor and navigate to  HKLM\Software\Citrix\PortICA\Border on a 32-bit OS VM or HKLM\Software\Wow6432Node\Citrix\PortICA\Border on a Windows 7 64-bit VM.
  2. Change the color to what you like (Blue, Green or Red) to FF, and change the width to a value greater than 0.
  3. Reboot your publishing VM.

Give Secure Application Sharing a try, and head over to the support forums to discuss this great capability.  And don't forget to tweet about it when you use Secure Application Sharing (maybe via a published twitter application?).

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (142) |

posted by Craig Ellrod

Load balancing uses a number of algorithms, called load balancing methods, to determine how to distribute the load among the servers. When a Load balancer is configured to use the least packets method, it selects the service with the least number transmitted and received packets.

Least Packets Load balancing allows you to distribute client requests across multiple servers to optimize resource utilization. Load balancers improve server fault tolerance and end-user response time. In a scenario with a limited number of servers providing service to a large number of clients, a server can become overloaded and degrade server performance. Load balancing is used to prevent bottlenecks by forwarding the client requests to the servers best suited to handle them. Thus, balancing the load.

In a load balancing setup, the load balancers are logically located between the client and the server farm. Load balancing is used to manage traffic flow to the servers in the server farm. The network diagram shows the topology of a basic load balancing configuration. Load Balancing can be performed on HTTP, HTTP, SSL, FTP, TCP, SSL_TCP, UDP, SSL_BRIDGE, NNTP, DNS, ANY, SIP-UDP, DNS-TCP, and RTSP.

The following example shows how a Load Balancer works using the least packets method. The load balancer selects the server by using the value (N) of the following expression:
N = Sum of the number of packets transmitted and received in last 14 seconds.

The load balancer delivers the requests as follows:

  • Server-3 receives the first request because it has the lowest N value.
  • Server-1 and Server-3 have the same N value, so round robin is performed.
  • Server-1, Server-2 and Server-3 have the same N value, so round robin is performed until one of the N values changes.

Whether it's load balancing XenApp Web Interface, iPhone/iPad resources, websites, linux servers, windows servers, e-commerce sites, or enterprise applications, NetScaler is the perfect choice. NetScaler, available as a network device or as a virtualized appliance, is a web application delivery appliance that accelerates internal and externally-facing web application up to 5x, optimizes application availability through advanced L4-7 traffic management, increases security with an integrated application firewall, and substantially lowers costs by increasing web server efficiency.

Citrix NetScaler is a comprehensive system deployed in front of web servers that combines high-speed load balancing and content switching with application acceleration, highly-efficient data compression, static and dynamic content caching, SSL acceleration, network optimization, application performance monitoring, and robust application security. Available as a virtual machine, the NetScaler is perfect for load balancing virtual servers in the datacenter or in the cloud.

Read more here.

Its powerful!

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (299) |

posted by Laura Whalen


Citrix users and administrators in the Houston area...

There's still time to sign up for tomorrow's Houston Citrix User Group meeting (Thurs., September 9th)!

The goal of a User Group is simple: To foster dialogue and an exchange of ideas within the Citrix community, allowing users and administrators to share information and best practices, hear from the experts, and grow their body of knowledge and expertise.

Date: Sept. 9, 2010 (Thurs.)
Time: 11:30 AM - 2:00 PM CDT

Register Now

Agenda:

Learn more about Citrix products including:

  • What's new with Citrix XenApp
  • Extending desktop virtualization to mobile workers with XenClient

Citrix staff will be available for questions and answers after the meeting.

Attend and you could win an iPad!

Location:

Dave & Buster's Houston
6010 Richmond Ave
Houston TX 77057
(713) 346-0706

Register Now!

If you are located in or around Houston, TX, I hope you can attend! Stay tuned to the Citrix User Group Community site for news and information about upcoming meetings and activities.

Laura Whalen
Citrix Systems, Inc.
Follow me on Twitter

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (418) |

posted by Chris Fleck

If you are interested in learning how to utilize Citrix Receiver for iPhone & iPad to deliver enterprise apps at your organization, don't miss my Webinar:

Thursday 9/9/10 1:00-2:00 EST

Some of the topics I cover will include: 

The Citrix Receiver solution offering

Why consider Receiver
Benefits vs alternatives


Methods to optimize existing apps and build mobile applications including:
Making existing apps Mobile-Friendly
Using existing no code tools to build apps
Custom apps that run on any mobile
PowerGadgets for XenApp Mobile App Creator demonstration

Top user issues and how to deal with them

Top Admin issues with tips and resources

Future mobility plans

Register here:

https://www1.gotomeeting.com/register/780012929

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (315) |

posted by Laura Whalen

Citrix, AppSense, Wyse, Microsoft and Dell invite you to the next Phoenix Citrix User Group Meeting on Thursday, Sept. 9th, and there's still time to register!

There will be plenty of technical content, networking, Q&A with the experts and... indoor kart racing!

Date: Sept. 9, 2010 (Thurs.)
Time: 12:00 PM to 4:00 PM

Register Now!

Location

F1 Race Factory
317 South 48th St
Phoenix, AZ 85034
http://www.f1racefactory.com/

Agenda

The vendors will deliver great content and provide full working demos to make this a highly technical and interactive user group meeting.

Lunch will be provided. Be sure to get there early & claim a good seat to enjoy an afternoon of emerging technologies, customer use cases and interactive demos. See how these market leaders can help you deliver unbeatable desktop solutions for your user base. You'll get case studies of successful implementations, best practices, technical demos and architecture designs from Citrix, AppSense, Microsoft, Dell and Wyse.

Once we saturate your brains with content, feel free to stick around and do a little bit of racing, networking, and Q&A with the experts!

For more details and to register, click here.

If you're in or around the Phoenix area, you won't want to miss it! Stay tuned to the Citrix User Group Community site for news and information about upcoming meetings and activities.

Laura Whalen
Citrix Systems, Inc.
Follow me on Twitter

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1319) |

posted by Natalie Lambert

In case you missed it, today Citrix and Cisco announced a desktop virtualization solution called the Cisco Desktop Virtualization Solution with Citrix XenDesktop. This solution will make it easier and more cost effective for businesses to deploy high-definition virtual desktops to all users enterprise-wide. While this solution will be very exciting for large customers looking to truly embrace desktop virtualization, that is not what excites me.

First of all, my responsibility at Citrix is to build key product specific (XenDesktop) alliances. So, when Cisco came to us saying that their customers were asking them to support Citrix XenDesktop on Cisco UCS, I will admit that I was surprised (as was my colleague Harry) and even a bit skeptical - not because customers wanted XenDesktop, but because I always saw VMware as the major virtualization partner for Cisco. Anyway, in our first conversation with Cisco, I needed to make sure that Cisco, a networking company, even understood the desktop market. To my surprise, our visions were perfectly aligned: users should be able to work from anywhere, anytime, using any device, while getting the same rich experience they would in the office. Fast forward a couple of months...we are together today.

On the surface, this is a fairly standard announcement. You've probably seen a dozen vendors announce joint solutions with reference architectures. I'd argue this one is different. It goes one step further and provides a single support number to call for support. But I digress. The big deal here is under the surface. The more savvy readers won't see a joint solution. They'll recognize Cisco doing what Cisco does best - identifying the market trends and then working with leaders to drive them mainstream. Don't believe me? Then consider this...

Cisco has an amazing history of catching market trends right before they take off. Let's take a quick look at their track record:

1. From connectivity to communications - Cisco caught the voice transition as it went from analog to IP
2. From communications to collaboration - Cisco then capitalized on unified communications as the voice market transitioned
3. From collaboration to telepresence - Arguably its new hallmark, Cisco is now the king of video and high-def conferencing

And those are just the obvious ones. Cisco has also dominated transitions around security, wireless, and mobility. It's arguably the largest vendor in every one of these categories. Most recently, their entrance into the converged infrastructure market, going toe to toe with the largest players in that market - and doing well! When Cisco decides to enter a market, they do it with the goal of becoming No. 1. So far, my hat goes off to them.

But, the desktop market is different as every enterprise has a unique set of users that have very unique computing needs - as we all know, it is not a market where a one-size-fits-all solution will work. Simply entering the desktop virtualization market with a VDI offering was not going to cut it. Cisco knew this because their customers were not telling them to just create a desktop virtualization solution, but instead to partner with Citrix to create an integrated solution that brought together Cisco UCS and Citrix XenDesktop. To us, this is a big deal. Why? Because as I said above, Cisco catches trends as they are about to take off and partners with the best providers to capitalize on the new market. To be the chosen solution that Cisco goes to market with for desktop virtualization says two key things to me:

1. That desktop virtualization is hitting mainstream...and fast
2. Citrix has the market leading solution to transform the enterprise computing market

We expect our joint solution - which combines the Cisco Unified Computing Systems (UCS) platform with Citrix XenDesktop software to provide the desktop and application virtualization technologies - to help customers looking for a turnkey desktop virtualization solution get up and running quickly. But more is coming, both with Cisco and with our other partners. Together, we all have two things in common: 1) the desire to make enterprise computing more flexible and 2) the belief that the desktop virtualization market transition is the key.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (1301) |

posted by Raj Dhingra


Today, Citrix and Cisco announced a new strategic partnership to deliver an exciting and innovative joint solution for comprehensive desktop virtualization.  The new offering combines all the benefits of Citrix XenDesktop, with all the power of the Cisco Unified Computing System (UCS) to accelerate the enterprise-wide adoption of virtual desktops and apps; by making them easy to deploy, easy to support and easy to scale.

 Earlier this year, I wrote about how 2010 would be a landmark year for the mainstream adoption of desktop virtualization.  Since then, there have been huge advancements in desktop virtualization technologies as well as in simplicity, flexibility, deployability and economics.  Today's announcement underscores the growing momentum of desktop virtualization by having two industry leaders partner on delivering a combined solution that delivers a high definition user experience and superior scalability and cost savings for IT.

"TAILWINDS" - ACCELERATING MOMENTUM FOR CITRIX XENDESKTOP

As a frequent air-traveler, I welcome "tailwinds", since they get to me to my destination much sooner.

In 2010, there are a powerful set of market forces, that like "tailwinds" are adding to the rapidly growing popularity of desktop virtualization. Increasing user mobility combined with an explosion of mobile devices (laptops, smartphones, tablets etc.) is transforming how, where and when we work. These external forces are increasing enterprise velocity for "Going virtual" to deliver desktops and apps. "Going virtual" means ultimate flexibility for users - work from anywhere, any device and with a HD user experience. At the same time, "Going virtual" means ultimate control for IT-- control desktops and apps centrally, simplify updates/patches once for all users and adapt to adds/moves/changes in minutes.

This year, Citrix XenDesktop has gained momentum and further strengthened its leadership in the very hot market for desktop virtualization. XenDesktop  has won many prestigious awards  and is the only product with the 100% Burton Group Enterprise Ready certification. With over 3 million seats sold in the first six months of 2010 and production deployments in more than half of the Fortune 100, it has also become the clear #1 market share leader.

This new partnership between Citrix and Cisco adds to the "tailwinds", further growing and accelerating the desktop virtualization market by leveraging the strengths of two industry leaders; and furthering XenDesktop leadership in the industry.

JOINT SOLUTION TO ADDRESS CUSTOMER DEMAND

As customers of all sizes move to desktop virtualization enterprise-wide, they are increasingly asking for simpler and more scalable solutions.  The new Cisco Desktop Virtualization Solution with Citrix XenDesktop is the direct result of customers asking for an integrated solution based on XenDesktop. It is the first to combine software, hardware and support giving IT organizations an easy way to accelerate the adoption of desktop virtualization. Because it's based on XenDesktop, it goes beyond VDI to deliver any mix of virtual desktops/apps via Flexcastâ„¢, to any device, with a brilliant HD user experience. And because it incorporates the innovative new Cisco UCS platform, it features a highly efficient datacenter infrastructure that's scalable, cost-effective and perfectly suited for desktop virtualization.  

Key highlights of the joint solution:

  • Pre-configured service profiles  for hosted shared and hosted VDI desktops to speed setup and deployment
  • Simplified packaging to get started with the first 300 desktops; expansion packs to scale to tens of thousands of desktops in a plug-n-play, modular fashion
  • Cisco validated design and reference architecture based on joint interoperability and scalability testing to accelerate enterprise-wide implementations
  • Single support number to provide a smooth customer experience

The new solution features the advanced I/O and extended memory management capabilities of the Cisco UCS system, making it very suitable for desktop virtualization, especially memory-intensive VDI-based desktops running Windows 7. In this type of scenario, UCS can deliver 60% greater user density per server compared to other comparable platforms, resulting in 20% lower cost of server and network infrastructure per user.

GOOD NEWS FOR CUSTOMERS

For the first time, customers have a comprehensive desktop virtualization solution that combines market leading software and hardware, a complete set of deployment templates, starter kits, expansion packs, validated reference architectures ... all with a single number to call for support. This dramatically simplifies the process of deploying, configuring, supporting and scaling desktop virtualization enterprise-wide.

The solution leverages XenDesktop's open architecture, making it easy for customers to take advantage of their existing infrastructure investments in storage, hypervisors and desktop management. With XenDesktop, customers can integrate their desktop virtualization deployments with Citrix XenServer, Microsoft Hyper-V, App-V and Systems Center. In addition, the solution supports all of the 10,000 Citrix Ready products currently verified to work with XenDesktop - including security products, peripherals and end-point devices.

Such a partnership makes desktop virtualization easier to deploy, support and scale. It increases customer confidence and expands choice.

When customers win, we all win.

Citrix and Cisco will bring the joint solution to market through selected partners and an extensive go-to-market strategy.

Best Regards

Raj Dhingra

GM, Desktop Virtualization.

RELATED LINKS:

View video: http://www.youtube.com/watch?v=dacwQeZnSZg

For more information on the joint solution, visit http://www.citrix.com/cisco.

For current Citrix channel partners interested in selling the the joint solution, visit http://www.citrix.com/ciscochannel.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (1) | Views (2258) |

posted by Harry Labana

Uhh.... what!?

Is probably the first reaction that most people will have when they first read about the newly formed partnership between Citrix and Cisco collaborating to combine all the benefits of Citrix XenDesktop, with all the power of the Cisco Unified Computing System (UCS). Well at least that was my instinctive reaction when I first heard the idea proposed internally followed by um, what does this mean for the Citrix and Microsoft relationship?

The Citrix-Microsoft relationship, now what?

Well having been through this thought process a few times, and given that there will be a lot more detail published on the solution specifics. Let me instead add some color on why, and also explain why I am so excited to be working strategically with Cisco.

I'll begin with an observation. When I joined Citrix just over a year ago, a key industry question was who is the leader in desktop virtualization? To answer that, the best way would be to simply put our heads down and get on with it, focus on our customers and innovate in our product portfolio. Another key element was how we would extend the Microsoft solution set as part of our desktop virtualization offerings. A year later, I am pleased to be able to say that we have achieved measureable success, substantially evolved our Microsoft partnership and are clearly the leader in desktop virtualization. As a result our customers are unequivocally telling their technology providers who they should be working with to help them in their journey as they implement desktop virtualization at scale. This puts a lot of pressure on Citrix to help them be successful. So partnering with others both large and small is a critical component of our strategy to take desktop virtualization mainstream.

Partnering is a natural act for Citrix, as we have demonstrated for over 20 years with Microsoft. It was natural to partner with the leader in OS and Apps, even when it seemed that we overlapped. As we continue to work with Microsoft, our combined reach and unique relationship will further enable solutions for our mutual customers.

Now it also makes sense to partner with the leader in Networking to bring it all together for desktop and application virtualization. Our goal is to make desktop virtualization easier and more affordable for customers to adopt, making it simpler to manage a mix of both physical and virtual desktops.

What did Cisco and Citrix do to deliver this combined solution? Any special product integration?

To deliver this, Citrix and Cisco collaborated using Cisco UCS and creating pre-configured system profiles based on Citrix' Hosted Shared and Hosted VDI FlexCast Delivery Technology, together with, extensive scalability and performance testing and a joint reference architecture. Cisco and Citrix will be offering integrated support services for customers of this solution. It was refreshing to work with a partner who understands VDI alone is not desktop virtualization.

By picking the new joint Cisco-Citrix desktop virtualization solution, customers not only get the benefits of the leading desktop virtualization solution in the market but also get the benefits of the Citrix-Microsoft collaboration, partnership and technology integration.

The ultimate winner is the customer

Desktop virtualization has the potential to reach 100s of millions of corporate desktops. Cisco has done a fantastic job of providing real meaningful differentiation with this offering. Partnerships like this make desktop virtualization easier to deploy, support and scale. They increase customer confidence, reduce risk and expand choice. When customers win... we all win.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (257) |

posted by Tom M Kludy

This blog is intended for programmers who wish to use the XenApp 6 SDK within their programs to configure a farm remotely.

In my last blog, I went over the set-up and usage of the XenApp 6 SDK for scripters who wish to use the commands remotely. Today I'll cover the same scenario, but used within a .NET program that invokes the SDK.

Let's review the steps for programmatically invoking a cmdlet locally:

  1. Create a Runspace with the relevant snap-ins loaded.
  2. Create a Pipeline within the Runspace.
  3. Add individual commands or a script to the Pipeline.
  4. Invoke the Pipeline.
  5. Convert the output objects back into concrete .NET types.

The sequence is almost identical for invoking a cmdlet remotely, but there are a few minor differences.

Create the Runspace(Pool) with the snap-ins loaded

Runspaces are somewhat expensive to create, but when you are invoking commands locally, you can simply reuse the same Runspace for the entire lifetime of your program. However when your Runspace is remote, you can run into problems. You may experience a network split or other interruption in communication between the client and the server. When this happens, the Runspace ceases to function. The Runspace class in PowerShell is not capable of automatically correcting itself when a fault occurs, so a program using a remote Runspace needs to be prepared to detect and correct faults itself, by recreating and re-initializing the Runspace. Additionally, if there are many clients connecting to a single server, you can end up with a large number of Runspaces existing on the server, but very infrequently used. This is a waste of resources.

To make this simpler, a program can use a RunspacePool. This is a new PowerShell 2.0 concept that both provides automatic correction of faults (by recreating Runspaces), and also provides Runspace pooling so that when Runspaces are not in use they can be destroyed and recreated as necessary. It is recommended that programs using PowerShell remoting should utilize RunspacePools instead of Runspaces for these reasons.

Within the Citrix.Management.Automation.dll assembly introduced in the previous XenApp 6 SDK - Programming with .NET blog, you can find a method called CitrixRunspaceFactory.CreateRunspacePool(string serverName). The serverName parameter is the name of the server on which to create the runspace.

Important Note: this method is currently hardcoded to not validate the server's SSL certificate. This is unfortunate; in a future revision, these methods will have an option to fully validate the SSL certificate. However, for now, if you are not using a self-signed certificate and want to create a secure remote RunspacePool, add this method to your program and use it rather than CitrixRunspaceFactory.CreateRunspacePool():

/// <summary>
/// Create a runspace pool where Citrix commands will manage a remote server.
/// Note: ONLY Citrix commands can execute in this runspace, as it is restricted.
/// </summary>
/// <param name="serverName">Name of the server to manage</param>
/// <returns>A runspace pool active on the server</returns>
public static RunspacePool CreateRunspacePool(string serverName)
{
var cinfo = new WSManConnectionInfo(
new Uri("https://" + serverName + ":5986"),
"http://schemas.microsoft.com/powershell/CitrixXenAppCommands",
(PSCredential)null)
{
AuthenticationMechanism = AuthenticationMechanism.NegotiateWithImplicitCredential,
NoMachineProfile = true,
UseCompression = true,
};
var runspacePool = RunspaceFactory.CreateRunspacePool(1, 10, cinfo);
runspacePool.Open();
return runspacePool;
}

Once again, I apologize for the lack of indentation; this seems to be a limitation of this blog portal.

Create a pipeline (PowerShell class) that uses your RunspacePool

Once you have a RunspacePool, you can attach that to another new PowerShell 2.0 class named PowerShell. This class takes the place of the Pipeline class that is used with a Runspace. The PowerShell class has a property named RunspacePool which can be set to the RunspacePool that you created.

PowerShell ps = PowerShell.Create();
ps.RunspacePool = runspacePool;

Add individual commands (or a script) to the pipeline

This is very similar to using the Pipeline class with a Runspace:

ps.Commands.Add(command);

The "command" object can be created using the classes in the Citrix.XenApp.Sdk.dll assembly as explained in the previous blog. For example:

var getFarm = new GetXAFarm();
Command command = getFarm.Command;

A limitation to be aware of here is that, due to the way that PowerShell serializes types, the InputObject parameter on most XenApp SDK commands will not function properly when remoting the command.

Invoke the pipeline

Again, very similar to the Pipeline class:

var output = ps.Invoke();

Objects can be passed into the Invoke() method; these objects will be serialized and sent into the Pipeline in the server's Runspace. XenApp SDK commands are capable of using these serialized objects the same as if they were the "real" object instances.

Convert the output objects back into concrete .NET types

This is one of the most difficult aspects of using PowerShell remoting within a program. The problem is that PowerShell does not actually create the objects on the client using the original type. Instead, it fabricates new dynamic types that have all of the same properties and methods, with the former accessed from the PSObject "property bag" and the latter implemented as proxies to the actual object instance on the server side. This means that a simple cast of the PSObject.BaseObject property will not succeed.

To make matters more difficult, only simple types are remoted with the actual type intact. Enums and complex types are converted to strings using the value's ToString() method; arrays are converted to arrays of strings using each array element's ToString() method. Doing the necessary conversion back to concrete types is quite complex.

We have done what we could to make this process easier. First of all, we have eliminated the use of complex types as property values in all of the XenApp SDK object types, whenever possible. Secondly, we have provided comprehensive "type-rebuilder" logic within Citrix.Management.Automation.dll. The same extension method we mentioned before on PSObject - ConvertTo<T>() - is capable of transforming the dynamic types that come out of PowerShell remoting back into the concrete XenApp types.
The bottom line is that, for most purposes, the best way to handle the output objects when using PowerShell remoting is to use the ConvertTo<T>() method.

XAFarm xaFarm = farm.ConvertTo<XAFarm>();
Console.WriteLine("FarmName: {0}", xaFarm.FarmName);

As with Runspaces, we have gone one step further to make RunspacePools work with minimal extra code overhead, by adding ExecuteCommand() and ExecutePipeline() methods as extension methods on the RunspacePool type. So you can convert the example from the previous blog into one that works remotely by making only a few minor tweaks:

RunspacePool runspacePool = CreateRunspacePool(server);
var apps = runspacePool.ExecuteCommand(new GetXAApplicationByName();
foreach (var app in apps)
{
Console.WriteLine("DisplayName: {0}", app.DisplayName);
}

Local RunspacePools and remote Runspaces

To avoid having to have different code paths for local vs remote SDK usage, Microsoft has added the ability to have local RunspacePools and remote Runspaces.

Local RunspacePools have no real runtime benefit over local Runspaces when using the XenApp SDK, but to make code more consistent you can use the CitrixRunspaceFactory.DefaultRunspacePool property to obtain a local RunspacePool with the Citrix snap-ins loaded. You can then use the RunspacePool the same as you would with a remote RunspacePool.

Although remote Runspaces present a few difficulties in their use (fault tolerance, etc), you can create one. There is a method called CitrixRunspaceFactory.CreateRemoteRunspace(string serverName) available; however, it suffers from the same limitation as the CitrixRunspaceFactory.CreateRemoteRunspacePool(string serverName) method: it does not validate the server's SSL certificate and is therefore insecure. To create a secure remote Runspace, use the following code instead:

/// <summary>
/// Create a runspace where Citrix commands will manage a remote server.
/// Note: ONLY Citrix commands can execute in this runspace, as it is restricted.
/// </summary>
/// <param name="serverName">Name of the server to manage</param>
/// <returns>A runspace active on the server</returns>
public static Runspace CreateRunspace(string serverName)
{
var cinfo = new WSManConnectionInfo(
new Uri("https://" + serverName + ":5986"),
"http://schemas.microsoft.com/powershell/CitrixXenAppCommands",
(PSCredential)null)
{
AuthenticationMechanism = AuthenticationMechanism.NegotiateWithImplicitCredential,
NoMachineProfile = true,
UseCompression = true,
};
var runspace = RunspaceFactory.CreateRunspace(cinfo);
runspace.Open();
return runspace;
}

Final considerations

If your program is using a mixture of commands from the Citrix.XenApp.Commands snap-in and the Citrix.Common.Commands snap-in, you will need to execute the latter within a local runspace. Just as for scripters, the Citrix.Common.Commands cmdlets are not available remotely.

Remote execution of cmdlets is slower than local execution, so if you are converting a program from operating locally to operating remotely, you should expect some reduction in performance.

Remember that programs with restricted execution rights (such as IIS-hosted web services) cannot use PowerShell remoting. We are currently working on a comprehensive fix to this problem.

Just as for scripters, we have put a lot of effort into getting the developer experience for remote PowerShell execution to be as painless as possible. I hope that you, the community of 3rd party developers, can leverage this work to simplify your use of the SDK and successfully leverage it for your programs!

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (431) |


At Citrix Synergy Berlin you will have the opportunity to learn specifics about how to setup your multi-forest domain with Citrix Provisioning Services 5.6 where you have the Provisioning Services infrastructure and target devices in separate forests. Learning labs will guide you through this topic and also other new features of Citrix Provisioning Services 5.6 such as vDisks updates with read-only stores. You will fall in love with its key features and to see how easy is to implement the XenDesktop's Provisioning Services feature in your enterprise environment. Your initial step is to click on the link below and add SYN404D - Operating System delivery to desktops session to your agenda. This is a 3 hour session about the Citrix Provisioning Services and how to simplify your job.

Register for Synergy 2010 Berlin

Session: SYN404D - Operating System delivery to desktops
October 04, 9:00 am - 12:00 pm
October 05, 9:00 am - 12:00 pm
October 07, 2:00 pm - 5:00 pm
October 08, 1:00 pm - 4:00 pm 

Elisabeth Teixeira
Principal Engineer - Worldwide Technical Readiness
Follow Me on twitter: @lizteixeira

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (439) |

posted by John Fanelli

You've probably seen the announcement made today by Cisco and Citrix regarding our partnership and our new desktop virtualization solution.  The "Cisco Desktop Virtualization Solution with Citrix XenDesktop" is a direct result of feedback from both Cisco and Citrix customers.  As Desktop Virtualization goes mainstream and the number of deployed seats increase, the importance of scalability, manageability and, of course, cost increases as well.  Today's announcement contains a number of important aspects to simplify Desktop Virtualization deployments (a starter kit w/expansion packs, validated design reference architecture, single number to call, and services profiles), but the foundation for simplification is the fact that customers now have products built on open architecture from Cisco, NetApp and Citrix available as an combined solution

I am responsible for the the Citrix Ready partner program for Citrix, and I continually hear from customers that they want products that are open and can integrate with existing infrastructure components.  The diversity of apps, devices and infrastructure customers are using with XenDesktop is rich and varied.  That is why Citrix and our partners have put an incredible amount of time and energy to ensure that customers have an equally rich set of resources to verify which apps, devices and infrastructure work with XenDesktop. The Citrix Ready Open Desktop Virtualization Program was launched in support of XenDesktop 4 with over 10,000 products from over 200 vendors certified to work with XenDesktop.  Today, we would like to officially welcome Cisco UCS to the Citrix Ready program (as well as give a tip of the hat to the more than 650 products from greater than 150 companies that have joined the Citrix Ready program since the November 9, 2009 announcement).  Those same customers that requested the solution from Cisco and Citrix due to the massive scalability, HDX Experience and low TCO of the joint solution will also have peace of mind that their current and future Desktop Virtualization deployments will be successful.  The value of the open architecture and an open program means that customers can always be assured that they will have flexibility in using the platform of their choice.

The Citrix Ready Open Desktop Virtualization program uses an extensive blend of vendor testing, third party testing and real-world customer verification to make it easy for customers to join the desktop revolution.  The Open Desktop Virtualization program eliminates the guess work and ensures customers that XenDesktop has been tested to work with the software, hardware and services they already use in their IT environments today. Products that have been verified to work with XenDesktop 4 include thousands of applications, servers, storage systems, backup solutions, client devices, printers, desktop peripherals, security products, desktop management software and systems management solutions.

To learn more about the Open Desktop Virtualization Program, click here.  You can read more about the Cisco and Citrix partnership here, and you can see the new Cisco USC products in the Citrix Ready Open Desktop Virtualization program here

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (359) |

posted by Tom M Kludy

This blog will be of interest to both scripters and programmers who wish to use the XenApp 6 SDK to configure a farm remotely.

By now, those who have been following my blog should have gotten their feet wet in the XenApp 6 PowerShell SDK. But for those familiar with MFCOM, you are probably wondering what happened to a major bit of functionality that MFCOM had: the ability to remotely configure a farm with a script that runs on a different computer. I have alluded to this upcoming blog a few times so I hope people will not be disappointed!

When we started implementing the XenApp 6 SDK, we knew that this would be a major requirement. We also had a very aggressive schedule in which to complete our SDK. At the time, we also knew that Microsoft was planning to introduce automatic remoting capability for PowerShell. Putting 2 + 2 together, we decided to focus on getting the command implementation right, and trust in the availability of PowerShell Remoting to solve the remote management side of things.

Indeed, PowerShell 2.0 was released by the time we shipped the XenApp 6 SDK, and for the most part it does meet the remoting needs of our SDK. It does have a much more complex configuration than we would have hoped, and we did find one major limitation that we unfortunately do not have a good workaround for yet; but overall, PowerShell Remoting delivers a comprehensive remoting capability for the XenApp 6 SDK.

First of all, about the limitation I mentioned: we discovered that PowerShell Remoting does not work when invoked from a service with limited privileges, such as a web service running under the control of IIS. We did not have time to resolve this issue prior to the release of XenApp 6 nor the XenApp 6 SDK. If this is the scenario you are facing, the only workarounds available at the moment are to use the undocumented and unsupported XACOM API, or to write your own elevated service through which you delegate calls to the XenApp SDK. I assure you we will fix this by the next release of XenApp.

The other drawback I mentioned in comparison to MFCOM is the difficulty of configuration. With COM/DCOM, the only thing you needed to do to enable remote management was to add users to the Remote DCOM Users group (or Distributed COM Users group, depending on the version of Windows). Although, in truth, there was quite a bit more that we did under the covers to make sure the experience was good, such as creating firewall exclusion rules to handle MFCOM traffic. However with PowerShell, much more is required:

  1. The server must have the WinRM service enabled and started.
  2. The server's firewall must allow https traffic to pass to the WinRM service.
  3. To secure the client-server communications, the server must have an SSL certificate. This certificate cannot be self-signed without causing a significantly worse user experience for the PowerShell remoting user. (Note: there are ways to avoid having an SSL certificate but it seems that all of these options do not thoroughly secure client-server communications, even if the client and server are in the same domain. Therefore, I will only discuss secure remoting methods that utilize an SSL certificate.)
  4. The server must have an Endpoint configuration with appropriately locked-down configuration.
  5. The client must be able to identify the server through a trusted authority (via the SSL certificate publishing authority).
  6. The client must trust the server.
  7. The client must create a remote session on the server in order to use remoting.

Microsoft recognized that some of these steps are quite complex, so they provide a script with PowerShell 2.0 called Enable-PSRemoting. Although this script will work to enable remoting for PowerShell, and XenApp commands can work within the endpoint configuration that this script creates, it will set up the remoting configuration in a way that is only available to (and only suitable for) local administrators. Since we require support for XenApp administrators who are not also local administrators, we created our own equivalent to this command. Additionally, the configuration that Enable-PSRemoting creates is not secured with an SSL certificate by default, and therefore can be compromised - a configuration we were not willing to support or endorse. As part of the XenApp 6 SDK, we therefore provide a script named Enable-XAPSRemoting that creates a configuration that is XenApp-SDK specific, and does not have these limitations.

Enable-XAPSRemoting does not require you to have run Enable-PSRemoting first. It does require that you have set your PowerShell script execution policy to AllSigned, RemoteSigned, or Unrestricted. If you choose AllSigned you must opt to "[A] Always run" if presented with this question:

Do you want to run software from this untrusted publisher?
File C:\Program Files\Citrix\XenApp Server SDK\Citrix.XenApp.Sdk.ps1 is published by CN="Citrix Systems, Inc.", OU=AVG Bangalore, OU=Digital ID Class 3 - Microsoft Software Validation v2, O="Citrix Systems, Inc.", L=Fort Lauderdale, S=Florida, C=US and is not trusted on your system. Only run scripts from trusted publishers.
[V] Never run [D] Do not run [R] Run once [A] Always run [?] Help (default is "D"):

Prior to running Enable-XAPSRemoting, you must first complete a step for which we cannot provide much assistance: you must install an SSL certificate on the server. Consult Microsoft documentation on deploying a Public Key Infrastructure within your organization, if you don't already have one. You will need a certificate server, and all servers and clients will need to trust that authority. Then that certificate authority can authorize a proper SSL certificate for the server, which the clients and the server will all recognize as being legitimate.

For testing purposes ONLY, we have simplified the process of using a self-signed certificate. This can be used to get a proof-of-concept remoting solution up and running quickly. However, be aware that a self-signed certificate is not secure.

That being said, in case you must use a self-signed certificate for the time being in order to proceed following along with this blog, you can create one easily using the selfssl.exe tool that Microsoft distributes as part of the IIS 6 Resource Kit. This can be downloaded from here. You should run the tool on the server:

selfssl.exe /T /V:365

This will create and install a self-signed certificate valid for 1 year (365 days) and install it into the trusted certificate store on the server.

Of course, if you already have a public key infrastructure in place, save yourself the trouble of changing the certificate later by just creating a valid certificate now and installing it in the server's certificate store.

Once you have the SSL certificate in place, you can run the Enable-XAPSRemoting script.

Enable-XAPSRemoting

This script will prompt you for the SSL certificate to use for the WinRM SSL listener. The one you added above should be visible; choose it. If it is not visible, verify that the certificate is installed correctly using the Certificate Manager tool available in Windows. It should be visible under "Trusted Root Certification Authorities".

Once the script completes, your server will be ready to accept remote connections from local administrators. Of course, as mentioned above, XenApp administrators are not always local administrators, so you also have the ability to open up the remote channel to the XenApp administrators you choose by adding users into the "Citrix Remote PowerShell Users" user security group. If you use Active Directory, it is highly recommended that you create AD group(s) to represent Citrix XenApp administrators and enter those groups both here and in the Administrator configuration in XenApp itself, so that it is simpler to keep the two in sync. (Of course, you may not want to keep these in sync, if you want to limit remote SDK access to a select few.)

It is important to explain the security on the endpoint configuration that the script creates.

  • The users present in the Citrix Remote PowerShell Users group are not automatically granted privileges as XenApp administrators; rather, they are given permission to run the XenApp SDK cmdlets. The cmdlets themselves, and in fact even the back-end storage layer, still validate the identity of the user prior to allowing the user to view or edit data. So, even if the membership of the Citrix Remote PowerShell Users group is wider than the actual set of XenApp Administrators, your farm is still secure.
  • The configuration only allows a very limited subset of commands to be executed remotely; in fact, hardly anything is available except the XenApp commands themselves. This ensures that other installed cmdlets that may not have as deep of a security model are not exposed to users that should not have access to them.
  • The configuration turns off PowerShell language features such as looping constructs. This limits the capability of users from being able to perform denial-of-service attacks using the exposed endpoint.

As you can see, the endpoint we create is as secure as possible. The tradeoff is that the endpoint can be used only for XenApp commands, and only by approved administrators. The endpoint is neither suitable nor intended for usage of other PowerShell commands or snap-ins.

Once the script completes, the server is prepared to accept remote PowerShell connections for the XenApp commands. The next step is to make the client trust the server, so that it will allow you to connect to it. On the client, run this command:

Set-TrustedHosts <server>

This tells PowerShell to trust the specified host. If you want the client to trust any host, you can use "*" for the server name. The client will verify that the host is actually the one you specified by checking the authenticity of its SSL certificate, so make sure that the server name you specify (if not "*") matches the host name in the SSL certificate.

At this point, remoting should be fully operational. To test it out, we will create a remote session and use that to execute commands on the server, from the client. PowerShell has a built-in command called New-PSSession which has all the functionality required; however, it is not very simple to use. We therefore created a simpler version with the most frequently used options, called New-XAPSSession:

$session = New-XAPSSession <server> -SkipCertCheck

The -SkipCertCheck option turns off all SSL certificate checking, and is necessary if you wish to use a self-signed certificate. Of course if you are using a certificate from a trusted issuer (such as from your organization's public key server), you should omit the -SkipCertCheck option.

Within the session that you created, you can execute any Citrix command on the server. For instance:

Invoke-Command -Session $session { Get-XAFarm }

We also expose the Get-Help command within the session, so you can do:

Invoke-Command -Session $session { Get-Help Get-XAFarm }

We do not expose aliases, so you must explicitly use Get-Help rather than the common help alias.

You can also try:

Invoke-Command -Session $session { Get-Command }

This will print out all of the commands that are available through the default XenApp remote PowerShell configuration. You will notice that it only includes commands from the Citrix.XenApp.Commands snap-in; it does not include commands from the Citrix.Common.Commands snap-in, nor any commands capable of interacting with the Citrix.Common.GroupPolicy provider. The reason is that the commands in Citrix.Common.Commands are not remotable even via PowerShell remoting, due to impersonation limitations, and the Citrix.Common.GroupPolicy provider can edit remote GPOs without using PowerShell remoting. You will instead find that both of these snap-ins are installed locally on the client when you install the XenApp SDK.

One final shortcut: if you are only targeting one server from your client, and you want to avoid the Invoke-Command hassle, you can do:

Import-PSSession -Session $session

You'll now find the Citrix commands available within your local PowerShell window, but when you execute them, they automatically execute on the server.

I hope this information helps people get started using PowerShell remoting for the XenApp SDK. Please let me know if you have any questions!

Note for programmers: I will cover the differences when using the XenApp SDK via PowerShell remoting from within a .NET program in my next blog. However the setup steps and capabilities are the same as that used by scripters.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (732) |

posted by Peter Schulz

Workflow Studio 2.5 was released last week and is currently available for download to our customers on MyCitrix. You can get more information and find a link to the download page at http://www.citrix.com/wfs.

This release includes the following new features:

  • Expanded platform support (Windows 7 and Server 2008 R2; SQL 2008; PowerShell 2.0; .NET 4.0)
  • New activity libraries for Hyper-V and SQL
  • Numerous improvements to existing activity libraries
  • Expanded security roles
  • Performance improvements
  • Enhanced usability for workflow properties

The Evaluation Virtual Appliance has not been updated yet, but I will post an update when it is.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (822) |


As you may already know, hosted shared desktops are part of the Citrix FlexCastâ„¢ delivery technology and are ideally suited for subscribers who need a set bundle of applications. Both Citrix and Microsoft have defined SPLA programs that enable a Citrix Service Provider (CSP) to deliver hosted shared desktops from a cloud. Here are the first steps to make it happen in YOUR datacenter.

In this 2-part blog series, I am going to list the 5 steps needed to deliver a hosted shared desktop from a cloud.

The steps below assume that you, as a CSP administrator have the following environment:

  • Access to Active Directory with permissions to join a server to a domain, create OUs, create user & group accounts.
  • A XenApp 6 deployment created by configuring the necessary server roles like License Server, Data-collector, XML-broker and Web Interface.
  • You have one or more XenApp 6 servers that you plan to use to host the desktop sessions. I will refer to these machines as worker machines. Alternatively, you can have an image of a XenApp 6 server that you can use to create virtual worker machines.

To find documentation on how to setup such an environment, check out the Citrix eDocs. In a future blog, I will go over the best practices for setting up such an environment.

Step 1: Register a new tenant with Active Directory
For every tenant, Citrix recommends creating the following objects in Active Directory (in addition to the user objects that represent the tenant's users):

  • An organizational unit (OU) that will contain the user accounts representing the tenant's users.
  • A global group account whose members will be the tenant's users.
  • An organizational unit (OU) that will contain the worker machines reserved for the tenant.
    The purpose of these objects will become clear in the next few steps.

Step2: Enable the Windows 7 desktop experience on worker machines
The default desktop delivered by a XenApp 6 server (or Windows 2008 R2 server) is a desktop intended primarily for an administrator to manage a server. As such, it looks a bit bland, has no support for themes and a number of accessory applications like the Windows Media Player, Snipping tool, Sound recorder etc are not available. See the picture below:

To enable a Windows 7-like experience, Microsoft documentation states that you need to add the Desktop Experience feature to the worker machine (or image). This can be done easily using Server Manager or you can add the lines below to your worker machine preparation script.

import-module ServerManager
Add-WindowsFeature Desktop-Experience

The Windows Desktop experience feature adds support for themes and it also installs the accessory apps that I mentioned above. Once this feature is installed and you reboot the server, you need to start the Themes service (and ensure that its startup type is configured as Automatic). To do this, you can copy the lines below to a script/workflow step that gets invoked after the machine is rebooted during the worker machine (or image) preparation process.

Set-Service -Name Themes -StartupType Automatic
Start-Service Themes

If you were working on an image, you can now create virtual worker machines from this image. Citrix recommends placing all the worker machines that are reserved for a specific tenant in an Active Directory OU created for that tenant (in step 1).

You should also create a GPO that will set a specific theme and wallpaper for all users (assuming for now that all of the tenant's users get the same theme and wallpaper and are not allowed to change this). The PowerShell code for this is shown below. This code creates a domain GPO that sets the theme to the Win7 Basic theme and allows you to specify a path to a wallpaper file that is present on the local server.

import-module grouppolicy
#Create a new domain GPO 
$gpo = new-gpo -name <Name of the GPO>
#Set the policy for Themes
$gpo | Set-GPRegistryValue -Key "HKCU\Software\Policies\Microsoft\Windows\Personalization" 
-Type String -ValueName ThemeFile -Value "%windir%\resources\Ease of Access Themes\basic.theme"
#Set the policy for wallpaper
$gpo | Set-GPRegistryValue -Key "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System" 
-Type String -ValueName WallPaper -Value <path to a local wallpaper file>

Once the GPO is created you can link it with the OU (created in step 1) that contains the tenant's users.

Now, when a user logs in to a hosted desktop, the desktop looks like the picture below. See the difference?

Note: In my testing, I noticed that the wallpaper policy wasn't taking effect. Luckily, Microsoft has already released a hotfix for this issue - KB 977944, which you need to install on the worker machine.

That's it for now. In the 2nd part of this blog, I will go over the XenApp objects that need to be created to deliver a desktop. Stay tuned..

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (469) |

posted by Laura Whalen

Calling all Citrix users and administrators located in or around Dallas, Texas...

There's still time to sign up for the next Dallas Citrix User Group Meeting on Wednesday, September 8th!

Date: Sept. 8, 2010 (Wed)
Time: 11:30 AM - 2:00 PM CDT

The goal of a User Group is simple: To foster dialogue and an exchange of ideas within the Citrix community, allowing users and administrators to share information and best practices, hear from the experts, and grow their body of knowledge and expertise.

Register Now

Agenda:

During this meeting, you'll learn more about Citrix XenDesktop including:

  • Adding XenDesktop to a Citrix XenApp environment
  • Getting a technical overview of Flexcast
  • Discussing a comparison of key features against the competition

Citrix experts will be available for questions and answers after the meeting.

All attendees will receive a TopGolf game card!

Location:

TopGolf Dallas
8787 Park Lane
Dallas TX 75231
(214) 341-9655

Register Now

If you are located in or around Dallas, TX, I hope you can attend! Stay tuned to the Citrix User Group Community site for news and information about upcoming meetings and activities.

Laura Whalen
Citrix Systems, Inc.
Follow me on Twitter

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (653) |

posted by Michael Glover

In my last blog entry Profile Streaming - Performance Gain? we looked at the performance increase when using the new profile streaming feature that ships with Profile management (Pm) v3.

We know it works because we tracked the logon time using perfmon but curious minds might ask the following question:

"ok,so how do I know this streaming profile stuff is actually working?"

well luckily enough - there is. 3 ways in fact!

1.The quickist and easiest way to do this is to look at the properties of the user profile. In the example below you will notice the size of the profile is >100MB but the size on disk is <7MB.

2.You can also use the dir /al command to list all files with reparse point attributes (Remember, the key to our profile streaming/fetch on demand design is the use of reparse points on files. Reparse points fool applications and users alike into thinking that the files are downloaded as part of the user profile at logon).

the screenshot below shows the L swith listed when running dir /? from a win7 machine. This is a hidden switch on XP, W2K3 but the functionality still exists.

Bottom line, If profile streaming is disabled, running dir /al on a folder containing files within the user profile, will return "file not found".

3.Finally, you can confirm profile streaming is enabled for a particular user by reviewing the Pm log file (If enabled). To verify that the profile is being streamed look for the following:

2010-03-16;20:17:30.401;INFORMATION;<domain name>;<user name>;2;2364;ProcessLogon: User logging on with Streamed Profile support enabled.

You convinced yet?

Michael
Citrix Support on:
Twitter - @citrixsupport & @citrixreadiness
Facebook
LinkedIn

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (7) | Views (961) |

posted by Michael Glover

Profile Streaming is a great new feature introduced with Profile management (Pm) v3 so lets take a look at the performance gain the old fashioned way...

Using the following upm managed profiles lets use perfmon to get an idea of load times.

upm100mb (standard upm profile)
upmstream100mb (streamed upm profile)

First, lets log onto a managed W2K3 server with the standard "upm100mb" profile. Using perfmon & the Pm logon duration counter we can see that a 100MB profile takes around 5 seconds to load. Not bad I hear you say?

Now, lets follow suit but this time lets log on with the streamed "upmstreamed100mb" profile.

hmm, .5 seconds.

I'm sure you'll agree - the results are impressive.

Michael
Citrix Support on:
Twitter - @citrixsupport & @citrixreadiness
Facebook
LinkedIn

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (0) | Views (502) |


So a week has past since our last update and some things have changed and some "lessons" have been learned.

First change:
Our timeslot has changed due to some agenda conflict (apparently Rob and I can not be doing this session and host a Learning Lab at the same time ) So the new time slot is Wednesday @9:00 AM. Now I do understand this is early, it's even before the grand opening keynote but he, the early bird catches the worm. In other words, if you want to see some nice demos and listen to Dutch guys show off the beauty of the vAlliance I am sure you will manage to find us.

Update on the build of the session:

Lessons learned 1:
Well, let's just say that some things did not pane out as planned. For one apparently Windows 2008R2 does not like to run from eSATA disk. This meant I had to delete my XenClient install and install W2K8R2 natively on the local SSD instead of the planned external SATA disk (bummer). FYI it does show the external disk it will just refuse to install onto it. Perhaps if the internal disk would have been formatted with NTFS it would have but XenClient does not use NTFS natively so XenClient RC2 will have to wait for me until after Synergy (time lost: 4 hours).

Lessons learned 2:
When you plan to install MSSQL + SCVMM + SCCM + SCOM on 1 server be very carefull when installing IIS related features. We had to reinstall WSUS on the alternative ports due it conflicting with one of the other services running on the server (time lost: 4 hours).

Lessons learned 3:
When you think about cutting corners and re-using the Hyper-V vhd file with an updated Windows 2008 R2 install (aka just copying the vhd and assigning it when creating the new VM) make sure you run Sysprep and tick the box "Generalize", this will give it a new SID and will ensure a succesfull install of SCVMM (time lost: 4 hours).

On a brighter note these last 3 days have taught me a few more things as well:

  • QoS is a wonderfull thing when you want to listen to online radio when also updating your WSUS servers.
  • Routers have a session limit so be careful what else is going across the wire
  • Make sure you have downloaded all the correct ISO's, sometimes the latest is not always the right one so always check the release notes of the products you will be installing (MSSQL R2 was not yet certified).

So where are we now? Well we are down to combining the multiple components, we have the System Center products working, we have XenApp working as well as XenDesktop so now it's time to tie SCCM to App-V to XenApp, Edgesight into SCOM and anything else we would like to show off.

If you have suggestions or would like to see specific thing twitter me @andreasvw or Rob @robsanders or just leave a reply below. We will see what we can accomplish.

Expand Blog Post