Category : XenDesktop

XenDesktop

Citrix XenDesktop SQL Database: Display all client connections

One of my customers came up to me and asked me how to query the Citrix XenDesktop Database using SQL queries to get a list of all connections that have been made.
The first thing to keep in mind is, that XenDesktop stores the information only for a couple of days – depending on your license (Enterprise or Platinum licenses). So if you’re interested in a long-term solution, then you should put the output / result of my query into another database or file for archiving.

Read More
PowerShell Windows XenDesktop

Get running processes including CPU and memory usage

One of my customers needed a PowerShell script to get all running processes with their corresponding CPU load. This was script should be triggered by their monitoring system if the system total CPU usage exceeds a configured threshold.

They’re running a mid-sized Citrix XenDesktop farm with Server-OS (formerly known as XenApp a.k.a. terminal services) and sometimes applications are using a high CPU amount.

This is the small script I wrote for them:

#####################################################################
##
## (C) 2015 Michael Miklis (michaelmiklis.de)
##
##
## Filename:      Get-Tasks.ps1
##
## Version:       1.0
##
## Release:       Final
##
## Requirements:  -none-
##
## Description:   PowerShell Tasklist with CPU usage and memory
##                usage
##
## This script is provided 'AS-IS'.  The author does not provide
## any guarantee or warranty, stated or implied.  Use at your own
## risk. You are free to reproduce, copy & modify the code, but
## please give the author credit.
##
####################################################################

<#
.SYNOPSIS
Lists all running task including cpu and memory usage

.DESCRIPTION
The Get-Tasks function uses Windows Management Instrumentation (WMI) to retrieve process Name, ProcessId, SessionId,
VirtualSizeMB, Handles, Owner, PercentProcessorTime and ThreadCount

.PARAMETER computerName
Computername or IP Adress of the computer to query

.PARAMETER credential
Credentials to query computer as System.Management.Automation.PSCredential

.EXAMPLE
Get-Tasks
Get-Tasks -computerName "server.domain.com" -credential $credential

.NOTES
You need to run this CMDlet with elevated permissions
#>

function Get-Tasks {
    [CmdletBinding()]
    param (
        [parameter(Mandatory=$true,ValueFromPipeline=$false)]
        [string]$computername,

        [parameter(Mandatory=$true,ValueFromPipeline=$false)]
        [System.Management.Automation.PSCredential]$credential      
    )

    PROCESS {
        $colProcs = Get-wmiobject win32_process -computername $computername  -Credential $credential | select *,@{Name=”Owner”;Expression={($_.GetOwner()).User}}
        $colPerfs = Get-wmiobject win32_perfformatteddata_perfproc_process -computername $computername  -Credential $credential 
        $colTasklist = @()

        foreach ($proc in $colProcs) {
            $process = New-Object System.Object

            $perf = $colPerfs | Where-Object { $_.IDProcess -eq $proc.ProcessId }

            $process | Add-Member -type NoteProperty -name "Name" -value $proc.Name       
            $process | Add-Member -type NoteProperty -name "ProcessId" -value $proc.ProcessId
            $process | Add-Member -type NoteProperty -name "SessionId" -value $proc.SessionId
            $process | Add-Member -type NoteProperty -name "VirtualSizeMB" -value ([math]::Round(($proc.VirtualSize / 1024 /1024), 2))
            $process | Add-Member -type NoteProperty -name "Handles" -value $proc.Handles
            $process | Add-Member -type NoteProperty -name "Owner" -value $proc.Owner
            $process | Add-Member -type NoteProperty -name "PercentProcessorTime" -value $perf.PercentProcessorTime
            $process | Add-Member -type NoteProperty -name "ThreadCount" -value $perf.ThreadCount

            $colTasklist += $process
        }

        $colTasklist | Sort-Object PercentProcessorTime -Desc

        return $colTasklist
    }
}
Read More
Windows XenApp XenDesktop

SESSIONID.EXE – Query Terminalserver Session ID

DOWNLOAD
sessionid.exe

I was looking for a way to display the session-ID of my current terminal server session regardless of the protocol I’m using in a batch file. I tried numerous workarounds by parsing the output of qwinsta.exe or quser.exe – but both ways didn’t work in a reliable manner.

After some research, I figured out that the session ID is available as a property within the .NET Framework. Therefore, I decided to write a small executable that will output the session id.

SessionID

Attached to this post you’ll find the SESSIONID.EXE – feel free to use it within your project.

Here are some code snippets how to use the sessionid.exe:

FOR /F "tokens=*" %%A IN ('sessionid.exe') DO SET SESSIONID=%%A
ECHO %SESSIONID%
Read More
XenApp XenDesktop

Change Clientdrive Name and Icon (Example: Mein IGEL)

Today I created a script to make it easier for IGEL Linux ThinClient users to find their client USB drives. On IGEL Linux ThinClients, all USB client devices are mapped under the virtual client drive A: (clienta$). Unfortunately, it isn’t that easy to recognize for the regular users in the Windows Explorer if they are connected to a XenApp or XenDesktop machine.
Therefore I decided to make it a lot easier for the User – and here we go – that’s how it looks now:



So what do we need to do to get there? I wrote a batch script that does the Job for you – this script needs to be run everytime a user logs on to the XenApp or XenDesktop session. This can be done with the regular login script or with group policy preferences – for my first implementation I did it with GPP and used item level targeting for specifying an Active Directory Group.

Here’s the Script:

MeinIGEL.cmd

You need to customize the Script regarding the path to the IGEL icon file to fit your environment. For Copyright reasons, I can’t offer an IGEL icon file for download – you have to create your own.

Read More
Featured XenDesktop

XenDesktop 5: Change Icon of a Catalog

If you want to change the Icon for a XenDesktop Catalog to make it easier to differenciate between desktop catalogs:

This can be done via Powershell:

Asnp Citrix.*
$ctxIcon = Get-CtxIcon -FileName C:InstallmyIcon.ico -index 0
$brokerIcon = New-BrokerIcon -EncodedIconData $ctxIcon.EncodedIconData
$desktopGroup = Get-BrokerDesktopGroup -Name 'MyDesktopGroup'
Set-BrokerDesktopGroup $desktopGroup -IconUid $brokerIcon.Uid
Read More
Windows XenDesktop

XenDesktop: Change mouse scheme to speedup user experience

On many XenDesktop installations with Windows 7 VMs I ran into a problem regarding the mouse performance. The mouse seems to be quite slow and slaggy if you’ve loaded the Win7 Aero theme.
This is caused by the mouse scheme “Windows Aero”. You need to disable this either in the default profile or via group policy preferences during login:

HKEY_CURRENT_USERControl PanelCursorsScheme Source
Scheme Source=dword:00000000

I assume that the same setting is gonna work on Windows 8 based VDI machines, but I don’t have tested this so far.

Read More
Featured XenDesktop

XenDesktop Troubleshooting – Part 1 – Overview

During Citrix Summit & Synergy 2012 I attended an interesting session regarding XenDesktop Troubleshooting.  Whenever you need to troubleshoot XenDesktop related problems you need to be familiar with these tools. In this upcoming series I’ll write about the tools and how to use them:

Tracing & Logging:

Monitoring & Collection

Database and Services

Read More