• 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
Blogs for Christian Gehring [ Blogs | Profile ]
Permalink | Twitter Post to Twitter | Comments (5) | Views (1624) |


Since the last months Citrix and Novell worked closely together to provide a solution for customers with Novell eDirectory in place. For the Desktop Delivery Controller and the Virtual Desktop Agents Citrix announced an official support statement which could be found here: http://support.citrix.com/article/CTX123281

Costumers with a synched Active Directory / eDirectory only have to be aware of their GINA chaining. http://community.citrix.com/display/ocb/2009/05/07/XenDesktop+and+Novell+eDirectory

For environments where no Active Directory is in place Novell Open Enterprise Server with Domain Service for Windows (DSfW) http://tinyurl.com/yze7y65 have to be installed and configured before XenDesktop.
Due the fact, that DSfW only accepts Kerberos and no NTLM calls the XenDesktop Active Directory Wizard should not be used to prepare the OU.

You'll need to configure the DDC and VDA without using an OU:
http://support.citrix.com/article/CTX118976

I've developed a little cool tool to configure both components using a simple GUI.

On the Desktop Delivery Controller:
1.Set Desktop Delivery Controller without AD OU to enabled
2.Press Set DDC Config Button

On the Virtual Desktop Agents (WinXP,Vista, Win7)
1.Enter the FQDN of the DDC(s)
2.Press SET VDA Config Button

For those of you who would like to set the DDC configuration by using ZENworks or Group Policies I've added an ADM Template (FarmControllers.adm) into the Novell Integration Tool folder.

Download: Novell Integration Tool

Note: This tool is not supported by Citrix Support and if you have any issues try to configure the VDA manually using regedit or leave me a blog comment.

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


One of the new exclusive Windows 7 feature is the use of search connectors. Users have the ability to search remote file repositories on the local network or web using Windows Explorer. I've created a Windows 7 search connector to search content into the Citrix Knowledgebase.

Download the CitrixKB CitrixKB.zip search Connector and add http://support.citrix.com and http://api.bing.com to your trusted sites in your Internet Explorer. (Tools -> Internet Options -> Security)

Now you can start your Windows Explorer, click Citrix on the left favorite pane and enter your search string.

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


Here is a working integration scenario, how to implement XenDesktop in a synced AD / eDir environment. It should only be used when the Novell Clients needs to be installed on the virtual desktop. In several projects I've used this configuration without any issues.

The trick is the GINA chaining:

Working Scenario:

  • Enable Explicit AD Authentication on default Web Interface site
  • Set ctxgina registry key to msgina.dll on the Virtual Machine running the VDA.
  • Set default NW account context on NW client installed on VDA.
  • Log into WI site with synched AD/NDS account and launch virtual Desktop.
  • If the NDS account is in the default Context as per the NW client on the VDA itself then all works fine. You do not have to manually enter your NDS account credentials. The synched AD/NDS accounts were passed along the GINA chain.

Novell already released Domain Services for Windows, which is a feature of Novel Open Enterprise Server 2. Strategic Novell customers should consider implementing Domain Services for Windows if they have no synced Active Directory in place.

Novell Domain Services for Windows provides seamless cross-authentication capabilities between Windows/Active Directory and Novell OES 2 Linux servers. It is a suite of integrated technologies that removes the need for the Novell Client when logging on and accessing data from Windows workstations in eDirectory trees. This technology simplifies the management of users and workstations in mixed Novell-Microsoft environments.

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (3) | Views (14834) |


The Citrix Desktop Delivery Controller PowerShell SDK provides a snap-in, XDCommands, for the Microsoft PowerShell v1.0 framework. The SDK consists of a number of "cmdlets" that allow you to script many of the administrative tasks you may need to perform on a regular basis.

Step by Step setting up your PowerShell / XenDesktop environment

  • Install PowerShell 1.0 on the DDC (Desktop Delivery Controller)
  • Download and Install Microsoft .NET Framework 3.5
  • The PowerShell SDK is located on the XenDesktop 2.1 CD in the ...\Support\DdcSdk folder. Run the installer XenDesktop_2_0_DDC_Powershell_SDK.msi

Installing the SDK registers the XdCommands snap-in assembly with the Microsoft PowerShell framework. The snap-in makes a number of new classes and "cmdlets" available to PowerShell scripts or interactive shell sessions.

