<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>citrix &#8211; Carl Webster</title>
	<atom:link href="https://www.carlwebster.com/tag/citrix/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.carlwebster.com</link>
	<description>The Accidental Citrix Admin - The site for those who find themselves supporting Citrix involuntarily or accidentally</description>
	<lastBuildDate>Sat, 29 May 2021 15:07:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
<site xmlns="com-wordpress:feed-additions:1">42228915</site>	<item>
		<title>Finding Mismatched Citrix XenApp 5 Servers Using Microsoft PowerShell</title>
		<link>https://www.carlwebster.com/finding-mismatched-xenapp-5-servers-using-powershell/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Wed, 28 Sep 2011 17:30:46 +0000</pubDate>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[XenApp]]></category>
		<category><![CDATA[XenApp 5 for Server 2003]]></category>
		<category><![CDATA[XenApp 5 for Server 2008]]></category>
		<category><![CDATA[citrix]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[xenapp 5]]></category>
		<guid isPermaLink="false">http://webster.skyrocket.ltd/?p=3240</guid>

					<description><![CDATA[Have you ever worked with a customer that had multiple Citrix license servers and product editions?  I worked with a client recently that had upgraded their Citrix XenApp product licenses&#8230;]]></description>
										<content:encoded><![CDATA[<p>Have you ever worked with a customer that had multiple Citrix license servers and product editions?  I worked with a client recently that had upgraded their Citrix XenApp product licenses from Enterprise to Platinum and had moved to a new Citrix license server.  Their problem was that they, over the years, had an unknown number of XenApp servers that had been manually configured to use various license servers and product editions.  Their problem was compounded by having well over 100 XenApp 5 servers.  The XenApp servers were segregated into folders based on Zone name and sub-folders based on application silo name.  Manually checking every XenApp server in the Delivery Services Console would have taken a very long time.  My solution was a Microsoft PowerShell script.</p>
<p>Being fairly new to PowerShell, but having a software development background, I knew this should be a very simple script to produce.  The client simply wanted a list of XenApp servers so they could look at the license server name and product edition.  The basics of the script are shown here (lines may wrap):</p>
<pre>$Farm = Get-XAFarmConfiguration
$Servers = Get-XAServer
ForEach($Server in $Servers)
{
        $ServerConfig = Get-XAServerConfiguration -ServerName $Server.Servername
        Echo "Zone: " $server.ZoneName
        Echo "Server Name: " $server.ServerName
        Echo “Product Edition: “  $server.CitrixEdition
        If( $ServerConfig.LicenseServerUseFarmSettings )
        {
               Echo "License server: " $Farm.LicenseServerName
        }
        Else
        {
               Echo "License server: " $ServerConfig.LicenseServerName
        }
        Echo “”
}</pre>
<p><strong>Note:</strong> This script is only valid for XenApp 5 for both Server 2003 and Server 2008.  In XenApp 5, it is possible to edit each XenApp server and set a specific Citrix license server.  You could, in fact, have every XenApp server in a XenApp farm configured to use its own Citrix license server.  In XenApp 6, you <em>can</em> do the same thing but that would require the use of Citrix Computer polices, one for each server.</p>
<p>While the above script worked, it was almost useless.  With an extremely large number of servers, the output produced was unwieldy.  The customer gave me the product edition and license server name they wanted to validate against.  I updated the script with that new information and needed a way to filter the data.  PowerShell uses the traditional programming “<strong>If</strong>” statement to allow filtering the data as it is processed.  I added a variable for the license server name and an “<strong>If</strong>” statement to the script as shown below (PowerShell uses the <code>character for line continuation. ):<br />
&lt;pre&gt;$LicenseServerName = NEWLICCTX01.WEBSTERSLAB.COM<br />
$Farm = Get-XAFarmConfiguration<br />
$Servers = Get-XAServer<br />
ForEach($Server in $Servers)<br />
{<br />
    $ServerConfig = Get-XAServerConfiguration -ServerName $Server.Servername<br />
    If(($Server.CitrixEdition -ne "Platinum") -or</code><br />
    ($ServerConfig.LicenseServerUseFarmSettings -eq $False `<br />
    &#8211;and $ServerConfig.LicenseServerName -ne $LicenseServerName))<br />
    {<br />
        &lt;snip&gt;<br />
    }<br />
}<br />
The “<strong>If</strong>” statement says:</p>
<ul>
<li><strong>If</strong> the server’s product edition is <strong>not equal</strong> to “Platinum”</li>
<li><strong>Or</strong>, the server is <strong>not</strong> configured to use the farm settings for the license server <strong>and</strong> the server’s license server name is <strong>not equal</strong> to NEWLICCTX01.WEBSTERSLAB.COM</li>
<li>Output the server’s information</li>
<li>If neither condition is met, skip to the next entry in the list of servers</li>
</ul>
<p>The new script allowed me to output just the XenApp servers matching the client’s criteria.</p>
<p>Sample output:</p>
<p>Zone: ZONE1<br />
Server Name: Z1DCCTXSSO01A<br />
Product Edition: Platinum<br />
License server: oldlicctx01<br />
Zone:  ZONE7<br />
Server Name: Z7DCTRMCTX03J<br />
Product edition: Enterprise<br />
License server: NEWLICCTX01.WEBSTERSLAB.COM</p>
<p><strong>Note:</strong>  The license server names shown in the sample output reflect the entry in the License Server name field for each XenApp server.  XenApp allows as valid entries the NetBIOS name, Fully Qualified Domain Name or IP Address.</p>
<p>Sweet, I have what the client needs, now let me just output this to HTML and I am done.</p>
<p>M:\PSScripts\Get-ServerInfo.ps1 | ConvertTo-Html | Out-File M:\PSScripts\MismatchedServers.html</p>
<p>This produced the following:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<p align="center"><strong>*</strong></p>
</td>
</tr>
<tr>
<td>112</td>
</tr>
</tbody>
</table>
<p>What the…?</p>
<p>I needed to find out what was going on here.  I typed in <strong>Get-ServerInfo.ps1 | Get-Member</strong></p>
<pre>TypeName: System.String

Name       MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone()
CompareTo        Method                int CompareTo(System.Object value), int CompareTo(string strB)
Contains         Method                bool Contains(string value)

&lt;snip&gt;</pre>
<p>Next, I typed in <strong>Get-Help ConvertTo-HTML:</strong></p>
<p>PS Z:\&gt; <strong>Get-Help ConvertTo-HTML</strong></p>
<p>NAME<br />
ConvertTo-Html</p>
<p>SYNOPSIS<br />
Converts Microsoft .NET Framework objects into HTML that can be displayed in a Web browser.</p>
<p>&lt;snip&gt;</p>
<p>What I see from these two pieces of information is that my script is outputting <strong>String </strong>(or text) and ConvertTo-Html is expecting an <strong>Object</strong> as input.</p>
<p>Oh, now I get it.  The light-bulb finally went off:  PowerShell wants OBJECTS, not Text.  DOH!!!</p>
<p>OK, so how do I change this script to output objects instead of text?  I found what I needed in Chapter 19 of Don Jones’ book <a href="https://www.manning.com/books/learn-windows-powershell-in-a-month-of-lunches-third-edition"><em>Learn Windows PowerShell in a Month of Lunches</em></a>.  This is going to be a lot easier than I thought because I am only working with four pieces of data.</p>
<p>All I had to do was change:</p>
<pre>Echo "Zone: " $server.ZoneName
Echo "Server Name: " $server.ServerName
Echo “Product Edition: “  $server.CitrixEdition
If( $ServerConfig.LicenseServerUseFarmSettings )
{
       Echo "License server: " $Farm.LicenseServerName
}
Else
{
       Echo "License server: " $ServerConfig.LicenseServerName  
}
Echo “”

To:

$obj = New-Object -TypeName PSObject
$obj | Add-Member -MemberType NoteProperty `
-Name ZoneName -Value $server.ZoneName
$obj | Add-Member -MemberType NoteProperty `
-Name ServerName -Value $server.ServerName
$obj | Add-Member -MemberType NoteProperty `
-Name ProductEdition -Value $server.CitrixEdition
If($ServerConfig.LicenseServerUseFarmSettings)
{
       $obj | Add-Member -MemberType NoteProperty `
    -Name LicenseServer -Value $Farm.LicenseServerName
}
Else
{
       $obj | Add-Member -MemberType NoteProperty `
    -Name LicenseServer -Value $ServerConfig.LicenseServerName                    
}
Write-Output $obj</pre>
<p>Running the command <strong>M:\PSScripts\Get-ServerInfo.ps1 | ConvertTo-Html | Out-File M:\PSScripts\MismatchedServers.html</strong>, now gives me the following results (Figure 1).</p>
<figure id="attachment_20728" aria-describedby="caption-attachment-20728" style="width: 600px" class="wp-caption alignnone"><img fetchpriority="high" decoding="async" class="size-full wp-image-20728" src="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure001-1.png" alt="Figure 1" width="600" height="210" srcset="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure001-1.png 600w, https://www.carlwebster.com/wp-content/uploads/2011/09/Figure001-1-530x186.png 530w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption id="caption-attachment-20728" class="wp-caption-text">Figure 1</figcaption></figure>
<p>Perfect.  Now that the script is using objects for output, any of the ConvertTo-* or Export-To* cmdlets can be used.  But I wanted to take this adventure one step further.  The script uses a hard-coded license server name and product edition.  I want to turn the script into one that can be used by anyone and also make it an advanced function.</p>
<p>The first thing needed is a name for the function.  The purpose of the function is to Get XenApp Mismatched Servers.  Following the naming convention used by Citrix, Get-XA<em>Noun</em>, the name could be Get-XAMismatchedServer.  Why XAMismatchedServer and not XAMismatchedServers?  PowerShell convention is to use singular and not plural.</p>
<p>Function Get-XAMismatchedServer<br />
{<br />
#PowerShell statements<br />
}</p>
<p>There is more functionality that needs to be added to make this a more useful function.  Additionally, I want to learn how to turn this function into a proper PowerShell advanced function.  Some of the additions needed are:</p>
<ol>
<li>Prevent the function from running on XenApp 6+</li>
<li>Allow the use of a single XenApp Zone to restrict the output</li>
<li>Validate the Zone name entered</li>
<li>Change the function to use parameters instead of hardcoded values</li>
<li>Add debug and verbose statements</li>
<li>Add full help text to explain the function</li>
</ol>
<p>For the basis of turning this simple function into an advanced function, I am using Chapter 48 of <a href="http://www.amazon.com/Windows-PowerShell-2-0-Don-Jones/dp/0982131429"><em>Windows PowerShell 2.0 TFM</em></a> by Don Jones and Jeffery Hicks.</p>
<p>The first thing I need to add to the function is the statement that tells PowerShell this is an advanced function.</p>
<pre>Function Get-XAMismatchedServer
{
    [CmdletBinding( SupportsShouldProcess = $False, `
    ConfirmImpact = "None", DefaultParameterSetName = "" ) ]
}</pre>
<p>Even though all parameters in CmdletBinding() are the defaults, I am including them solely for the learning exercise.</p>
<p>I will also need two “helper” functions.  One to verify the version of XenApp the script is being run under and the other for validating the Zone name entered (if one was entered).  These two functions need to be declared before they are used.  This means they need to be at the top of the script.</p>
<p>The function to verify if the script is running under XenApp 5:</p>
<pre>Function IsRunningXenApp5
{
   Param( [string]$FarmVersion )
   Write-Debug "Starting IsRunningXenApp5 function"
   $XenApp5 = $false
   If($Farm.ServerVersion.ToString().SubString(0,1) -ne "6")
   {
     #this is a XenApp 5 farm, script can proceed
     $XenApp5 = $true
   }
   Else
   {
     #this is a not XenApp 5 farm, script cannot proceed
     $XenApp5 = $false
   }
   Write-Debug "Farm is running XenApp5 is $XenApp5"
   Return $XenApp5
}</pre>
<p>Result of function under XenApp 5 (Figure 2).</p>
<figure id="attachment_20729" aria-describedby="caption-attachment-20729" style="width: 466px" class="wp-caption alignnone"><img decoding="async" class="size-full wp-image-20729" src="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure002-1.png" alt="Figure 2" width="466" height="329" srcset="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure002-1.png 466w, https://www.carlwebster.com/wp-content/uploads/2011/09/Figure002-1-425x300.png 425w" sizes="(max-width: 466px) 100vw, 466px" /><figcaption id="caption-attachment-20729" class="wp-caption-text">Figure 2</figcaption></figure>
<p>Result of function under XenApp 6 (Figure 3).</p>
<figure id="attachment_20730" aria-describedby="caption-attachment-20730" style="width: 536px" class="wp-caption alignnone"><img decoding="async" class="size-full wp-image-20730" src="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure003-1.png" alt="Figure 3" width="536" height="323" srcset="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure003-1.png 536w, https://www.carlwebster.com/wp-content/uploads/2011/09/Figure003-1-498x300.png 498w" sizes="(max-width: 536px) 100vw, 536px" /><figcaption id="caption-attachment-20730" class="wp-caption-text">Figure 3</figcaption></figure>
<p>The function to verify that if a zone name is entered, it is valid:</p>
<pre>Function IsValidZoneName
{
   Param( [string]$ZoneName )
   Write-Debug "Starting IsValidZoneName function"
   $ValidZone = $false
   $Zones = Get-XAZone -ErrorAction SilentlyContinue
   If( -not $? )
   {
     Write-Error "Zone information could not be retrieved"
     Return $ValidZone
   }
   ForEach($Zone in $Zones)
   {
     Write-Debug "Checking zone $Zone against $ZoneName"
     Write-Verbose "Checking zone $Zone against $ZoneName"
     If($Zone.ZoneName -eq $ZoneName)
     {
        Write-Debug "Zone $ZoneName is valid $ValidZone"
        $Zones = $null
        $ValidZone = $true
     }
   }
   $Zones = $null
   Return $ValidZone
}</pre>
<p>Result of the function (Figure 4).</p>
<figure id="attachment_20731" aria-describedby="caption-attachment-20731" style="width: 464px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full wp-image-20731" src="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure004-1.png" alt="Figure 4" width="464" height="429" srcset="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure004-1.png 464w, https://www.carlwebster.com/wp-content/uploads/2011/09/Figure004-1-324x300.png 324w" sizes="auto, (max-width: 464px) 100vw, 464px" /><figcaption id="caption-attachment-20731" class="wp-caption-text">Figure 4</figcaption></figure>
<p>Adding parameters to the main function:</p>
<pre>Function Get-XAMismatchedServer
{
   [CmdletBinding( SupportsShouldProcess = $False,
   ConfirmImpact = "None", DefaultParameterSetName = "" ) ]

   Param( 
   [parameter(Position = 0,Mandatory=$true,
   HelpMessage = "Citrix license server name to match" )]
   [Alias("LS")]
   [string]$LicenseServerName,
   [parameter(Position = 1, Mandatory=$true,
   HelpMessage = "Citrix product edition to match: `
   Platinum, Enterprise or Advanced" )]
   [Alias("PE")]
   [ValidateSet("Platinum", "Enterprise", "Advanced")]
   [string]$ProductEdition,
   [parameter(Position = 2,Mandatory=$false, `
   HelpMessage = "XenApp zone to restrict search.  `
   Blank is all zones in farm." )]
   [Alias("ZN")]
   [string]$ZoneName = '' )
}</pre>
<p>Three parameters have been added: $LicenseServerName, $ProductEdition and $ZoneName.  These parameter names were chosen because they are what the Citrix cmdlets use.</p>
<p>All three parameters are positional.  This means the parameter name is not required.  The function could be called as either:</p>
<p><strong>Get-XAMismatchedServer -LicenseServerName CtxLic01 -ProductEdition Platinum -ZoneName EMEA</strong></p>
<p>Or</p>
<p><strong>Get-XAMismatchedServer CtxLic01 Platinum EMEA</strong></p>
<p>The LicenseServerName and ProductEdition parameters are mandatory (Figure 5).</p>
<figure id="attachment_20732" aria-describedby="caption-attachment-20732" style="width: 759px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full wp-image-20732" src="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure005-1.png" alt="Figure 5" width="759" height="211" srcset="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure005-1.png 759w, https://www.carlwebster.com/wp-content/uploads/2011/09/Figure005-1-530x147.png 530w, https://www.carlwebster.com/wp-content/uploads/2011/09/Figure005-1-600x167.png 600w" sizes="auto, (max-width: 759px) 100vw, 759px" /><figcaption id="caption-attachment-20732" class="wp-caption-text">Figure 5</figcaption></figure>
<p>A help message has been entered so that if a parameter is missing, help text can be requested to tell what needs to be entered (Figure 6).</p>
<figure id="attachment_20733" aria-describedby="caption-attachment-20733" style="width: 734px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full wp-image-20733" src="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure006-1.png" alt="Figure 6" width="734" height="297" srcset="https://www.carlwebster.com/wp-content/uploads/2011/09/Figure006-1.png 734w, https://www.carlwebster.com/wp-content/uploads/2011/09/Figure006-1-530x214.png 530w, https://www.carlwebster.com/wp-content/uploads/2011/09/Figure006-1-600x243.png 600w" sizes="auto, (max-width: 734px) 100vw, 734px" /><figcaption id="caption-attachment-20733" class="wp-caption-text">Figure 6</figcaption></figure>
<p><strong>Complete function (lines may wrap):</strong></p>
<pre>Function IsRunningXenApp5
{
   Param( [string]$FarmVersion )
   Write-Debug "Starting IsRunningXenApp5 function"
   $XenApp5 = $false
   If($Farm.ServerVersion.ToString().SubString(0,1) -ne "6")
   {
     #this is a XenApp 5 farm, script can proceed
     $XenApp5 = $true
   }
   Else
   {
     #this is not a XenApp 5 farm, script cannot proceed
     $XenApp5 = $false
   }
   Write-Debug "Farm is running XenApp5 is $XenApp5"
   Return $XenApp5
}

Function IsValidZoneName
{
   Param( [string]$ZoneName )
   Write-Debug "Starting IsValidZoneName function"
   $ValidZone = $false
   $Zones = Get-XAZone -ErrorAction SilentlyContinue
   If( -not $? )
   {
     Write-Error "Zone information could not be retrieved"
     Return $ValidZone
   }
   ForEach($Zone in $Zones)
   {
     Write-Debug "Checking zone $Zone against $ZoneName"
     Write-Verbose "Checking zone $Zone against $ZoneName"
     If($Zone.ZoneName -eq $ZoneName)
     {
        Write-Debug "Zone $ZoneName is valid $ValidZone"
        $Zones = $null
        $ValidZone = $true
     }
   }
   $Zones = $null
   Return $ValidZone
}

Function Get-XAMismatchedServer
{
   &lt;#
   .Synopsis
   Find servers not using the correct license server or
   product edition.
   .Description
   Find Citrix XenApp 5 servers that are not using the Citrix license
   server or product edition specified.  Can be restricted to a
   specific XenApp Zone.
   .Parameter LicenseServerName
   What is the name of the Citrix license server to validate servers
   against.  This parameter has an alias of LS.
   .Parameter ProductEdition
   What XenApp product edition should servers be configured to use.
   Valid input is Platinum, Enterprise or Advanced.
   This parameter has an alias of PE.
   .Parameter ZoneName
   Optional parameter.  If no XenApp zone name is specified, all zones
   in the farm are searched.
   This parameter has an alias of ZN.
   .Example
   PS C:\ Get-XAMismatchedServerInfo
   Will prompt for the Citrix license server name and product edition.
   .Example
   PS C:\ Get-XAMismatchedServerInfo -LicenseServerName CtxLic01 -ProductEdition Platinum
   Will search all XenApp zones in the XenApp 5 farm that the current XenApp 5 server
   is a member.  Any XenApp 5 server that is manually configured to use a different license
   server OR product edition will be returned.
   .Example
   PS C:\ Get-XAMismatchedServerInfo -LicenseServerName CtxLic01 -ProductEdition Platinum -ZoneName EMEA
   Will search the EMEA zone in the XenApp 5 farm that the current XenApp 5 server
   is a member.  Any XenApp 5 server that is manually configured to use a different license
   server OR product edition will be returned.
   .Example
   PS C:\ Get-XAMismatchedServerInfo -LS CtxLic01 -PE Enterprise -ZN Russia
   Will search the Russia zone in the XenApp 5 farm that the current XenApp 5 server
   is a member.  Any XenApp 5 server that is manually configured to use a different license
   server OR product edition will be returned.
   .Example
   PS C:\ Get-XAMismatchedServerInfo CtxNCC1701J Enterprise Cardassian
   Will search the dangerous Cardassian zone in the XenApp 5 farm that the current XenApp 5
   server is a member.  Any XenApp 5 server that is manually configured to use an inferior
   license server OR unworthy product edition will be returned (hopefully in one piece).
   .ReturnValue
   [OBJECT]
   .Notes
   NAME:         Get-XAMismatchedServerInfo
   VERSION:      .9
   AUTHOR:       Carl Webster (with a lot of help from Michael B. Smith)
   LASTEDIT:   May 16, 2011
   #Requires -version 2.0
   #Requires -pssnapin Citrix.XenApp.Commands
   #&gt;
   [CmdletBinding( SupportsShouldProcess = $False, ConfirmImpact = "None", DefaultParameterSetName = "" ) ]
   Param(       [parameter(
   Position = 0,
   Mandatory=$true,
   HelpMessage = "Citrix license server name to match" )]
   [Alias("LS")]
   [string]$LicenseServerName,
   [parameter(
   Position = 1,
   Mandatory=$true,
   HelpMessage = "Citrix product edition to match: Platinum, Enterprise or Advanced" )]
   [Alias("PE")]
   [ValidateSet("Platinum", "Enterprise", "Advanced")]
   [string]$ProductEdition,
   [parameter(
   Position = 2,
   Mandatory=$false,
   HelpMessage = "XenApp zone to restrict search.  Blank is all zones in farm." )]
   [Alias("ZN")]
   [string]$ZoneName = '' )
   Begin
   {
     Write-Debug "In the BEGIN block"
     Write-Debug "Retrieving farm information"
     Write-Verbose "Retrieving farm information"
     $Farm = Get-XAFarm -ErrorAction SilentlyContinue
     If( -not $? )
     {
        Write-Error "Farm information could not be retrieved"
        Return
     }
     Write-Debug "Validating the version of XenApp"
     $IsXenApp5 = IsRunningXenApp5 $Farm.ServerVersion
     If( -not $IsXenApp5 )
     {
        Write-Error "This script is designed for XenApp 5 and cannot be run on XenApp 6"
        Return
     }
     If($ZoneName -ne '')
     {
        Write-Debug "Is zone name valid"
        Write-Verbose "Validating zone $ZoneName"
        $ValidZone = IsValidZoneName $ZoneName
        If(-not $ValidZone)
        {
          Write-Error "Invalid zone name $ZoneName entered"
          Return
        }
     }
   }
   Process
   {
     Write-Debug "In the PROCESS block"
     If($ZoneName -eq '')
     {
        Write-Debug "Retrieving server information for all zones"
        Write-Verbose "Retrieving server information for all zones"
        $Servers = Get-XAServer -ErrorAction SilentlyContinue | `
        sort-object ZoneName, ServerName
     }
     Else
     {
        Write-Debug "Retrieving server information for zone $ZoneName"
        Write-Verbose "Retrieving server information for zone $ZoneName"
        $Servers = Get-XAServer -ZoneName $ZoneName -ErrorAction SilentlyContinue | `
        sort-object ZoneName, ServerName
     }
     If( $? )
     {
        ForEach($Server in $Servers)
        {
          Write-Debug "Retrieving server configuration data for server $Server"
          Write-Verbose "Retrieving server configuration data for server $Server"
          $ServerConfig = Get-XAServerConfiguration -ServerName $Server.Servername `
          -ErrorAction SilentlyContinue
          If( $? )
          {
             If($Server.CitrixEdition -ne $ProductEdition -or `
              ($ServerConfig.LicenseServerUseFarmSettings -eq $False -and `
              $ServerConfig.LicenseServerName -ne $LicenseServerName))
             {
               Write-Debug "Mismatched server $server"
               Write-Verbose "Mismatched server $server"
               $obj = New-Object -TypeName PSObject
               $obj | Add-Member -MemberType NoteProperty `
                  -Name ZoneName -Value $server.ZoneName
               $obj | Add-Member -MemberType NoteProperty `
                  -Name ServerName -Value $server.ServerName
               $obj | Add-Member -MemberType NoteProperty `
                  -Name ProductEdition -Value $server.CitrixEdition
               If($ServerConfig.LicenseServerUseFarmSettings)
               {
                  $obj | Add-Member -MemberType NoteProperty `
                    -Name LicenseServer -Value $Farm.LicenseServerName
               }
               Else
               {
                  $obj | Add-Member -MemberType `
                    NoteProperty -Name LicenseServer `
                    -Value $ServerConfig.LicenseServerName
               }
               Write-Debug "Creating object $obj"
               write-output $obj
            }
          }
          Else
          {
             Write-Error "Configuration information for server `
                   $($Server.Servername) could not be retrieved"
          }
        }
     }
     Else
     {
        Write-Error "Information on XenApp servers could not be retrieved"
     }
   }
   End
   {
     Write-Debug "In the END block"
     $servers = $null
     $serverconfig = $null
     $farm = $null
     $obj = $null
   }
}</pre>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3240</post-id>	</item>
		<item>
		<title>Error Deleting User From Citrix License Server 11.6.1 build 10007</title>
		<link>https://www.carlwebster.com/error-deleting-user-from-license-server-11-6-1-build-10007/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Wed, 17 Nov 2010 05:22:10 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[citrix]]></category>
		<category><![CDATA[license server]]></category>
		<guid isPermaLink="false">http://webster.skyrocket.ltd/?p=990</guid>

					<description><![CDATA[A colleague recently had an issue with the Citrix License Server version 11.6.1 build 1007 where a license user account could not be deleted.  Restarting the Citrix license services and&#8230;]]></description>
										<content:encoded><![CDATA[<p>A colleague recently had an issue with the Citrix License Server version 11.6.1 build 1007 where a license user account could not be deleted.  Restarting the Citrix license services and restarting the server still did not allow the user account to be deleted.  In this article, you will learn how to successfully delete the license user account.</p>
<p>Here are the users in the Citrix License Administration Console (Figure 1).</p>
<figure id="attachment_20147" aria-describedby="caption-attachment-20147" style="width: 851px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure1.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-20147 size-full" src="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure1.png" alt="Figure 1" width="851" height="239" srcset="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure1.png 851w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure1-530x149.png 530w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure1-768x216.png 768w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure1-600x169.png 600w" sizes="auto, (max-width: 851px) 100vw, 851px" /></a><figcaption id="caption-attachment-20147" class="wp-caption-text">Figure 1</figcaption></figure>
<p>Click <em>Delete</em> for the user account and click <em>OK</em> for the confirmation popup (Figure 2).</p>
<figure id="attachment_20149" aria-describedby="caption-attachment-20149" style="width: 854px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure2-1.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-20149 size-full" src="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure2-1.png" alt="Figure 2" width="854" height="232" srcset="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure2-1.png 854w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure2-1-530x144.png 530w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure2-1-768x209.png 768w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure2-1-600x163.png 600w" sizes="auto, (max-width: 854px) 100vw, 854px" /></a><figcaption id="caption-attachment-20149" class="wp-caption-text">Figure 2</figcaption></figure>
<p>The license user account still exists (Figure 3).</p>
<figure id="attachment_20150" aria-describedby="caption-attachment-20150" style="width: 851px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure3.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-20150 size-full" src="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure3.png" alt="Figure 3" width="851" height="239" srcset="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure3.png 851w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure3-530x149.png 530w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure3-768x216.png 768w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure3-600x169.png 600w" sizes="auto, (max-width: 851px) 100vw, 851px" /></a><figcaption id="caption-attachment-20150" class="wp-caption-text">Figure 3</figcaption></figure>
<p>To manually remove the license user account, an XML document must be edited.  Exit the Citrix License Administration Console.</p>
<p>The Citrix license user accounts are located in <em>d:\Program Files\Citrix\Licensing\LS\conf\server.xml</em> (where <em>d:</em> is the drive where Citrix Licensing is installed).  This XML document is in UTF-8 format and must be edited with an editor that can properly handle a UTF-8 file.  Open <em>server.xml</em> in your editor of choice (Figure 4).</p>
<figure id="attachment_20151" aria-describedby="caption-attachment-20151" style="width: 604px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure4.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-20151 size-full" src="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure4.png" alt="Figure 4" width="604" height="252" srcset="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure4.png 604w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure4-530x221.png 530w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure4-600x250.png 600w" sizes="auto, (max-width: 604px) 100vw, 604px" /></a><figcaption id="caption-attachment-20151" class="wp-caption-text">Figure 4</figcaption></figure>
<p>Scroll down to the <em>accessControl</em> Tag (Figure 5).</p>
<figure id="attachment_20152" aria-describedby="caption-attachment-20152" style="width: 771px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure5.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-20152 size-full" src="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure5.png" alt="Figure 5" width="771" height="267" srcset="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure5.png 771w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure5-530x184.png 530w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure5-768x266.png 768w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure5-600x208.png 600w" sizes="auto, (max-width: 771px) 100vw, 771px" /></a><figcaption id="caption-attachment-20152" class="wp-caption-text">Figure 5</figcaption></figure>
<p>Highlight the entire line which contains the desired license user account and delete the line (Figure 6).</p>
<figure id="attachment_20153" aria-describedby="caption-attachment-20153" style="width: 767px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure6.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-20153 size-full" src="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure6.png" alt="Figure 6" width="767" height="241" srcset="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure6.png 767w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure6-530x167.png 530w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure6-600x189.png 600w" sizes="auto, (max-width: 767px) 100vw, 767px" /></a><figcaption id="caption-attachment-20153" class="wp-caption-text">Figure 6</figcaption></figure>
<p>Exit the editor saving your changes.  From the Services management console restart the <em>Citrix Licensing</em> service (Figure 7).</p>
<figure id="attachment_20154" aria-describedby="caption-attachment-20154" style="width: 311px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure7.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-20154 size-full" src="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure7.png" alt="Figure 7" width="311" height="286" /></a><figcaption id="caption-attachment-20154" class="wp-caption-text">Figure 7</figcaption></figure>
<p><strong>Note:   You can also click <em>Start -&gt; Run</em> and type in </strong><strong>net stop “citrix licensing” &amp;&amp; net start “citrix licensing”</strong></p>
<p>Start the Citrix License Administration Console, go to User Configuration and you will see that the license user account has been deleted (Figure 8).</p>
<figure id="attachment_20155" aria-describedby="caption-attachment-20155" style="width: 851px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure8.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-20155 size-full" src="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure8.png" alt="Figure 8" width="851" height="236" srcset="https://www.carlwebster.com/wp-content/uploads/2010/11/Figure8.png 851w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure8-530x147.png 530w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure8-768x213.png 768w, https://www.carlwebster.com/wp-content/uploads/2010/11/Figure8-600x166.png 600w" sizes="auto, (max-width: 851px) 100vw, 851px" /></a><figcaption id="caption-attachment-20155" class="wp-caption-text">Figure 8</figcaption></figure>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">990</post-id>	</item>
		<item>
		<title>Will a Citrix License Server in a Workgroup Supply Licenses to XenApp Servers in Multiple Directory Services?</title>
		<link>https://www.carlwebster.com/will-a-citrix-license-server-in-a-workgroup-supply-licenses-to-xenapp-servers-in-multiple-directory-services/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Mon, 22 Dec 2008 18:04:52 +0000</pubDate>
				<category><![CDATA[XenApp]]></category>
		<category><![CDATA[citrix]]></category>
		<category><![CDATA[How do I]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[license]]></category>
		<category><![CDATA[license server]]></category>
		<category><![CDATA[xenapp]]></category>
		<guid isPermaLink="false">http://webster.skyrocket.ltd/?p=196</guid>

					<description><![CDATA[Will a stand-alone Citrix License Server running in a Workgroup service the licensing requests for XenApp Servers running in multiple farms in multiple directory service systems? Someone asked me this question and my first thought was yes it would. But would it?

NOTE: Most people believe that XenApp can only be installed on a network that uses either Active Directory or eDirectory. That is not true. XenApp can be installed on a stand-alone workgroup computer, as well as UNIX versions for Solaris, AIX and HP-UX.]]></description>
										<content:encoded><![CDATA[<p>This article was updated on January 5, 2009.</p>
<p>Will a stand-alone Citrix License Server running in a Workgroup service the licensing requests for XenApp Servers running in multiple farms in multiple directory service systems?  Someone asked me this question and my first thought was yes it would.  But would it?</p>
<p>NOTE:  Most people believe that XenApp can only be installed on a network that uses either Active Directory or eDirectory.  That is not true.  XenApp can be installed on a stand-alone workgroup computer, as well as UNIX versions for Solaris, AIX, and HP-UX.</p>
<p>This test will need five servers running Windows Server 2003 R2 x86 with all Windows Updates.  The License Server will be a stand-alone server in a Workgroup.  Microsoft Active Directory will be used for the Directory Service.  Two Forests, each with one domain, will be built.  One XenApp Server will be in each Domain as domain members.</p>
<p>Two server Virtual Machines (VM) were built for the first Forest/Domain.  The Forest/Domain is called DomainA.com, with a Domain Admin account named AdminA with a password of <a href="mailto:P@$$w0rdA">P@$$w0rdA</a>.</p>
<p>Two server VMs were built for the second Forest/Domain.  The Forest/Domain is called DomainB.net, with a Domain Admin account named AdminB with a password of <a href="mailto:P@$$w0rdB">P@$$w0rdB</a>.</p>
<p>The License Server was built as a stand-alone server in a Workgroup named Citrix with a local administrator account named AdminC with a password of <a href="mailto:P@$$w0rdC">P@$$w0rdC</a>.  The License Server is version 11.5.</p>
<figure id="attachment_18365" aria-describedby="caption-attachment-18365" style="width: 794px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Step05.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18365 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Step05.gif" alt="Figure 1" width="794" height="486" /></a><figcaption id="caption-attachment-18365" class="wp-caption-text">Figure 1</figcaption></figure>
<p>Different user names and passwords were used to verify that the license server does no authentication of user credentials when checking out licenses.</p>
<p>The XenApp Server in DomainA is named CitrixA and the server in DomainB is named CitrixB.</p>
<p>A DNS &#8220;A&#8221; record was created in each domain for the name of the Citrix License Server, CitrixONE.</p>
<figure id="attachment_18367" aria-describedby="caption-attachment-18367" style="width: 706px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Step07.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18367 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Step07.gif" alt="Figure 2" width="706" height="330" /></a><figcaption id="caption-attachment-18367" class="wp-caption-text">Figure 2</figcaption></figure>
<figure id="attachment_18368" aria-describedby="caption-attachment-18368" style="width: 705px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure003.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18368 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure003.gif" alt="Figure 3" width="705" height="326" /></a><figcaption id="caption-attachment-18368" class="wp-caption-text">Figure 3</figcaption></figure>
<p>When XenApp is installed, one of the questions asked is the hostname of the license server.</p>
<figure id="attachment_18369" aria-describedby="caption-attachment-18369" style="width: 506px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure004.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18369 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure004.gif" alt="Figure 4" width="506" height="446" /></a><figcaption id="caption-attachment-18369" class="wp-caption-text">Figure 4</figcaption></figure>
<p>The installer needs to be able to resolve the name to an IP address.  If there is no DNS record for the license server, name resolution fails and you receive an error message that the license server cannot be contacted.</p>
<figure id="attachment_18370" aria-describedby="caption-attachment-18370" style="width: 507px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure005.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18370 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure005.gif" alt="Figure 5" width="507" height="446" /></a><figcaption id="caption-attachment-18370" class="wp-caption-text">Figure 5</figcaption></figure>
<p>The Citrix Farm in DomainA is named FarmA, the Farm in DomainB is named FarmB.  Both XenApp servers are running XenApp 5 for Server 2003 &#8211; Platinum Edition with Hotfix Rollup Pack #3.</p>
<p>On CitrixA the Notepad text editor was published and on CitrixB, Microsoft Paint was published.</p>
<p>To begin the test both CitrixA and CitrixB were powered off.</p>
<figure id="attachment_18371" aria-describedby="caption-attachment-18371" style="width: 856px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure006.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18371 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure006.gif" alt="Figure 6" width="856" height="599" /></a><figcaption id="caption-attachment-18371" class="wp-caption-text">Figure 6</figcaption></figure>
<p>This screen shows no Server Start-up licenses or Citrix XenApp Platinum licenses checked out.</p>
<p>CitrixA in DomainA.com was then powered on.</p>
<figure id="attachment_18372" aria-describedby="caption-attachment-18372" style="width: 858px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure007.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18372 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure007.gif" alt="Figure 7" width="858" height="602" /></a><figcaption id="caption-attachment-18372" class="wp-caption-text">Figure 7</figcaption></figure>
<p>This shows that one Citrix Start-up License has been checked out.</p>
<p>CitrixB in DomainB.net was then powered on.</p>
<figure id="attachment_18373" aria-describedby="caption-attachment-18373" style="width: 855px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure008.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18373 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure008.gif" alt="Figure 8" width="855" height="599" /></a><figcaption id="caption-attachment-18373" class="wp-caption-text">Figure 8</figcaption></figure>
<p>This shows that two Citrix Start-up licenses have now been checked out.  Click the box next to the number 2 in the <em>In Use</em> column to get a detailed usage report on the checked out licenses.</p>
<figure id="attachment_18374" aria-describedby="caption-attachment-18374" style="width: 453px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure009.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18374 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure009.gif" alt="Figure 9" width="453" height="335" /></a><figcaption id="caption-attachment-18374" class="wp-caption-text">Figure 9</figcaption></figure>
<p>Here you see the Fully Qualified Domain Names of the two XenApp servers.</p>
<p>Program Neighborhood was used to run the Notepad published application on CitrixA.</p>
<figure id="attachment_18375" aria-describedby="caption-attachment-18375" style="width: 856px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure010.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18375 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure010.gif" alt="Figure 10" width="856" height="601" /></a><figcaption id="caption-attachment-18375" class="wp-caption-text">Figure 10</figcaption></figure>
<p>This shows that one Citrix XenApp Platinum Concurrent User license has been checked out.</p>
<p>Program Neighborhood was used to run the Paint published application on CitrixB.</p>
<figure id="attachment_18376" aria-describedby="caption-attachment-18376" style="width: 856px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure011.gif" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-18376 size-full" src="https://www.carlwebster.com/wp-content/uploads/2008/12/Figure011.gif" alt="Figure 11" width="856" height="601" /></a><figcaption id="caption-attachment-18376" class="wp-caption-text">Figure 11</figcaption></figure>
<p>This shows that two Citrix XenApp Platinum Concurrent User licenses have been checked out.</p>
<p>Will a stand-alone Citrix License Server running in a Workgroup service the licensing requests for XenApp Servers running in multiple farms in multiple directory service systems?  Yes.</p>
<p>It does not matter what user accounts were used in installing the Citrix License Server or XenApp 5.  It does not matter what user accounts are set up on the license server or used to run the published applications.  The Citrix License Server simply listens, by default, on TCP Port 27000 for license requests.  If the license server has the licenses for the Citrix product being requested and has available user licenses, a license is checked out.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">196</post-id>	</item>
		<item>
		<title>What is &#8220;Citrix&#8221;?</title>
		<link>https://www.carlwebster.com/what-is-citrix/</link>
					<comments>https://www.carlwebster.com/what-is-citrix/#comments</comments>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Mon, 17 Nov 2008 23:17:08 +0000</pubDate>
				<category><![CDATA[XenApp]]></category>
		<category><![CDATA[XenDesktop 5.x]]></category>
		<category><![CDATA[XenServer]]></category>
		<category><![CDATA[citrix]]></category>
		<category><![CDATA[metaframe]]></category>
		<category><![CDATA[presentation server]]></category>
		<category><![CDATA[winframe]]></category>
		<category><![CDATA[xenapp]]></category>
		<guid isPermaLink="false">http://webster.skyrocket.ltd/?p=271</guid>

					<description><![CDATA[The first question usually asked by the Accidental Citrix Admin is "what is citrix?". There are two ways the term "citrix" is used: as a specific product or as the name of a company which provides that product. Usually when "citrix" is mentioned, the term is referring to software used to allow multiple user access to one or more applications hosted on another computer (normally a server).]]></description>
										<content:encoded><![CDATA[<p>The first question usually asked by the Accidental Citrix Admin is &#8220;what is Citrix?&#8221;.  There are two ways the term &#8220;Citrix&#8221; is used: as a specific product or as the name of a company that provides that product.  Usually, when &#8220;Citrix&#8221; is mentioned, the term is referring to software used to allow multiple user access to one or more applications hosted on another computer (normally a server).  The company, Citrix, refers to that capability as Application Virtualization. The product which provides that capability is now called Citrix Virtual Apps, and it was rebranded to that name in May 2018.  Before then it was called:</p>
<ul>
<li>XenApp (2008)</li>
<li>Presentation Server (2005)</li>
<li>MetaFrame XP Presentation Server (2003)</li>
<li>MetaFrame XP (2001)</li>
<li>MetaFrame (1998)</li>
<li>MultiWin (1997)</li>
<li>WinFrame (1995)</li>
<li>WinView (1993)</li>
<li>Citrix Multi-User (1991)</li>
<li>Citrix MULTIUSER OS/2 (1990)</li>
</ul>
<p>Citrix, the company, was founded in 1989 and I started working with MULTIUSER OS/2 in late 1989 or early 1990.  There were still vertical market application vendors using that product as late as the summer of 2003.  Citrix has primarily been known for their Application Virtualization product Citrix Virtual Apps but there are 15 distinct product families listed on the <a title="Citrix Product Families" href="https://www.citrix.com/products/" target="_blank" rel="noopener noreferrer">Citrix.com</a> web page:</p>
<ul>
<li>Citrix Workspace</li>
<li>Citrix Virtual Apps and Desktops</li>
<li>Citrix Content Collaboration</li>
<li>Citrix Endpoint Management</li>
<li>Citrix Managed Desktops</li>
<li>Citrix Hypervisor</li>
<li>ShareFile</li>
<li>Citrix ADC</li>
<li>Citrix Application Delivery Management</li>
<li>Citrix Gateway</li>
<li>Citrix Intelligent Traffic Management</li>
<li>Citrix SD-WAN</li>
<li>Citrix Web App Firewall</li>
<li>Citrix Analytics for Security</li>
<li>Citrix Analytics for Performance</li>
</ul>
<p>What is Citrix?  Citrix is a company that offers a wide range of products to serve almost any application delivery needs a business may have.  From the smallest business to the largest global spanning corporations, Citrix has products to help deliver your applications to your users in the most cost-efficient manner possible.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.carlwebster.com/what-is-citrix/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">271</post-id>	</item>
	</channel>
</rss>