To run scripts you may need to use the built-in "Set-ExecutionPolicy" cmdlet to adjust the PowerShell execution policy to a value such as "RemoteSigned"

  • Start Powershell and set the Excecution Policy. Set-ExecutionPolicy RemoteSigned
  • Change to the folder where the SDK is installed cd \Program Files\Citrix\Desktop Delivery Controller\Powershell
  • Load the snap-in into the PowerShell  Add-PSSnapin XdCommands

Alternatively, use the installed PowerShell console file, XdCommands.psc1, to start an interactive PowerShell shell session with the XdCommands snap-in pre-loaded. Citrix provides a shortcut on the Start menu to start such a session. This shortcut also runs the "XdAliases.ps1" PowerShell script that sets up aliases for most of the SDK cmdlets. This shortcut will not function properly until the PowerShell execution policy, as described above, is set appropriately.

Help

Online help is available for all Desktop Delivery Controller SDK cmdlets. To obtain a list of cmdlets offered by the snap-in, run the built-in "Get-Command" cmdlet, as follows: Get-Command -psSnapin XdCommands
Online help for individual cmdlets is available using the built-in "Get-Help" cmdlet. For example, to view the online help for the "Get-XdDesktopGroup" cmdlet, run the following command: Get-Help Get-XdDesktopGroup
For an overview of all cmdlets provided by the SDK, view the "about_XdCommands" help topic. To view this information, run the following command: Get-Help about_XdCommands

Samples

Creating a new VM-based desktop group

This command creates a new VM-based desktop group, "testgrp", containing three machines, and published to all domain users.
$usr = New-XdUser 'domain users' -group
$cred = Get-Credential 'root'
$hs = New-XdHostingServer 'XDS01' $cred
$machineName= 'machine1','machine2','machine3'
#find all the VM machines in the pool
$allvms = Get-XdHostedMachine $hs
#Find the workers and set the AD identity to the correct machine
$dsk = $machineName | foreach { $vm=$_; $allvms | where {$_.HostingName -match $vm } | foreach { $_.Name = $vm; $_ }}
$hgs = New-XdGroupHostingSettings $hs
$ng = New-XdDesktopGroup -pub 'testgrp' -desk $dsk -user $usr -hosting $hgs


Adding a virtual desktop to an existing VM-based desktop group

This command adds a new virtual desktop, hosted by a VM, to an existing VM-based desktop group. Before adding a VM to the group, you must create a mapping between the VMs host ID and Active Directory ID. To do this, run the Get-XdHostedMachine cmdlet to obtain a list of host IDs for VMs and assign Active Directory IDs to those VMs.

# get all the groups whose name starts with 'test' (should be just one)
$grp = Get-XdDesktopGroup test*
# get all the workers whose friendly names have 'machine3' in them (should be just one)
$dsk= Get-XdHostedMachine $grp.HostingSettings.HostingServer -name *machine3*
# Set up the mapping to the AD name for the new Virtual Desktop machine
$dsk.Name = 'machine3'
$grp.Desktops.Add($dsk)
Set-XdDesktopGroup $grp

If host ID to Active Directory ID mappings have been created previously, run the following command:

Get-XdDesktopGroup test* | *%* { \[void\]$\_.Desktops.Add($(Get-XdHostedMachine $\_.HostingSettings.HostingServer \-name \*machine3\*)); $\_ }| Set-XdDesktopGroup

Logging off a user from all current sessions, after sending a warning message

This command displays a warning message to all users whose names start with "christian" before logging them off. Note that in this example there is specified time period (10 seconds) before logoff occurs.

# get sessions for all users whose names start with 'christian'
$sess = Get-XdSession -user christian*
# warn the user
Send-XdSessionMessage $sess 'Forced log off in 10 seconds'
Start-Sleep 10
#Then go ahead with the logoff
Stop-XdSession $sess

Adding a user to an existing desktop group

This command adds users in all groups whose names match "GroupName" to an existing desktop group.
# get all the groups whose name matches 'GroupName' (should be just one)
# Note could also be written as:

#Ā  $grp = Get-XdDesktopGroup GroupName
$grp = Get-XdDesktopGroup | ? {$_.Name -match "GroupName" }
$Usr = New-XdUser "UserName"
$grp.Users.Add($Usr)
Set-XdDesktopGroup $grp


Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (3) | Views (9964) |


In my last blog I have started with the Introduction of PowerShell and MFCom. Today we'll provide you more information's about MFCom Objects and how to use them with PowerShell.

Check Session State


To retrieve the session state for each session within the Citrix farm you have to query IMetaFrameSession.SessionState. If the returned state of the session is MFSessionStateStale, no further attempt to read other session properties should be made. This state indicates that the session may no longer exist.
The following PowerShell script displays all active sessions within the farm and adds additional session information to the output. To check other session's states you only have to replace the session state type in the last line of the code.

#Type Definitions
$MetaFrameWinFarmObject =
 

$MFSessionStateUnknown = 0         #Unknown state
$MFSessionStateActive = 1          #User logged on
$MFSessionStateConnected = 2       #Connected to client
$MFSessionStateConnecting = 3      #Connecting to client
$MFSessionStateShadowing = 4       #Shadowing another session
$MFSessionStateDisconnected = 5    #Logged on but no client
$MFSessionStateIdle = 6            #Waiting for connection
$MFSessionStateListening = 7       #Listening for connection
$MFSessionStateResetting = 8       #Reset in progress
$MFSessionStateDown = 9            #Down due to error
$MFSessionStateInit = 10           #Initializing
$MFSessionStateStale = 11          #Stale session object
 

#Main
$farm = new-Object -com "MetaframeCOM.MetaframeFarm"
$farm.Initialize($MetaFrameWinFarmObject)
$farm.FarmName

$farm.Sessions | Where-Object { $_.SessionState -eq $MFSessionStateActive {color:black}}| Format-table Username,SessionName,AppName,ServerName,SessionState

Find disabled Application      

Finding disabled applications is mostly useful in your production or test environment where you have to handle with many published applications. This property IMetaFrameApplication.EnableApp enables or disables the application.

  • When you publish an application, it is enabled by default. Enabled applications are available to the users specified when the application was published. Disabled applications are not available to users.
  • The application can become disabled internally if its server list becomes empty, or if its user list becomes empty and the application is not configured to accept anonymous connections.
  • A disabled application is not available to clients.

#Type Definitions
$MetaFrameWinFarmObject = 1

#Main
$farm = new-Object -com "MetaFrameCOM.MetaframeFarm"
$farm.Initialize($MetaFrameWinFarmObject)
$farm.FarmName
$app = $farm.Applications
$app | foreach { $_ | ? { $_.EnableApp -eq 0 }}|Format-Table DistinguishedName

 

Expand Blog Post
Permalink | Twitter Post to Twitter | Comments (2) | Views (18292) |


Microsoft Windows PowerShell command line shell and scripting language helps IT professionals achieve greater control and productivity. Using a new admin-focused scripting language, more than 130 standard command line tools, and consistent syntax and utilities, Windows PowerShell allows IT professionals to control system administration and accelerate automation more easily

With PowerShell, Citrix Administrators can script MFCom Objects to manage and administer  the XenApp Farm. The secret of using COM objects starts with the command: New-Object -COM.

The following PowerShell example creates a new MetaFrame object (do not get confused with the COM Object naming), initializes the Farm and prints out the farmname:

$farm = new-Object -com "MetaframeCOM.MetaframeFarm"
$farm.Initialize(1)
$farm.FarmName

It's not going to be a spectacular script. But look at the following little code enhancement:

$farm = new-Object -com "MetaframeCOM.MetaframeFarm"
$farm.Initialize(1)
$farm.FarmName
$farm.sessions | Format-Table UserName,ClientAddress

Just adding one more lines of code and you will get all sessions within the farm displaying the Username and IP Address.

Setting up your PowerShell / MFCom environment

Beginning  with PowerShell / MFCom Scripting you should install Microsoft Powershell on a Citrix Presentation / XenApp Server in your lab. I recommend downloading the PowerShell Graphical Helpfile which also provides great information's about VBScript to PowerShell conversion.

For creating and editing your PowerShell scripts I suggest downloading the free PowerGui graphical user interface and script editor. Its easy to use and works well with COM Objects.

PowerShell
http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

PowerShell Graphical Help File
http://www.microsoft.com/downloads/details.aspx?FamilyId=3B3F7CE4-43EA-4A21-90CC-966A7FC6C6E8&displaylang=en

PowerGui - Graphical user interface and script editor
http://www.powergui.org

Displaying apps in your farm

To give you some basic ideas where PowerShell leverages your daily administrative tasks, I've created the following script:
$farm = new-Object -com "MetaframeCOM.MetaframeFarm"
$farm.Initialize(1)
$farm.FarmName
$farm.applications| where {$_.BrowserName -like "Winword*" {color:black}} | select DistinguishedName

The script above enumerates each application published in the farm and selects all applications where Winword* is contained in the BrowserName.

PowerShell Examples provided by CDN

PowerShell and other scripting examples can be found on the Citrix Developer Network:

http://community.citrix.com/label/cdn/powershell

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


 This video demo is showing the benefit of ICA in XenDesktop (vs. RDP in VMware VDI) over a 200ms latency WAN link. 

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


The Microsoft Windows ServerĀ® 2008 Launch event and the Germany SharePoint Conference rolled out together February 19-21. Microsoft's goal was to attract 5,000 attendees (customers and partners), and more than 7,000 attendees showed up!

This was a great opportunity for Citrix Germany to make a splash in spite of some limitations imposed by the Microsoft
program: all the sponsors were allowed to present only at the Sharepoint Conference, not the MS Windows Launch.
This limited Citrix's exposure and opportunity to demonstrate the value-add of virtualization, but the Citrix Germany
team did not give up and stay in the background. Instead, they took full advantage of their two presentation slots
at the SharePoint Conference, giving brilliant presentations on the Application Delivery story, and gearing attention to
the ANG product portfolio.
They utilized the previously successful "speed-up-your-app-delivery" concept and gave out 500 Citrix-branded toy
Mini Coopers and raffled three remote-controlled Minis in exchange for a lead-generating interview. This clever and well
received giveaway generated 250 leads, many of which already have concrete projects underway.
 

Focusing on the virtualization message
The three-day event had about 240 breakout sessions with over 100 exhibitors. Conversations with customers and partners focused on virtualization and the Citrix Xen family of products to IT decision makers and IT specialists.


 

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


 Citrix Workflow Studio is an IT process automation solution that enables administrators to compose, automate, and orchestrate rule-based workflows across the Citrix application delivery infrastructure stack. I've found a great Blog from Rich Crusco regarding Citrix Workflow Studio. http://www.frameworkx.com/blogpost.aspx?id=2&c=1128 . Rich provided excellent content and How To's.
 






For CeBit preparation I decided to record a small video for my SE colleagues, CSN Partners and customers in Germany.
YouTube Link: http://de.youtube.com/watch?v=67E7ImMC-R4

?

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


Windows PowerShell is an extensible command line interface shell and associated scripting language from Microsoft. To implement you own specialist functions you can use cmdlets for enhancing PowerShell. Cmdlets are specialized .NET classes, which the PowerShell runtime instantiates and invokes when they are run.
For building your own cmdlets I've found C# and VB.NET cmdlet Templates in the web. http://channel9.msdn.com/ShowPost.aspx?PostID=256835.
(Extract the ZIP File and you should find 2 vsi files. One for C# and one for VB.NET. They are working well with Visual Studio 2008.)

If you now go to Visual Studio and create a new project select Windows Powershell Template as the project template.


 

Right-click your project and choose, add then New Item. From the list of items choose Windows PowerShell PSCmdlet. This should be the default choice for cmdlets.
Microsoft describes how to extend Windows PowerShell with custom commands in the following MSDN article.
http://msdn.microsoft.com/msdnmag/issues/07/12/PowerShell/default.aspx?loc=en
After building our solution we need to install assembly with the InstallUtil tool. Open a Visual Studio cmd prompt, navigate to the bin\debug folder of your solution and run:

InstallUtil yourassemblyname.dll
Next load Windows PowerShell and type:

Get-PSSnapIn -registered
(which should list your snapin along with any other snapins currently registered.)
Next enter:

Add-PSSnapIn yoursnapinname
(this will load your snapin)
You should now be able to call your new functions in PowerShell.

In the next couple of weeks (if I will have time) I'd like to develop a cmdlet which allows you to do basic operation tasks within a Citrix Presentation Server or XenApp farm. Things like: list all sessions, get farm name, logoff idle session, etc.
Have fun
Christian


Expand Blog Post