<?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 Cloud &#8211; Carl Webster</title>
	<atom:link href="https://www.carlwebster.com/category/citrix-cloud/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>Wed, 07 Jan 2026 19:47:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
<site xmlns="com-wordpress:feed-additions:1">42228915</site>	<item>
		<title>Citrix Cloud (DaaS) Documentation Script V1.26 (FINAL update by Webster)</title>
		<link>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-26-final-update-by-webster/</link>
					<comments>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-26-final-update-by-webster/#comments</comments>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Fri, 23 Jun 2023 17:22:30 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62589</guid>

					<description><![CDATA[Version 1.26 23-Jun-2023 Updated 30-Jun-2023 with information from Citrix that they gave me permission to include. It has been an honor and a privilege to provide this script to you&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.26 23-Jun-2023</p>
<p><strong>Updated 30-Jun-2023 with information from Citrix that they gave me permission to include.</strong></p>
<p>It has been an honor and a privilege to provide this script to you since 21-Sep-2020.  Shane O&#8217;Neill, this script is now all yours.</p>
<ul>
<li>In version 1.26, I am commenting out the catalog and machine VDA Upgrade  Service sections because the Get-VusCatalogInfo and Get-VusMachineInfo  cmdlets were not supposed to be made public. I added them to this script 11  months ago and now Citrix removed the cmdlets.</li>
<li>Added Computer policy
<ul>
<li>Profile Management\Advanced settings\Disable defragmentation for VHD  disk compaction</li>
<li>Profile Management\Advanced settings\Enable user-level policy settings</li>
<li>Profile Management\Advanced settings\Set priority order for user groups</li>
<li>VDA Data Collection\Security\Clipboard place metadata collection for  Security monitoring</li>
<li><span style="font-size: 1rem;">Added to Function OutputZoneSiteView:</span>
<ul>
<li><span style="font-size: 1rem;">Valid Edge Servers?</span></li>
<li><span style="font-size: 1rem;">Healthy? (Is the Zone healthy?)</span></li>
<li><span style="font-size: 1rem;">Primary? (Is the Zone the Primary Zone? There can (should) only be one  Primary Zone.)</span></li>
<li></li>
<li><span style="font-size: 1rem;"><strong>Information from Citrix.</strong></span></li>
<li></li>
<li><span style="font-size: 1rem;">1. What is a valid edge server?</span></li>
<li></li>
<li><span style="font-size: 1rem;">&#8220;HasValidEdgeServers&#8221; is a property of Zone objects. A Zone has valid  EdgeServers if there are any EdgeServers in that Zone. NOTE: The presence of the edge server record is dependent on the edge server data being returned from Citrix Cloud with sufficient/correct data such as the presence of a SID value for the edge server.</span></li>
<li></li>
<li><span style="font-size: 1rem;">Edge servers that do not have known SID values or cannot determine the  AD domains could be possibly seen as &#8216;invalid&#8217;.</span></li>
<li></li>
<li><span style="font-size: 1rem;">2. How do I fix an invalid edge server?</span></li>
<li></li>
<li><span style="font-size: 1rem;">See response to #1.</span></li>
<li></li>
<li><span style="font-size: 1rem;">3. What makes a zone healthy?</span></li>
<li></li>
<li><span style="font-size: 1rem;">A Zone is considered healthy if any of the EdgeServers in that Zone are healthy (i.e., not in LHC outage mode).</span></li>
<li></li>
<li><span style="font-size: 1rem;">4. What is an unhealthy Zone?</span></li>
<li></li>
<li><span style="font-size: 1rem;">A Zone is considered unhealthy if all of the EdgeServers in that Zone are unhealthy (i.e., in LHC outage mode).</span></li>
<li></li>
<li><span style="font-size: 1rem;">5. How do I fix an unhealthy Zone?</span></li>
<li></li>
<li><span style="font-size: 1rem;">Once an EdgeServer comes out of LHC outage mode, the Zone&#8217;s  &#8220;IsHealthy&#8221; property should change to &#8220;true&#8221;.</span></li>
<li></li>
<li><span style="font-size: 1rem;">LHC is designed to operate automatically, without the need for admin intervention. If a Zone&#8217;s &#8220;IsHealthy&#8221; property is &#8220;false&#8221; for an extended </span><span style="font-size: 1rem;">period of time, you can check whether there are any ongoing networking issues and/or reach out to Citrix customer support.</span></li>
<li></li>
<li><span style="font-size: 1rem;"><strong>End of Information from Citrix.</strong></span></li>
</ul>
</li>
<li></li>
<li><span style="font-size: 1rem;">Added two more settings configurable by Set-BrokerServiceConfigurationData</span>
<ul>
<li>Core.AssignmentPolicyMaxDesktops
<ul>
<li>Type: int</li>
<li>Default: 5</li>
<li>Info: Minimum=1, Maximum=100</li>
<li>Summary: The maximum value accepted for the MaxDesktops parameter of the New/Set-BrokerAssignmentPolicyRule cmdlets. This is limited here because enumeration creates MaxDesktops AOFU resources &#8211; which if inadvertently set to a very large value impacts enumeration performance and also consumes large amounts of memory.</li>
</ul>
</li>
</ul>
</li>
<li>Core.SetSiteDataPeriodSecs
<ul>
<li>Type: int</li>
<li>Default: 600</li>
<li>Info: Seconds, Minimum=30</li>
<li>Summary: The period in seconds for polling for updates to the site data.</li>
</ul>
</li>
<li>Lhc.OutageSummaryEventIntervalSecs
<ul>
<li>Type: int</li>
<li>Default: 120</li>
<li>Info: Seconds Minimum=60</li>
<li>Summary: The interval at which LHC would refresh the outage summary event.</li>
</ul>
</li>
<li>LhcState.PeerStatus
<ul>
<li>Type: string</li>
<li>Default:</li>
<li>Info:</li>
<li>Summary: The status information of peers participating in election process.</li>
</ul>
</li>
</ul>
</li>
<li>In Function OutputMachines, for ProvisioningType -eq &#8220;MCS&#8221; added:
<ul>
<li>Device Management Type &#8211; This can be Intune, IntuneWithCitrixTags, or None</li>
<li>Identity Type &#8211; This can be ActiveDirectory, AzureAD, HybridAzureAD, or  Workgroup</li>
<li>Master Image VM Date &#8211; The date and time when the VM snapshot copy used  by the provisioning scheme was made</li>
<li>MDM Enrollment &#8211; This can be Intune, IntuneWithCitrixTags, or None</li>
<li>Prepared Image Definition Name &#8211; The name for the image definition used for  the provisioning scheme</li>
<li>Prepared Image Version Number &#8211; The version number for the image version  used for the provisioning scheme</li>
<li>Windows Activation Type &#8211; Windows Activation Type set on the Master Image  which has a mapping with the Provisioning Scheme</li>
</ul>
</li>
<li>In Function OutputMachines:
<ul>
<li>Made the code consistent between the Daas and CVAD scripts</li>
<li>Added missing fields that were in one script but not the other</li>
<li>Added the Machine data metadatamap keys output that was in the Word  output but not in the Text and HTML output</li>
<li>Added Custom Properties For VMware
<ul>
<li>FolderId</li>
</ul>
</li>
<li>Renamed &#8220;Master VM&#8221; to &#8220;Master Image VM&#8221;</li>
</ul>
</li>
<li>Removed the IncludeVMImageHistory parameter as it wasn&#8217;t used</li>
<li>Renamed Computer policy
<ul>
<li>VDA Data Collection\VDA data collection for Performance Analytics to VDA  Data Collection\VDA data collection for Analytics</li>
</ul>
</li>
<li>Tested with Group Policy Module 2305 dated May 31, 2023
<ul>
<li>(<a href="https://www.citrix.com/downloads/citrix-cloud/product-software/xenapp- and-xendesktop-service.html" target="_blank" rel="noopener">https://www.citrix.com/downloads/citrix-cloud/product-software/xenapp- and-xendesktop-service.html</a>)</li>
</ul>
</li>
<li>Tested with PoSH SDK dated May 18, 2023
<ul>
<li>(<a href="https://download.apps.cloud.com/CitrixPoshSdk.exe" target="_blank" rel="noopener">https://download.apps.cloud.com/CitrixPoshSdk.exe</a>)</li>
</ul>
</li>
<li>Updated for 7.38</li>
</ul>
<p><strong>You can always find the most current script by going to </strong><a title="Current Scripts" href="https://www.carlwebster.com/downloads/" target="_blank" rel="noopener noreferrer"><strong>https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</strong></a></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-26-final-update-by-webster/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62589</post-id>	</item>
		<item>
		<title>Citrix XenApp/XenDesktop/Virtual Apps and Desktop Product Numbers and Versions</title>
		<link>https://www.carlwebster.com/citrix-xenapp-xendesktop-virtual-apps-and-desktop-product-numbers-and-versions/</link>
					<comments>https://www.carlwebster.com/citrix-xenapp-xendesktop-virtual-apps-and-desktop-product-numbers-and-versions/#comments</comments>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Tue, 06 Jun 2023 12:50:29 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[Citrix Virtual Apps and Desktops]]></category>
		<category><![CDATA[XenApp 7.8 through CVAD 2006]]></category>
		<category><![CDATA[XenApp/XenDesktop 7.0 - 7.7]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62556</guid>

					<description><![CDATA[Over the past several months, several people have requested a table of XenApp/XenDesktop/Virtual Apps and Desktops product versions and product names. PowerShell shows 7.35, but what is the corresponding product&#8230;]]></description>
										<content:encoded><![CDATA[<p>Over the past several months, several people have requested a table of XenApp/XenDesktop/Virtual Apps and Desktops product versions and product names. PowerShell shows 7.35, but what is the corresponding product name?</p>
<p>I have all that data in my documentation scripts. Here is the table I have built over the last ten years.</p>
<p>Maintaining this table after July 1, 2023, should be easy for whoever updates the list.</p>
<table>
<tbody>
<tr>
<td width="225"><strong>Product Version (PowerShell)</strong></td>
<td width="189"><strong>Product Version (Marketing)</strong></td>
</tr>
<tr>
<td width="225">7.46 (Thanks to Markus Z.)</td>
<td width="189">CVAD 2511</td>
</tr>
<tr>
<td width="225">7.45 (Thanks to Prateek A.)</td>
<td width="189">CVAD 2507</td>
</tr>
<tr>
<td width="225">7.44 (Thanks to Prateek A.)</td>
<td width="189">CVAD 2503</td>
</tr>
<tr>
<td width="225">7.43 (Thanks to Markus Z.)</td>
<td width="189">CVAD 2411</td>
</tr>
<tr>
<td width="225">7.42</td>
<td width="189">CVAD 2407</td>
</tr>
<tr>
<td width="225">7.41 (Thanks to Chris K.)</td>
<td width="189">CVAD 2402</td>
</tr>
<tr>
<td width="225">7.40 (Thanks to Chris K.)</td>
<td width="189">CVAD 2311</td>
</tr>
<tr>
<td width="225">7.39 (Thanks to Markus Z.)</td>
<td width="189">CVAD 2308</td>
</tr>
<tr>
<td width="225">7.38</td>
<td width="189">CVAD 2305</td>
</tr>
<tr>
<td width="225">7.37</td>
<td width="189">CVAD 2303</td>
</tr>
<tr>
<td width="225">7.36</td>
<td width="189">CVAD 2212</td>
</tr>
<tr>
<td width="225">7.35</td>
<td width="189">CVAD 2209</td>
</tr>
<tr>
<td width="225">7.34</td>
<td width="189">CVAD 2206</td>
</tr>
<tr>
<td width="225">7.33</td>
<td width="189">CVAD 2203</td>
</tr>
<tr>
<td width="225">7.32</td>
<td width="189">CVAD 2112</td>
</tr>
<tr>
<td width="225">7.31</td>
<td width="189">CVAD 2109</td>
</tr>
<tr>
<td width="225">7.30</td>
<td width="189">CVAD 2106</td>
</tr>
<tr>
<td width="225">7.29</td>
<td width="189">CVAD 2103</td>
</tr>
<tr>
<td width="225">7.28</td>
<td width="189">CVAD 2012</td>
</tr>
<tr>
<td width="225">7.27</td>
<td width="189">CVAD 2009</td>
</tr>
<tr>
<td width="225">7.26</td>
<td width="189">CVAD 2006</td>
</tr>
<tr>
<td width="225">7.25</td>
<td width="189">CVAD 2003</td>
</tr>
<tr>
<td width="225">7.24</td>
<td width="189">CVAD 1912</td>
</tr>
<tr>
<td width="225">7.23</td>
<td width="189">CVAD 1909</td>
</tr>
<tr>
<td width="225">7.22</td>
<td width="189">CVAD 1906</td>
</tr>
<tr>
<td width="225">7.21</td>
<td width="189">CVAD 1903</td>
</tr>
<tr>
<td width="225">7.20</td>
<td width="189">CVAD 1811</td>
</tr>
<tr>
<td width="225">7.19</td>
<td width="189">CVAD 1808</td>
</tr>
<tr>
<td width="225">7.18</td>
<td width="189">XA/XD 7.18</td>
</tr>
<tr>
<td width="225">7.17</td>
<td width="189">XA/XD 7.17</td>
</tr>
<tr>
<td width="225">7.16</td>
<td width="189">XA/XD 7.16</td>
</tr>
<tr>
<td width="225">7.15</td>
<td width="189">XA/XD 7.15</td>
</tr>
<tr>
<td width="225">7.14</td>
<td width="189">XA/XD 7.14</td>
</tr>
<tr>
<td width="225">7.13</td>
<td width="189">XA/XD 7.13</td>
</tr>
<tr>
<td width="225">7.12</td>
<td width="189">XA/XD 7.12</td>
</tr>
<tr>
<td width="225">7.11</td>
<td width="189">XA/XD 7.11</td>
</tr>
<tr>
<td width="225">7.9</td>
<td width="189">XA/XD 7.9</td>
</tr>
<tr>
<td width="225">7.8</td>
<td width="189">XA/XD 7.8</td>
</tr>
<tr>
<td width="225">7.7</td>
<td width="189">XA/XD 7.7</td>
</tr>
<tr>
<td width="225">7.6</td>
<td width="189">XA/XD 7.6</td>
</tr>
<tr>
<td width="225">7.5</td>
<td width="189">XA/XD 7.5</td>
</tr>
<tr>
<td width="225">7.1</td>
<td width="189">XD 7.1</td>
</tr>
<tr>
<td width="225">7.0</td>
<td width="189">XD 7.0</td>
</tr>
</tbody>
</table>
]]></content:encoded>
					
					<wfw:commentRss>https://www.carlwebster.com/citrix-xenapp-xendesktop-virtual-apps-and-desktop-product-numbers-and-versions/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62556</post-id>	</item>
		<item>
		<title>Citrix Cloud (DaaS) Documentation Script V1.25</title>
		<link>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-25/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Tue, 11 Apr 2023 15:07:02 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62510</guid>

					<description><![CDATA[Version 1.25 11-Apr-2023 Fixed six typos found when running a test for Citrix You can always find the most current script by going to https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/ Thanks Webster]]></description>
										<content:encoded><![CDATA[<p>Version 1.25 11-Apr-2023</p>
<ul>
<li>Fixed six typos found when running a test for Citrix</li>
</ul>
<p><strong>You can always find the most current script by going to </strong><a title="Current Scripts" href="https://www.carlwebster.com/downloads/" target="_blank" rel="noopener noreferrer"><strong>https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</strong></a></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62510</post-id>	</item>
		<item>
		<title>Citrix Cloud (DaaS) Documentation Script V1.24</title>
		<link>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-24/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Sat, 25 Mar 2023 11:22:01 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62495</guid>

					<description><![CDATA[Version 1.24 24-Mar-2023 Added settings configurable by Set-BrokerServiceConfigurationData Core.GetEntitlementTypePeriodHours Type: int Default: 24 Info: Hours Minimum=1 Summary: The time between checks in hours for GetEntitlementType check Core.LaunchResumeRetryPeriodSec Type: int Default:&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.24 24-Mar-2023</p>
<ul>
<li>Added settings configurable by Set-BrokerServiceConfigurationData
<ul>
<li>Core.GetEntitlementTypePeriodHours
<ul>
<li>Type: int</li>
<li>Default: 24</li>
<li>Info: Hours Minimum=1</li>
<li>Summary: The time between checks in hours for GetEntitlementType check</li>
</ul>
</li>
<li>Core.LaunchResumeRetryPeriodSec
<ul>
<li>Type: int</li>
<li>Default: 15</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: Period after which users of the XML service are hinted to retry launches that are delayed due to a resume request just being sent to that VDA  to satisfy launch.</li>
</ul>
</li>
<li>DBConnectionSettings.ResourceLimitRetryDelaySecs
<ul>
<li>Type: int</li>
<li>Default: 15</li>
<li>Info: Seconds Minimum=2</li>
<li>Summary: Interval between command batch retries when a resource limit appears to have been reached.</li>
</ul>
</li>
<li>HostingManagementSettings.MaxCompletedActionsToPurge
<ul>
<li>Type: int</li>
<li>Default: 700</li>
<li>Info: Minimum=100</li>
<li>Summary: Maximum completed power actions to purge in a single batch. This limit avoids timeouts/failures if for some reason huge numbers of actions have accumulated that need to be deleted.</li>
<li>The default value allows for about 2 million actions to be purged per day if needed (700 every 30 seconds).</li>
</ul>
</li>
<li>LhcState.IsFirstConfigSyncSuccess
<ul>
<li>Type: bool</li>
<li>Default: false</li>
<li>Info:</li>
<li>Summary: Indicates on the machine where the secondary broker resides that the secondary Broker successfully completed first config sync. An important function of this value is to ensure that if services are re-installed for any reason, the config sync ensures that we have the latest Lhc database.</li>
</ul>
</li>
<li>LhcState.LeaderInHAMode
<ul>
<li>Type: bool</li>
<li>Default: false</li>
<li>Info:</li>
<li>Summary: Indicates whether the leader connector is in outage mode.</li>
</ul>
</li>
<li>NameCacheSettings.AlwaysRefreshNamesOnRegistration
<ul>
<li>Type: bool</li>
<li>Default: false</li>
<li>Info:</li>
<li>Summary: Forces machine&#8217;s cached name entries to be updated each time it registers. By default names are only updated by normal cache refresh logic.</li>
</ul>
</li>
<li>SiteServicesSettings.FeatureTelemetryCollectionPeriodSec
<ul>
<li>Type: int</li>
<li>Default: 21600</li>
<li>Info: Seconds Minimum=1</li>
<li>Summary: Period between instances of reporting of feature use.</li>
</ul>
</li>
<li>XmsSettings.NFuseAppDataBulkLookupThreshold
<ul>
<li>Type: int</li>
<li>Default: 2</li>
<li>Info: Minimum=0</li>
<li>Summary: Defines the threshold number of resources in an AppData transaction above which a bulk lookup mechanism is used. For small numbers of resources the higher setup cost outweighs the improved efficiency.</li>
</ul>
</li>
</ul>
</li>
<li>Added Computer policy
<ul>
<li>ICA\HDX Direct</li>
<li>Profile Management\Advanced settings\Free space ration (%)</li>
<li>Profile Management\Advanced settings\Number of logoffs</li>
<li>Profile Management\App access control</li>
<li>Profile Management\Basic settings\Active write back on session lock and  disconnection</li>
<li>Profile Management\Profile container settings\Enable VHD disk compaction</li>
<li>User Personalization Layer\User Layer Exclusions</li>
</ul>
</li>
<li>Added User policy
<ul>
<li>ICA\File Redirection\Download file for Citrix Workspace app for Chrome OS/HTML5</li>
<li>ICA\File Redirection\File transfer for Citrix Workspace app for Chrome OS/HTML5</li>
<li>ICA\File Redirection\Upload file for Citrix Workspace app for Chrome OS/HTML5</li>
</ul>
</li>
<li>In Function GetRolePermissions:
<ul>
<li>Added new permissions
<ul>
<li>Director_Search_Transaction</li>
<li>Image_Create</li>
<li>Image_Delete</li>
<li>Image_EditProperties</li>
<li>Image_Read</li>
<li>SecureBrowser_NewConfiguration</li>
<li>SecureBrowser_Read</li>
<li>SecureBrowser_RemoveConfiguration</li>
<li>SecureBrowser_SetConfiguration</li>
</ul>
</li>
</ul>
</li>
<li>In Function OutputDesktopOSMachine:
<ul>
<li>test if there is a Desktop.DNSName</li>
<li>If not, test Desktop.MachineName</li>
<li>If not, test Desktop.HostedMachineName</li>
<li>If not, use error message &#8220;error, there was no name found for the Desktop&#8221;</li>
</ul>
</li>
<li>In Function OutputHosting:
<ul>
<li>update the list of Hypervisor Plugins</li>
<li>for Word output:
<ul>
<li>if there are no single-session OS or multi-session OS or sessions, output a  message and don&#8217;t waste a page</li>
<li>add a page break after outputting Session data</li>
</ul>
</li>
</ul>
</li>
<li>In Function OutputServerOSMachine:
<ul>
<li>test if there is a Server.DNSName</li>
<li>If not, test Server.MachineName</li>
<li>If not, test Server.HostedMachineName</li>
<li>If not, use error message &#8220;error, there was no name found for the Server&#8221;</li>
</ul>
</li>
<li>Tested with Group Policy Module 2303 dated March 20, 2023
<ul>
<li>(<a href="https://www.citrix.com/downloads/citrix-cloud/product-software/xenapp-and-xendesktop-service.html" target="_blank" rel="noopener">https://www.citrix.com/downloads/citrix-cloud/product-software/xenapp-and-xendesktop-service.html</a>)</li>
</ul>
</li>
<li>Tested with PoSH SDK dated March 17, 2023
<ul>
<li>(<a href="https://download.apps.cloud.com/CitrixPoshSdk.exe" target="_blank" rel="noopener">https://download.apps.cloud.com/CitrixPoshSdk.exe</a>)</li>
</ul>
</li>
<li>Updated for 7.37</li>
</ul>
<p><strong>You can always find the most current script by going to </strong><a title="Current Scripts" href="https://www.carlwebster.com/downloads/" target="_blank" rel="noopener noreferrer"><strong>https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</strong></a></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62495</post-id>	</item>
		<item>
		<title>Citrix Cloud (DaaS) Documentation Script V1.23</title>
		<link>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-23/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Fri, 06 Jan 2023 13:07:47 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62444</guid>

					<description><![CDATA[Version 1.23 8-Jan-2023 Added to Function OutputMachines, the Catalog&#8217;s reboot schedule if one exists https://docs.citrix.com/en-us/citrix-virtual-apps-desktops/install-configure/machine-catalogs-manage.html#update-the-catalog For Provisioning Custom Properties, added two Azure properties I hadn&#8217;t noticed before: https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-sdk/en/latest/MachineCreation/about_Prov_CustomProperties/ PageFileDiskDriveLetterOverride StorageTypeAtShutdown&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.23 8-Jan-2023</p>
<ul>
<li>Added to Function OutputMachines, the Catalog&#8217;s reboot schedule if one exists
<ul>
<li><a href="https://docs.citrix.com/en-us/citrix-virtual-apps-desktops/install-configure/machine-catalogs-manage.html#update-the-catalog" target="_blank" rel="noopener">https://docs.citrix.com/en-us/citrix-virtual-apps-desktops/install-configure/machine-catalogs-manage.html#update-the-catalog</a></li>
</ul>
</li>
<li>For Provisioning Custom Properties, added two Azure properties I hadn&#8217;t noticed before:
<ul>
<li><a href="https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-sdk/en/latest/MachineCreation/about_Prov_CustomProperties/" target="_blank" rel="noopener">https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-sdk/en/latest/MachineCreation/about_Prov_CustomProperties/</a></li>
<li>PageFileDiskDriveLetterOverride</li>
<li>StorageTypeAtShutdown</li>
</ul>
</li>
<li>In Function GetRolePermissions:
<ul>
<li>Added new permissions
<ul>
<li>DesktopGroup_CreateFolder</li>
<li>DesktopGroup_EditFolder</li>
<li>DesktopGroup_MoveFolder</li>
<li>DesktopGroup_RemoveFolder</li>
<li>PolicySets_AddScope</li>
<li>PolicySets_Manage</li>
<li>PolicySets_Read</li>
<li>PolicySets_RemoveScope</li>
<li>Setting_Edit</li>
<li>Setting_Read</li>
</ul>
</li>
</ul>
</li>
<li>In Function OutputMachines, fixed the misplaced code for image history and additional data</li>
</ul>
<p><strong>You can always find the most current script by going to </strong><a title="Current Scripts" href="https://www.carlwebster.com/downloads/" target="_blank" rel="noopener noreferrer"><strong>https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</strong></a></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62444</post-id>	</item>
		<item>
		<title>Citrix Cloud (DaaS) Documentation Script V1.22</title>
		<link>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-22/</link>
					<comments>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-22/#comments</comments>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Sun, 02 Oct 2022 22:41:45 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62385</guid>

					<description><![CDATA[Version 1.22 2-Oct-2022 Added Computer policy Profile Management\Advanced settings\Maximum number of VHDX disks for storing Outlook OST files Profile Management\Citrix Virtual Apps Optimization settings\Enable Citrix Virtual Apps Optimization Profile Management\Citrix&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.22 2-Oct-2022</p>
<ul>
<li>Added Computer policy
<ul>
<li>Profile Management\Advanced settings\Maximum number of VHDX disks for storing Outlook OST files</li>
<li>Profile Management\Citrix Virtual Apps Optimization settings\Enable Citrix Virtual Apps Optimization</li>
<li>Profile Management\Citrix Virtual Apps Optimization settings\Path to Citrix Virtual Apps optimization definitions:</li>
<li>Profile Management\File deduplication\Files to exclude from the shared store</li>
<li>Profile Management\File deduplication\Files to include from the shared store</li>
</ul>
</li>
<li>Added User policy
<ul>
<li>ICA\Printing\Client Printers\Client printer names</li>
<li>ICA\Server Limits\Session connection timer &#8211; Multi-session</li>
<li>ICA\Server Limits\Session connection timer interval (minutes) &#8211; Multi-session</li>
<li>ICA\Server Limits\Session idle timer &#8211; Multi-session</li>
<li>ICA\Server Limits\Session idle timer interval (minutes) &#8211; Multi-session</li>
</ul>
</li>
</ul>
<p><strong>You can always find the most current script by going to </strong><a title="Current Scripts" href="https://www.carlwebster.com/downloads/" target="_blank" rel="noopener noreferrer"><strong>https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</strong></a></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-22/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62385</post-id>	</item>
		<item>
		<title>Citrix Cloud (DaaS) Documentation Script V1.21</title>
		<link>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-21/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Thu, 22 Sep 2022 17:01:07 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62356</guid>

					<description><![CDATA[Version 1.21 22-Sep-2022 Tested with Group Policy Module 2206 dated June 28, 2022 (https://www.citrix.com/downloads/citrix-cloud/product-software/xenapp-and-xendesktop-service.html) Tested with PoSH SDK dated August 29, 2022 (https://download.apps.cloud.com/CitrixPoshSdk.exe) Updated Function ProcessScriptSetup to support multiple Section&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.21 22-Sep-2022</p>
<ul>
<li>Tested with Group Policy Module 2206 dated June 28, 2022 (<a href="https://www.citrix.com/downloads/citrix-cloud/product-software/xenapp-and-xendesktop-service.html" target="_blank" rel="noopener">https://www.citrix.com/downloads/citrix-cloud/product-software/xenapp-and-xendesktop-service.html</a>)</li>
<li>Tested with PoSH SDK dated August 29, 2022 (<a href="https://download.apps.cloud.com/CitrixPoshSdk.exe" target="_blank" rel="noopener">https://download.apps.cloud.com/CitrixPoshSdk.exe</a>)</li>
<li>Updated Function ProcessScriptSetup to support multiple Section items</li>
<li>Updated the script to allow the Section parameter to support multiple items</li>
<li>Updated the help text</li>
<li>Updated the ReadMe file</li>
</ul>
<p><strong>You can always find the most current script by going to </strong><a title="Current Scripts" href="https://www.carlwebster.com/downloads/" target="_blank" rel="noopener noreferrer"><strong>https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</strong></a></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62356</post-id>	</item>
		<item>
		<title>Citrix Cloud (DaaS) Documentation Script V1.20</title>
		<link>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-20/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Mon, 25 Jul 2022 15:21:45 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62306</guid>

					<description><![CDATA[Version 1.20 25-Jul-2022 Added support for Minimum Catalog Level 2206 (L7_34) Added the missing enums for VDAUpgrade.Type and VDAUpgrade.State to the Machine output You can always find the most current&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.20 25-Jul-2022</p>
<ul>
<li>Added support for Minimum Catalog Level 2206 (L7_34)</li>
<li>Added the missing enums for VDAUpgrade.Type and VDAUpgrade.State to the Machine output</li>
</ul>
<p><strong>You can always find the most current script by going to <a href="https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/" target="_blank" rel="noopener">https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</a></strong></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62306</post-id>	</item>
		<item>
		<title>Citrix Cloud (DaaS) Documentation Script V1.19</title>
		<link>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-19/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Sat, 16 Jul 2022 15:53:21 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62284</guid>

					<description><![CDATA[Version 1.19 16-Jul-2022 Added the missing enums for VDAUpgrade.Type and VDAUpgrade.State Type: Release type the VDA upgrades follow. Possible values are: NotSet &#8211; Upgrade release type was not set by&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.19 16-Jul-2022</p>
<ul>
<li>Added the missing enums for VDAUpgrade.Type and VDAUpgrade.State
<ul>
<li>Type:
<ul>
<li>Release type the VDA upgrades follow. Possible values are:</li>
<li>NotSet &#8211; Upgrade release type was not set by admin for this catalog.</li>
<li>CR &#8211; VDA upgrades follow CR release cycles.</li>
<li>LTSR &#8211; VDA upgrades follow LTSR release cycles.</li>
</ul>
</li>
<li>State:
<ul>
<li>Represents whether one or more VDAs in a catalog can be upgraded. Possible values are:</li>
<li>MissingUpgradeType &#8211; Admin has not yet set UpgradeType, which is required to figure out whether catalog can be upgraded.</li>
<li>UpgradeScheduled &#8211; Upgrade was scheduled or is in progress for this catalog.</li>
<li>UpgradeAvailable &#8211; One or more machines in this catalog can be upgraded.</li>
<li>UpToDate &#8211; All VDAs in this catalog are on the most recently released version.</li>
<li>Unknown &#8211; Temporary state where the service is currently figuring out one of the above states.</li>
</ul>
</li>
</ul>
</li>
<li>Updated the help text</li>
<li>Updated the ReadMe file</li>
</ul>
<p><strong>You can always find the most current script by going to <a href="https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/" target="_blank" rel="noopener">https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</a></strong></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62284</post-id>	</item>
		<item>
		<title>Citrix Cloud (DaaS) Documentation Script V1.18</title>
		<link>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-18/</link>
					<comments>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-18/#comments</comments>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Mon, 27 Jun 2022 10:37:16 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62232</guid>

					<description><![CDATA[Version 1.18 27-Jun-2022 Adding the missing $Script:Title variable if -Section Logging was selected Additional Word/PDF output cleanup Change almost every &#8220;Administrator&#8221; related table to a smaller font for  Word/PDF output&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.18 27-Jun-2022</p>
<ul>
<li>Adding the missing $Script:Title variable if -Section Logging was selected</li>
<li>Additional Word/PDF output cleanup</li>
<li>Change almost every &#8220;Administrator&#8221; related table to a smaller font for  Word/PDF output
<ul>
<li>Some of the new default names are very long and caused a few tables to go <span style="font-size: 1rem;">off the right side of the page </span></li>
</ul>
</li>
<li>For Machine Catalogs, add the Folder Name. This meant I had to change <span style="font-size: 1rem;">several cmdlets to use the CatalogName </span>property and a couple to use Name instead of CatalogName. The Name <span style="font-size: 1rem;">property, in my testing, has the new </span>folder name prepended to it</li>
<li>General code cleanup</li>
<li>In Function GetRolePermissions:
<ul>
<li>Added new permissions
<ul>
<li>AppGroupApplications_CreateFolder</li>
<li>AppGroupApplications_EditFolder</li>
<li>AppGroupApplications_MoveFolder</li>
<li>AppGroupApplications_RemoveFolder</li>
<li>ApplicationGroup_CreateFolder</li>
<li>ApplicationGroup_EditFolder</li>
<li>ApplicationGroup_MoveFolder</li>
<li>ApplicationGroup_RemoveFolder</li>
<li>AppLib_RemoveAppVServer</li>
<li>C365_EA_Acct</li>
<li>C365_EA_Broker</li>
<li>C365_EA_Hyp</li>
<li>C365_EA_Prov</li>
</ul>
</li>
</ul>
</li>
<li>In Function OutputMachine, add the Additional Data as discussed in the June <span style="font-size: 1rem;">2022 What&#8217;s New </span>
<ul>
<li>Retrieve region name information for Azure VMs, managed disks, snapshots, Azure VHD, and ARM template.</li>
<li>You can now display the region name information for an Azure VM, managed</li>
<li>disks, snapshots, Azure VHD,  and ARM template. This information is displayed for the resources on the <span style="font-size: 1rem;">master image when a machine </span>catalog is assigned.</li>
<li>For more information, see <a href="https://docs.citrix.com/en-us/citrix-daas/install-configure/resource-location/azure-resource-manager.html#retrieve-region-name-information-for-azure-vms-managed-disks-snapshots-azure-vhd-and-arm-template" target="_blank" rel="noopener">https://docs.citrix.com/en-us/citrix-daas/install-configure/resource-location/azure-resource-manager.html#retrieve-region-name-information-for-azure-vms-managed-disks-snapshots-azure-vhd-and-arm-template</a></li>
<li>In the call to function OutputMachineDetails, added two parameters to help  support VDAUpgrade</li>
</ul>
</li>
<li>In Function OutputMachineDetails:
<ul>
<li>Added two parameters to help support VDAUpgrade</li>
<li>Added VDA Upgrade section</li>
</ul>
</li>
<li>The June 2022 update to Citrix Cloud added support for single-session restart  schedules
<ul>
<li><a href="https://docs.citrix.com/en-us/citrix-daas/whats-new.html#june-2022" target="_blank" rel="noopener">https://docs.citrix.com/en-us/citrix-daas/whats-new.html#june-2022</a></li>
<li>Removed the restriction for showing restart schedules for multi-session OS <span style="font-size: 1rem;">only</span></li>
</ul>
</li>
<li>Updated the catalog&#8217;s custom properties for the Provisioning Scheme
<ul>
<li>These are the new custom properties documented at</li>
<li>https://developer-docs.citrix.com/projects/citrix-daas-sdk/en/latest/MachineCreation/about_Prov_CustomProperties/
<ul>
<li>New Custom Properties For Azure
<ul>
<li>EnableIntuneEnroll</li>
<li>InitialPageFileSizeInMB</li>
<li>MaxPageFileSizeInMB</li>
<li>PageFileDiskDriveLetter</li>
<li>StorageType</li>
<li>UseTempDiskForWBC</li>
</ul>
</li>
<li>New Custom Properties For Gcp
<ul>
<li>IdentityDiskStorageType</li>
<li>PersistOsDisk</li>
<li>PersistWBC</li>
<li>StorageType</li>
<li>WBCDiskStorageType</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Updated the ReadMe file</li>
<li>When checking for VDA Upgrade capability, add testing for MCS catalogs
<ul>
<li>Citrix added support for MCS catalogs in the June 2022 update</li>
<li><a href="https://docs.citrix.com/en-us/citrix-daas/whats-new.html#june-2022" target="_blank" rel="noopener">https://docs.citrix.com/en-us/citrix-daas/whats-new.html#june-2022</a></li>
<li>Extended support for VDA upgrade. Using the Full Configuration interface, you can now upgrade MCS-provisioned persistent machines. You can upgrade them on a per-catalog or a per-machine basis.</li>
<li>Added a per-machine VDA Upgrade section for eligible machines</li>
</ul>
</li>
</ul>
<p><strong>You can always find the most current script by going to <a href="https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/" target="_blank" rel="noopener">https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</a></strong></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-18/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62232</post-id>	</item>
		<item>
		<title>Citrix Cloud (DaaS) Documentation Script V1.17</title>
		<link>https://www.carlwebster.com/citrix-cloud-daas-documentation-script-v1-17/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Fri, 22 Apr 2022 17:07:53 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=62140</guid>

					<description><![CDATA[Version 1.17 21-Apr-2022 Added from the April 2022 update: Support for upgrading VDA machines (preview) Using the Full Configuration interface, you can now upgrade VDA machines for your Citrix DaaS&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.17 21-Apr-2022</p>
<ul>
<li>Added from the April 2022 update:
<ul>
<li>Support for upgrading VDA machines (preview)</li>
<li>Using the Full Configuration interface, you can now upgrade VDA machines for your Citrix DaaS deployment</li>
<li>You can upgrade them on a per-catalog or a per-machine basis</li>
<li>***The feature applies only to physical machines***</li>
</ul>
</li>
<li>Added one setting configurable by Set-BrokerServiceConfigurationData
<ul>
<li>Core.SaaSLicenseComponentCheckPeriodHours</li>
<li>Type: int</li>
<li>Default: 24</li>
<li>Info: Hours Minimum=1 Maximum=24</li>
<li>Summary: The time between checks in hours for SaaS license component check</li>
</ul>
</li>
<li>Added to a delivery group&#8217;s Autoscale section:
<ul>
<li>Arranged and renamed the output to reflect what is shown in the console</li>
<li>General
<ul>
<li>Delay powering off machines by __ minutes</li>
<li>Machine instance cost per hour ($)</li>
</ul>
</li>
<li>Schedule and Peak Times</li>
<li>Load-based Settings
<ul>
<li>During peak times capacity buffer (%)</li>
<li>During off-peak times capacity buffer (%)</li>
</ul>
</li>
<li>Dynamic Session Timeout
<ul>
<li>During peak times idle session timeout (seconds)</li>
<li>During off-peak times idle session timeout (seconds)</li>
<li>During peak times disconnected session timeout (seconds)</li>
<li>During off-peak times disconnected session timeout (seconds)</li>
</ul>
</li>
<li>Force User Logoff</li>
<li>Autoscaling Tagged Machines
<ul>
<li>Enable Autoscale for machine with tag</li>
<li>Control when Autoscale starts powering on tagged machines</li>
<li>When usage of untagged machines reaches (%) During peak times</li>
<li>When usage of untagged machines reaches (%) During off-peak times</li>
</ul>
</li>
</ul>
</li>
<li>Clean up some console output</li>
<li>For Function OutputMachineDetails, added a parameter $WhatType for Machine or Desktop</li>
<li>For the Summary Page, fixed the Word section headings from Heading4 to Heading2</li>
<li>In Function GetRolePermissions:
<ul>
<li>Renamed the App-V permissions group to Application Packages</li>
<li>Added new permissions
<ul>
<li>AppLib_PackageDiscovery_Create</li>
<li>AppLib_PackageDiscoveryProfile_Create</li>
<li>AppLib_PackageDiscoveryProfile_Remove</li>
<li>Catalog_CreateFolder</li>
<li>Catalog_EditFolder</li>
<li>Catalog_MoveFolder</li>
<li>Catalog_RemoveFolder</li>
<li>AutoTagRule_Create</li>
<li>AutoTagRule_Delete</li>
<li>AutoTagRule_Edit</li>
<li>AutoTagRule_Read</li>
<li>VdaUpgrade_CatalogManage</li>
<li>VdaUpgrade_MachineManage</li>
</ul>
</li>
</ul>
</li>
<li>In Function ProcessLicensing, update the product names, editions, and licensing models
<ul>
<li><a href="https://docs.citrix.com/en-us/citrix-daas/whats-new.html" target="_blank" rel="noopener">https://docs.citrix.com/en-us/citrix-daas/whats-new.html</a></li>
</ul>
</li>
<li>In Function ProcessScriptSetup:
<ul>
<li>If the SDK version is less than 7.34, end the script</li>
<li>If the Group Policy Snapin version is less than 7.33, end the script</li>
</ul>
</li>
<li>Replaced all Get-WmiObject with Get-CimInstance</li>
<li>Updated for CVAD 2203/7.33 and CVAD 2206/7.34</li>
<li>Updated the help text</li>
<li>Updated the ReadMe file</li>
</ul>
<p><strong>You can always find the most current script by going to <a href="https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/" target="_blank" rel="noopener">https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</a></strong></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">62140</post-id>	</item>
		<item>
		<title>Citrix Cloud Documentation Script V1.16</title>
		<link>https://www.carlwebster.com/citrix-cloud-documentation-script-v1-16/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Fri, 24 Dec 2021 14:56:00 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=61880</guid>

					<description><![CDATA[Version 1.16 24-Dec-2021 Added an additional error check after attempting to create the LocalSiteGPO PSDrive (thanks to Steven Taylor) If the PSDrive creation fails without an error, set $Policies and&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.16 24-Dec-2021</p>
<ul>
<li>Added an additional error check after attempting to create the LocalSiteGPO PSDrive (thanks to Steven Taylor)
<ul>
<li>If the PSDrive creation fails without an error, set $Policies and $Script:DoPolicies to $False and allow the script to continue</li>
</ul>
</li>
<li>Added Computer policy
<ul>
<li>HDX Analytics\HDX Insight for SD-WAN</li>
<li>ICA\Multi-Stream Connections\Multi-Stream virtual channel stream assignment
<ul>
<li>Drag and Drop &#8211; Stream 1</li>
</ul>
</li>
<li>Profile Management\Advanced settings\Customize storage path for VHDX files</li>
</ul>
</li>
<li>Added two more settings configurable by Set-BrokerServiceConfigurationData
<ul>
<li>Core.LaunchCheckFaultStates
<ul>
<li>Type: bool</li>
<li>Default: false</li>
<li>Info:</li>
<li>Summary: When true, indicates that selection of a VDA for a new session should not consider ones in fault state FailedToStart.</li>
</ul>
</li>
<li>Core.PhantomRegistrationSecs
<ul>
<li>Type: int</li>
<li>Default: 0</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: The time after reporting a VDA as being powered off that its registration request will be rejected. A value of 0 disables this behavior.</li>
</ul>
</li>
</ul>
</li>
<li>Added User policy
<ul>
<li>ICA\Graphics\Screen sharing</li>
</ul>
</li>
<li>Fixed the version check for the Group Policy Snapin (thanks to Steven Taylor)
<ul>
<li>Added the download location for the up-to-date Group Policy Snapin download to the error message</li>
</ul>
</li>
<li>Updated the ReadMe file</li>
</ul>
<p><strong>You can always find the most current script by going to <a href="https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/" target="_blank" rel="noopener">https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</a></strong></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">61880</post-id>	</item>
		<item>
		<title>Citrix Cloud Documentation Script V1.15 (Change Log Updated 1-Dec-2022)</title>
		<link>https://www.carlwebster.com/citrix-cloud-documentation-script-v1-15/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Tue, 07 Dec 2021 16:44:29 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=61843</guid>

					<description><![CDATA[Version 1.15 7-Dec-2021 I want to thank Guy Leech for all his help over the past 6+ weeks. We ran into numerous issues with getting this script ready for release.&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.15 7-Dec-2021</p>
<p>I want to thank Guy Leech for all his help over the past 6+ weeks. We ran into numerous issues with getting this script ready for release. Citrix made a lot of changes to &#8220;stuff&#8221; and neither Guy nor I have any hair left. We pulled it all out trying to figure out what Citrix broke, I mean, changed.</p>
<p>The changelog for this update is 688 lines!!!</p>
<p>I also want to thank those who suffered through testing the numerous updates to this version while Guy and I lost our hair and sanity trying to figure out what Citrix did and create workarounds for all the issues we found.</p>
<p>If you get PSDrive or &#8220;AuthHeader MISSING&#8221; errors, sorry, Guy and I have fixed all we can fix. The ball is in Citrix&#8217;s court.</p>
<ul>
<li>Added additional error checking for empty arrays before trying to output a Word table</li>
<li>Added extra error checking, validation, and messages when retrieving Citrix Cloud credentials
<ul>
<li>Reworked the logic for using Get-XDAuthentication and retrieving the CustomerID</li>
</ul>
</li>
<li>Added Function OutputReportFooter</li>
<li>Added Functions ProcessControllerServiceConfig and OutputControllerServiceConfig
<ul>
<li>Outputs data from Get-BrokerServiceConfigurationData</li>
<li>There are 66 possible settings configurable by Set-BrokerServiceConfigurationData</li>
<li>Since you have no access to set these registry keys and values on a Cloud Controller, use Set-BrokerServiceConfigurationData to configure the  setting and value</li>
<li>Set-BrokerServiceConfigurationData Core.MaxHeartbeatIntervalMs -SettingValue 360000</li>
<li>Running this will set the MaxHeartbeatIntervalMs to 6 minutes
<ul>
<li>Core.AllowMultipleRemotePCAssignments
<ul>
<li>Type: bool</li>
<li>Default: true</li>
<li>Info:</li>
<li>Summary: Controls whether to permit multiple automated user assignments to RemotePC machines.</li>
</ul>
</li>
<li>Core.AutoTagRuleIntervalsTimeSecs
<ul>
<li>Type: int</li>
<li>Default: 600</li>
<li>Info: Seconds Minimum=60</li>
<li>Summary: Time interval that Auto Tag Rule site service will run auto tagging<span style="font-size: 1rem;">Process.</span></li>
</ul>
</li>
<li>Core.DisableActiveSessionReconnect
<ul>
<li>Type: bool</li>
<li>Default: false</li>
<li>Info:</li>
<li>Summary: Indicates whether the ability to connect to an active desktop <span style="font-size: 1rem;">session from a different endpoint is disabled. By default it is possible to </span>connect to an active session from a different endpoint device without first disconnecting the session from the original endpoint.</li>
</ul>
</li>
<li>Core.FirstHeartbeatDistributionWidthSecs
<ul>
<li>Type: int</li>
<li>Default: 0</li>
<li>Info: Seconds Minimum=0 Maximum=1800</li>
<li>Summary: When set, causes intervals between the first and second ping messages immediately after registration to be randomized over the  specified distribution period but always centered on the normal ping interval (that is, half the value of HeartbeatPeriodMs). Thus, a distribution  width of 60 seconds causes pings to be randomized over intervals of  HeartbeatPeriodMs/2 +/- 30 seconds. A value of zero disables interval randomization.</li>
<li>The distribution width used is reduced if the specified value would result in ping intervals of less than MinHeartbeatPeriodMs, or within 30 seconds of  the ping timeout defined by HeartbeatPeriodMs or MaxHeartbeatIntervalMs.</li>
</ul>
</li>
<li>Core.FreeSessionThresholdForLoadEvaluation
<ul>
<li>Type: int</li>
<li>Default: 20</li>
<li>Info: Minimum=0</li>
<li>Summary: Threshold for number of free sessions that is checked after a session terminates, at or below which the effective load index of the  machine is immediately recalculated using the new <span style="font-size: 1rem;">session count. This  additional </span>evaluation maintains the figures used for load balancing in a more  timely <span style="font-size: 1rem;">fashion as the machine approaches </span>its configured session limit.</li>
<li>This setting is only applicable to multi-session machines.</li>
</ul>
</li>
<li>Core.HeartbeatDistributionWidthSecs
<ul>
<li>Type: int</li>
<li>Default: 0</li>
<li>Info: Seconds Minimum=0 Maximum=1800</li>
<li>Summary: When set, causes intervals between ping messages to be <span style="font-size: 1rem;">randomized over the specified distribution period but </span>always centered on the  normal ping interval (that is, half the value of <span style="font-size: 1rem;">HeartbeatPeriodMs). Thus, a  distribution </span>width of 60 seconds causes pings to be randomized over intervals  of <span style="font-size: 1rem;">HeartbeatPeriodMs/2 +/- 30 seconds. A value </span>of zero disables interval  randomization.</li>
<li>The distribution width used is reduced if the specified value would result in <span style="font-size: 1rem;">ping intervals of less than </span>MinHeartbeatPeriodMs, or within 30 seconds of the  ping timeout defined by <span style="font-size: 1rem;">HeartbeatPeriodMs or </span>MaxHeartbeatIntervalMs.</li>
</ul>
</li>
<li>Core.HeartbeatPeriodMs
<ul>
<li>Type: int</li>
<li>Default: 600000</li>
<li>Info: Milliseconds</li>
<li>Summary: Controls both the interval and timeouts used for the keep-alive  &#8216;pings&#8217; from the VDA.</li>
<li>This value is sent from the DDC to VDA and causes the VDA to ping the DDC at  an interval half that of the time specified by this setting. By default the DDC  will consider contact to have been lost, and discard the VDA&#8217;s registration, if no ping is received within the full time specified (i.e. the timeout <span style="font-size: 1rem;">is double the ping interval).</span></li>
<li>This setting is dynamic, that is, changing it immediately alters both the active <span style="font-size: 1rem;">ping interval for all VDAs and </span>the maximum interval enforced by the DDC.</li>
<li>The maximum period over which no ping is received before contact is considered to have been lost can be controlled independently of the VDA ping interval  itself using the MaxHeartbeatIntervalMs setting.</li>
</ul>
</li>
<li>Core.LaunchDelayedRetryPeriodSec
<ul>
<li>Type: int</li>
<li>Default: 30</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: Period after which users of the XML service are hinted to retry <span style="font-size: 1rem;">launches that are delayed due to a power on request just being sent to that </span>VDA to satisfy launch</li>
</ul>
</li>
<li>Core.LaunchRetryPeriodSec
<ul>
<li>Type: int</li>
<li>Default: 5</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: Period after which users of the XML service are hinted to retry <span style="font-size: 1rem;">launches that are delayed due to circumstances such </span>as VMs needing to be started to satisfy the launch.</li>
</ul>
</li>
<li>Core.LogonToleranceIsHardLimit
<ul>
<li>Type: bool</li>
<li>Default: false</li>
<li>Info:</li>
<li>Summary: When set, indicates that the concurrent logon tolerance policy</li>
<li>value used during brokering of shared sessions to</li>
<li>RDS VDAs should be treated as a hard limit. The launch fails if no VDA is</li>
<li>available that is not under the limit.</li>
</ul>
</li>
<li>Core.MachineSinBinStayTimeSecs
<ul>
<li>Type: int</li>
<li>Default: 60</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: Period during which new brokering requests are inhibited to a <span style="font-size: 1rem;">machine following a failed launch (applicable to </span>shared desktops only).</li>
</ul>
</li>
<li>Core.MaxDisconnectWaitTimeSecs
<ul>
<li>Type: int</li>
<li>Default: 10</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: Maximum time that the VDA will wait for VDI sessions to <span style="font-size: 1rem;">disconnect when requested as part of user-driven restart request from </span>StoreFront. This timeout value is sent to the VDA as part of the  disconnect <span style="font-size: 1rem;">request and thus has no impact on the overall request timeout if  there are </span>network connectivity issues (see  DisconnectOperationTimeOutSecs).</li>
</ul>
</li>
<li>Core.MaxLogoffWaitTimeSecs
<ul>
<li>Type: int</li>
<li>Default: 10</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: Maximum time that the VDA will wait for RDS sessions to logoff <span style="font-size: 1rem;">when requested as part of user-driven restart request from StoreFront. This </span>timeout value is sent to the VDA as part of the logoff request and thus  has no impact on the overall request timeout if there are network connectivity  issues <span style="font-size: 1rem;">(see LogoffOperationTimeOutSecs).</span></li>
</ul>
</li>
<li>Core.MaxRegistrationCompletionTimeSecs
<ul>
<li>Type: int</li>
<li>Default: 600</li>
<li>Info: Seconds Minimum=1</li>
<li>Summary: Maximum time within which the registration sequence for a single <span style="font-size: 1rem;">machine must complete. This refers to both immediate hard registrations, and </span>soft to hard registration transitions. If the registration fails to complete  within  this time then the machine&#8217;s partial registration is discarded by the  broker.</li>
</ul>
</li>
<li>Core.MaxSessionEstablishmentTimeSecs
<ul>
<li>Type: int</li>
<li>Default: 200</li>
<li>Info: Seconds Minimum=10</li>
<li>Summary: Used for logon ticket lifetime, VDA listening timeout, and deadline <span style="font-size: 1rem;">imposed by the broker for evidence of client connection.</span></li>
</ul>
</li>
<li>Core.MaxTimeForPrepareSecs
<ul>
<li>Type: int</li>
<li>Default: 60</li>
<li>Info: Seconds Minimum=5</li>
<li>Summary: A deadline imposed by the broker for launch preamble ahead of the <span style="font-size: 1rem;">PrepareSession call to the VDA. Following successful PrepareSession, the </span>MaxSessionEstablishmentTimeSecs setting will be applied to replace this <span style="font-size: 1rem;">initial timeout.</span></li>
</ul>
</li>
<li>Core.MaxTotalConcurrentMachineCommands
<ul>
<li>Type: int</li>
<li>Default: 70</li>
<li>Info: Minimum=10</li>
<li>Summary: Maximum Synchronous Machine Commands allowed to  be executing concurrently via the SDK. If a request for a further  machine command is received that would cause this limit to be  exceeded then the request is rejected without being performed.</li>
</ul>
</li>
<li>Core.MaxWorkers
<ul>
<li>Type: int</li>
<li>Default: 10000</li>
<li>Info: Minimum=0</li>
<li>Summary: The limit for the number of registered VDAs that the controller will  accept.</li>
</ul>
</li>
<li>Core.NonContactableSessionGracePeriodSecs
<ul>
<li>Type: int</li>
<li>Default: 30</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: Grace period after which a session would otherwise be considered <span style="font-size: 1rem;">non-contactable before automatic session hiding during reconnect can occur. </span>The grace period prevents transient failures from causing sessions to be <span style="font-size: 1rem;">hidden if a reconnect should occur just after the failure.</span></li>
<li>The grace period does not apply to sessions on managed machines where <span style="font-size: 1rem;">contact has also been lost with the hypervisor. Losing contact with both the </span>VDA and its hypervisor causes immediate session hiding during reconnect.</li>
</ul>
</li>
<li>Core.RoTPublicKeysUpdateMaxDelayHours
<ul>
<li>Type: int</li>
<li>Default: 168</li>
<li>Info: Hours Minimum=1</li>
<li>Summary: The maximum number of hours to wait before applying an update  of the Root of Trust public keys to the Broker database.</li>
</ul>
</li>
<li>Core.TestVdaCommunicationsTimeoutSecs
<ul>
<li>Type: int</li>
<li>Default: 5</li>
<li>Info: Seconds Minimum=1</li>
<li>Summary: The timeout when verifying the connection between the broker and  a VDA during a registration request.</li>
</ul>
</li>
<li>Core.UserDrivenResetDebounceTimeSecs
<ul>
<li>Type: int</li>
<li>Default: 480</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: The period after a user driven reset request during which a further <span style="font-size: 1rem;">reset request for the same VDA is ignored. This is used to avoid a user </span>continuously resetting the same desktop without it ever having a chance  to <span style="font-size: 1rem;">complete the restart and re-register. If the VDA shuts down, powers on, and </span>re-registers within the debounce period then the debounce timer is  cancelled <span style="font-size: 1rem;">and a further reset </span><span style="font-size: 1rem;">is allowed.</span></li>
<li>Only applies to single-session VDAs.</li>
</ul>
</li>
<li>Core.UserDrivenResetTimeoutMs
<ul>
<li>Type: int</li>
<li>Default: 15000</li>
<li>Info: Milliseconds Minimum=0</li>
<li>Summary: How long to allow for a user-driven reset power-off action to <span style="font-size: 1rem;">complete (success or fail).</span></li>
</ul>
</li>
<li>Core.UserDrivenShutDownTimeoutMs
<ul>
<li>Type: int</li>
<li>Default: 15000</li>
<li>Info: Milliseconds Minimum=0</li>
<li>Summary: How long to allow for a user-driven shutdown action to complete <span style="font-size: 1rem;">(success or fail).</span></li>
</ul>
</li>
<li>Core.UserNotify2SigningKeyLifetimeHours
<ul>
<li>Type: int</li>
<li>Default: 1440</li>
<li>Info: Minimum=1</li>
<li>Summary: Duration in hours since last key rotation after which the UserNotify2  signing keys will be rotated. Default 1440 in hours is 60 days.</li>
</ul>
</li>
<li>CHANGE LOG UPDATE 1-DEC-2022<br />
In version 2206, Citrix changed this from Hosting. to HostingManagement.<br />
I updated all the Hosting. entries to HostingManagement.</li>
<li>HostingManagement.AutoscalePowerActionQueuingPeriodSeconds
<ul>
<li>Type: int</li>
<li>Default: 120</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: Period over which an Autoscale power action queuing operation <span style="font-size: 1rem;">should take for each desktop group. When this limit is reached for a given </span>desktop group, Autoscale will effectively carry-on where it left off at the  next poll.</li>
<li>A value of zero removes the constraint of how long a power action queuing <span style="font-size: 1rem;">operation should take per desktop group.</span></li>
</ul>
</li>
<li>HostingManagement.ComplexPowerActionTimeoutSecs
<ul>
<li>Type: int</li>
<li>Default: 1200</li>
<li>Info: Seconds Minimum=300</li>
<li>Summary: Maximum time in seconds to wait for a notification that an active <span style="font-size: 1rem;">power action has either completed successfully or failed. If no such </span>notification is received then the action is marked as Lost (cancelled).</li>
<li>This timeout applies to &#8216;long&#8217; actions such as Shutdown or Restart where the <span style="font-size: 1rem;">action includes waiting for potentially lengthy Processing within the target </span>VDA.</li>
<li>See also SimplePowerActionTimeoutSecs</li>
</ul>
</li>
<li>HostingManagement.HclConnectionStateCachePeriodSecs
<ul>
<li>Type: int</li>
<li>Default: 30</li>
<li>Info: Minimum=0 Maximum=120</li>
<li>Summary: Period over which the HCL&#8217;s connection state to the actual <span style="font-size: 1rem;">hypervisor is cached. A value of zero disables caching causing the connection </span>state to be reevaluated on every access.</li>
</ul>
</li>
<li>HostingManagement.HypervisorConnectionMaxPollFailures
<ul>
<li>Type: int</li>
<li>Default: 4</li>
<li>Info: Minimum=1</li>
<li>Summary: If the periodic poll to allow the HCL machine manager to be <span style="font-size: 1rem;">recreated when needed, itself repeatedly fails due to an error other than </span>invalid credentials, then this value defines the maximum failures before  the current site service is aborted thus allowing a new one to start, potentially  on <span style="font-size: 1rem;">a  different DDC.</span></li>
</ul>
</li>
<li>HostingManagement.HypervisorConnectionPollMaxPeriodSecs
<ul>
<li>Type: int</li>
<li>Default: 300</li>
<li>Info: Seconds Minimum=30 Maximum=900</li>
<li>Summary: If the periodic poll to allow the HCL machine manager to be <span style="font-size: 1rem;">recreated when needed, itself repeatedly fails due to invalid credentials, the </span>poll interval is increased each time with the maximum interval being  capped at <span style="font-size: 1rem;">this value. Repeatedly attempting to create/discard the machine  manager is </span>expensive and invalid credentials are likely to require admin intervention to fix.</li>
</ul>
</li>
<li>HostingManagement.LegacyPeakTransitionDisconnectedBehaviour
<ul>
<li>Type: bool</li>
<li>Default: false</li>
<li>Info:</li>
<li>Summary: Controls whether to retain the legacy power policy peak transition  disconnected behavior for all desktop groups.</li>
</ul>
</li>
<li>HostingManagement.MaxFailedRegistrationsAllowed
<ul>
<li>Type: int</li>
<li>Default: 2</li>
<li>Info:</li>
<li>Summary: How many times a VM can fail to register before we put it into <span style="font-size: 1rem;">maintenance mode. A negative value means that we never automatically put a </span>VM into maintenance mode.</li>
</ul>
</li>
<li>HostingManagement.MaxRegistrationDelayMin
<ul>
<li>Type: int</li>
<li>Default: 20</li>
<li>Info: minutes</li>
<li>Summary: How long to wait in minutes after a VM is powered on before a <span style="font-size: 1rem;">failure to receive a registration </span><span style="font-size: 1rem;">from the VM is deemed a problem.</span></li>
<li>This setting is also used in combination with the <span style="font-size: 1rem;">RebootSchedule/MaxShutdownDelayMin setting to define the maximum </span>allowed time for a machine (either physical or a VM) to successfully  reboot during reboot schedule Processing.</li>
</ul>
</li>
<li>HostingManagement.MaxTimeBeforeStuckOnBootFaultSecs
<ul>
<li>Type: int</li>
<li>Default: 300</li>
<li>Info: Seconds</li>
<li>Summary: How long to wait in seconds after a machine starts for a notification <span style="font-size: 1rem;">that its VM tools are running. After this time with no notification, the  machine&#8217;s  fault state is changed to StuckOnBoot.</span></li>
</ul>
</li>
<li>HostingManagement.MaxTimeBeforeUnregisteredFaultSecs
<ul>
<li>Type: int</li>
<li>Default: 600</li>
<li>Info: Seconds</li>
<li>Summary: How long to wait in seconds after a machine started but remains <span style="font-size: 1rem;">unregistered with the Broker (with or without attempting to register). After </span>this timeout a machine&#8217;s fault state would be set to Unregistered.</li>
</ul>
</li>
<li>HostingManagement.ParallelDesktopGroupScalingMaxThreads
<ul>
<li>Type: int</li>
<li>Default: 5</li>
<li>Info: Minimum=0 Maximum=100</li>
<li>Summary: Maximum number of threads to use when scaling multiple desktop <span style="font-size: 1rem;">groups.</span></li>
</ul>
</li>
<li>HostingManagement.ParallelPowerStateReadMaxThreads
<ul>
<li>Type: int</li>
<li>Default: 5</li>
<li>Info: Minimum=0 Maximum=100</li>
<li>Summary: Maximum number of threads to use when reading multiple <span style="font-size: 1rem;">machine  states from the HCL in parallel. </span></li>
<li>Note: (1) Value does not apply to HCL plugins that support bulk power state <span style="font-size: 1rem;">operations (e.g. Azure).</span></li>
<li>(2) For Cloud, value is capped at 1 as the RemoteHCL does not support <span style="font-size: 1rem;">multiple concurrent operations, thus there&#8217;s no advantage in using multiple </span>threads.</li>
<li>(3) A value of zero forces use of a simple loop for all such operations. This puts <span style="font-size: 1rem;">all machine state reads and database writes into a single thread. This uses the </span>minimum resources but at the expense of throughput, and delayed database <span style="font-size: 1rem;">updates.</span></li>
</ul>
</li>
<li>HostingManagement.SimplePowerActionTimeoutSecs
<ul>
<li>Type: int</li>
<li>Default: 600</li>
<li>Info: Seconds Minimum=60</li>
<li>Summary: Maximum time in seconds to wait for a notification that an active <span style="font-size: 1rem;">power action has either completed successfully or failed. If no such </span>notification is received then the action is marked as Lost (cancelled).</li>
<li>This timeout applies to &#8216;short&#8217; actions such as TurnOn, Resume, etc. where the <span style="font-size: 1rem;">action only involves operation of the hypervisor with no dependency on </span>Processing within the target VDA.</li>
<li>See also ComplexPowerActionTimeoutSecs.</li>
</ul>
</li>
<li>IdleSessions.AutoSessionDisconnectGracePeriodSecs
<ul>
<li>Type: int</li>
<li>Default: 120</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: Grace period after which a reconnected session can be considered <span style="font-size: 1rem;">for disconnection by dynamic session time-outs. The grace period protects a </span>session from auto-disconnecting for the configured grace period after a <span style="font-size: 1rem;">reconnect, allowing the end-user to actually do something.</span></li>
<li>This grace period does not impact newly launched sessions.</li>
</ul>
</li>
<li>IdleSessions.MaxIdleSessionToTerminatePercent
<ul>
<li>Type: int</li>
<li>Default: 1</li>
<li>Info: Minimum=1 Maximum=100</li>
<li>Summary: Maximum number of sessions to terminate when load threshold on <span style="font-size: 1rem;">the machine and desktop group are hit.</span></li>
</ul>
</li>
<li>IdleSessions.MaxRetriesPerSession
<ul>
<li>Type: int</li>
<li>Default: 3</li>
<li>Info: Minimum=1</li>
<li>Summary: Maximum time a logoff/disconnect operation is retried before the <span style="font-size: 1rem;">session is put into a sin bin.</span></li>
</ul>
</li>
<li>IdleSessions.MaxSessionOperationWaitTimeSecs
<ul>
<li>Type: int</li>
<li>Default: 30</li>
<li>Info: Minimum=30</li>
<li>Summary: Maximum time a logoff/disconnect operation is to be performed in <span style="font-size: 1rem;">for the list of sessions on each worker.</span></li>
</ul>
</li>
<li>Lhc.ConfigSyncIntervalSeconds
<ul>
<li>Type: int</li>
<li>Default: 300</li>
<li>Info: Seconds Minimum=60 Maximum=3600</li>
<li>Summary: The interval Config Sync Service(CSS) will sync configuration from <span style="font-size: 1rem;">cloud ddc to connector.</span></li>
</ul>
</li>
<li>Logging.ConnectionLogLifetimeHours
<ul>
<li>Type: int</li>
<li>Default: 40</li>
<li>Info: Hours Minimum=0</li>
<li>Summary: Time for which connection log entries are kept before being <span style="font-size: 1rem;">purged. </span></li>
</ul>
</li>
<li>Logging.HypervisorAlertLifetimeHours
<ul>
<li>Type: int</li>
<li>Default: 168</li>
<li>Info: Hours Minimum=0</li>
<li>Summary: Time for which hypervisor alert entries are kept before being <span style="font-size: 1rem;">purged.</span></li>
</ul>
</li>
<li>Logging.HypervisorSummaryReportIntervalSecs
<ul>
<li>Type: int</li>
<li>Default: 300</li>
<li>Info: Seconds Minimum=60</li>
<li>Summary: Time in seconds between summary reports of hypervisor power <span style="font-size: 1rem;">action queue lengths being written to CDF and optionally Splunk.</span></li>
</ul>
</li>
<li>Logging.SlowDBAccessLogThresholdMs
<ul>
<li>Type: int</li>
<li>Default: 2000</li>
<li>Info: Milliseconds Minimum=1</li>
<li>Summary: Upper threshold for the period that a successful database <span style="font-size: 1rem;">transaction takes to complete before a message is written to CDF and </span>optionally to Splunk warning of slow database access. This threshold does  not <span style="font-size: 1rem;">apply to SDK &#8216;Get&#8217; queries that are covered by the </span>SlowSdkDBAccessLogThresholdMs setting.</li>
</ul>
</li>
<li>Logging.SlowSdkDBAccessLogThresholdMs
<ul>
<li>Type: int</li>
<li>Default: 5000</li>
<li>Info: Milliseconds Minimum=1</li>
<li>Summary: Upper threshold for the period that a successful SDK Get database <span style="font-size: 1rem;">query takes to complete before a message is written to CDF and optionally to </span>Splunk warning of slow database access.</li>
</ul>
</li>
<li>MachineCommandQueues.VdaCommandBufferExpiryTime
<ul>
<li>Type: int</li>
<li>Default: 120</li>
<li>Info: Seconds Minimum=0 Maximum=600</li>
<li>Summary: Maximum amount of time before commands must be sent to any of <span style="font-size: 1rem;">the buffered services if they have not already been dispatched.</span></li>
</ul>
</li>
<li>MachineCommandQueues.VdaCommandBufferSizeLimitKB
<ul>
<li>Type: int</li>
<li>Default: 128</li>
<li>Info: kibibytes Minimum=32 Maximum=1024</li>
<li>Summary: Maximum size of aggregated payloads before the commands that <span style="font-size: 1rem;">are buffered must be sent to the service.</span></li>
</ul>
</li>
<li>NameCache.DisableAutomaticDomainTrustSearch
<ul>
<li>Type: bool</li>
<li>Default: false</li>
<li>Info:</li>
<li>Summary: Disables automatic traversal of the trust relationships to the Citrix <span style="font-size: 1rem;">Broker Service controller&#8217;s computer domain used to identify domains and </span>forests available for performing name lookups. If disabled, only Domain <span style="font-size: 1rem;">Controllers in the controller’s domain, or Global Catalogs in the controller&#8217;s </span>forest are used for name lookups. When disabled, machine and  user names <span style="font-size: 1rem;">from remote forests are typically not available.</span></li>
</ul>
</li>
<li>NameCache.DisableDomainCaching
<ul>
<li>Type: bool</li>
<li>Default: false</li>
<li>Info:</li>
<li>Summary: Prevents persistent connections being held open to a Domain <span style="font-size: 1rem;">Controller in each domain visible to the Citrix Broker Service, but incurs </span>additional setup cost each time a name lookup is performed against a domain.</li>
</ul>
</li>
<li>NameCache.MachineNameLookupTimeoutMs
<ul>
<li>Type: int</li>
<li>Default: 3000</li>
<li>Info: Milliseconds Minimum=0</li>
<li>Summary: Maximum time to wait for machine name resolution during creation of a desktop.</li>
</ul>
</li>
<li>NameCache.NameRefreshExponentialBackoffMaximumMins
<ul>
<li>Type: int</li>
<li>Default: 7200</li>
<li>Info: Minutes Minimum=1</li>
<li>Summary: Maximum period after which cached AD user/group account name, <span style="font-size: 1rem;">or machine name details are refreshed in the case where the SAM name of  the  cached entity could not be obtained (the cache may thus either </span>contain no SAM name information, or potentially an out of date value).</li>
</ul>
</li>
<li>NameCache.NameRefreshMaximumPeriodSecs
<ul>
<li>Type: int</li>
<li>Default: 1800</li>
<li>Info: Seconds Minimum=0</li>
<li>Summary: Maximum time allowed for a name cache refresh to complete.</li>
</ul>
</li>
<li>NameCache.NameRefreshPeriodAfterErrorMins
<ul>
<li>Type: int</li>
<li>Default: 60</li>
<li>Info: Minutes Minimum=1</li>
<li>Summary: Starting period after which cached AD user/group account name, <span style="font-size: 1rem;">or  machine name details are refreshed in the case where the SAM name of </span>the cached entity could not be obtained (the cache may thus either contain no <span style="font-size: 1rem;">SAM name information, or potentially an out of date value). This period is </span>increased exponentially depending on the number of consecutive lookup <span style="font-size: 1rem;">failures.</span></li>
</ul>
</li>
<li>NameCache.NameRefreshPeriodMins
<ul>
<li>Type: int</li>
<li>Default: 1440</li>
<li>Info: Minutes Minimum=5</li>
<li>Summary: Period after which cached AD user/group account name, or <span style="font-size: 1rem;">machine name details are refreshed in the case where the SAM name of the </span>cached entity was successfully obtained.</li>
</ul>
</li>
<li>NameCache.UserNameLookupTimeoutMs
<ul>
<li>Type: int</li>
<li>Default: 3000</li>
<li>Info: Milliseconds Minimum=0</li>
<li>Summary: Maximum time to wait for user/group account name resolution <span style="font-size: 1rem;">during creation of SDK objects that expose informational account names.</span></li>
</ul>
</li>
<li>RebootSchedule.MaxShutdownDelayMin
<ul>
<li>Type: int</li>
<li>Default: 10</li>
<li>Info: Minutes Minimum=1 Maximum=60</li>
<li>Summary: Maximum time allowed for a VM to shutdown during reboot cycle <span style="font-size: 1rem;">Processing before the reboot of </span><span style="font-size: 1rem;">the VM is deemed to have failed.</span></li>
<li>This setting is also used in combination with the MaxRegistrationDelayMin <span style="font-size: 1rem;">setting to define the maximum allowed time for a machine (either physical or </span>VM) to successfully reboot during reboot schedule Processing.</li>
</ul>
</li>
<li>RebootSchedule.RebootCycleDataLifetimeHours
<ul>
<li>Type: int</li>
<li>Default: 336</li>
<li>Info: Hours Minimum=0</li>
<li>Summary: Time for which data for completed/cancelled/abandoned reboot <span style="font-size: 1rem;">cycles is retained before being purged.</span></li>
</ul>
</li>
<li>RebootSchedule.ShutdownTimeoutRecovery
<ul>
<li>Type: bool</li>
<li>Default: false</li>
<li>Info:</li>
<li>Summary: Causes VDAs that fail to shutdown within their allowed timeout <span style="font-size: 1rem;">period to be either powered off or reset as applicable. This avoids potentially </span>leaving VDAs hung in shutdown Processing, or (for RDS VDAs)  powered off <span style="font-size: 1rem;">after a reboot cycle, however it may result in loss of work for the  end user if </span>the VDA is simply too slow at shutting down.</li>
</ul>
</li>
<li>Xms.StableServerFarmDataCachePeriodSecs
<ul>
<li>Type: int</li>
<li>Default: 120</li>
<li>Info: Seconds Minimum=1 Maximum=600</li>
<li>Summary: Period over which a cached ServerFarmData response is <span style="font-size: 1rem;">considered valid for reuse when the Broker service is in stable operation.</span></li>
</ul>
</li>
<li>Xms.UnstableServerFarmDataCachePeriodSecs
<ul>
<li>Type: int</li>
<li>Default: 15</li>
<li>Info: Seconds Minimum=1 Maximum=600</li>
<li>Summary: Period over which a cached ServerFarmData response is <span style="font-size: 1rem;">considered valid for reuse when the Broker service is not in stable operation. </span>This includes periods when the service is starting-up or shutting down or <span style="font-size: 1rem;">when database connectivity has been lost.</span></li>
</ul>
</li>
<li>Xms.XmlStaIdentity
<ul>
<li>Type: string</li>
<li>Default:</li>
<li>Info:</li>
<li>Summary: Must be defined for the STA to function. Must contain only upper <span style="font-size: 1rem;">case letter and digit characters. Must be less than 32 characters long. Usually </span>of the form &#8216;STAXXXXXXXX&#8217; where XXXXXX is a hexadecimal number.</li>
</ul>
</li>
<li>Xms.XmlStaRefreshableTicketLifetimeInSeconds
<ul>
<li>Type: int</li>
<li>Default: 500</li>
<li>Info: Seconds</li>
<li>Summary: The time for which a refreshable ticket remains live (without being <span style="font-size: 1rem;">refreshed).</span></li>
</ul>
</li>
<li>Xms.XmlStaTicketLifetimeInSeconds
<ul>
<li>Type: int</li>
<li>Default: 100</li>
<li>Info: Seconds</li>
<li>Summary: The time for which a non-refreshable ticket remains live.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Added Parameter ReportFooter
<ul>
<li style="list-style-type: none;">
<ul>
<li>Outputs a footer section at the end of the report.</li>
<li>Report Footer
<ul>
<li>Report information:
<ul>
<li>Created with: &lt;Script Name&gt; &#8211; Release Date: &lt;Script Release Date&gt;</li>
<li>Script version: &lt;Script Version&gt;</li>
<li>Started on &lt;Date Time in Local Format&gt;</li>
<li>Elapsed time: nn days, nn hours, nn minutes, nn.nn seconds</li>
<li>Ran from domain &lt;Domain Name&gt; by user &lt;Username&gt;</li>
<li>Ran from the folder &lt;Folder Name&gt;</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Added support for Minimum Catalog Level 2106 (L7_30)</li>
<li>Added to all Citrix cmdlets that don&#8217;t use CCParams2: AdminAddress = <span style="font-size: 1rem;">$GLOBAL:XDSDKProxy and BearerToken = $GLOBAL:XDAuthToken</span></li>
<li>Added to CCParams2, AdminAddress = $GLOBAL:XDSDKProxy and <span style="font-size: 1rem;">BearerToken = $GLOBAL:XDAuthToken</span></li>
<li>Added User policy
<ul>
<li>ICA\Audio\Adaptive audio</li>
</ul>
</li>
<li>Before running the Function ProcessHosting, test to verify the XDHyp: <span style="font-size: 1rem;">PSDrive exists and if it doesn&#8217;t exist, don&#8217;t run the Function ProcessHosting</span></li>
<li>Changed from using LocalFarmGPO to LocalSiteGPO for the Citrix Policy <span style="font-size: 1rem;">PSDrive at the request of Citrix</span></li>
<li>Changed if $VDARegistryKeys is $True, only set $MachineCatalogs to $True if <span style="font-size: 1rem;">$MachineCatalogs and $DeliveryGroups are both $False </span>
<ul>
<li>If $DeliveryGroups is $True, $VDARegistryKeys is $True, and <span style="font-size: 1rem;">$MachineCatalogs is $False, $MachineCatalogs was set $True which </span>prevented machine details and VDA Registry keys from processing for  the <span style="font-size: 1rem;">delivery groups</span></li>
</ul>
</li>
<li>Changed more empty/blank values to use &#8220;-&#8221; to match all the other empty <span style="font-size: 1rem;">values</span></li>
<li>Changed the date format for the transcript and error log files from yyyy-MM-dd_HHmm format to the FileDateTime format
<ul>
<li>The format is yyyyMMddTHHmmssffff (case-sensitive, using a 4-digit year, 2-digit month, 2-digit day, the letter T as a time separator, 2-digit hour, 2-digit minute, 2-digit second, and 4-digit millisecond).</li>
<li>For example: 20221225T0840107271.</li>
</ul>
</li>
<li>Fixed a logic error in Function ProcessPolicySummary.
<ul>
<li>Instead of getting both Computer and User policies at one time (which didn&#8217;t <span style="font-size: 1rem;">work), get them separately</span></li>
</ul>
</li>
<li>Fixed a variable name typo in Function OutputMachines for text output</li>
<li>Fixed numerous issues with Text and HTML output</li>
<li>Fixed the German Table of Contents (Thanks to Rene Bigler)
<ul>
<li>From
<ul>
<li>&#8216;de-&#8216; { &#8216;Automatische Tabelle 2&#8217;; Break }</li>
</ul>
</li>
<li>To
<ul>
<li>&#8216;de-&#8216; { &#8216;Automatisches Verzeichnis 2&#8217;; Break }</li>
</ul>
</li>
</ul>
</li>
<li>For Function OutputMachineDetails, added a parameter $ADSearchBase
<ul>
<li>Before calling that function from Function ProcessMachineCatalogs and <span style="font-size: 1rem;">OutputDeliveryGroup, added the following lines:</span>
<ul>
<li>$TrustedDomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name</li>
<li>$context = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext( &#8220;domain&#8221;, $TrustedDomain )</li>
<li>$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain( $context )</li>
<li>$ADSearchBase = $domain.GetDirectoryEntry().DistinguishedName.Value</li>
</ul>
</li>
<li>To support this, added two functions from Michael B. Smith: getObject and <span style="font-size: 1rem;">__simpleSearch</span></li>
<li>Before calling Resolve-DNSName, test if the machine exists in Active <span style="font-size: 1rem;">Directory</span></li>
<li>If it doesn&#8217;t exist in AD, don&#8217;t test DNS</li>
</ul>
</li>
<li>In Function AbortScript, add test for the winword process and terminate it if it  is running
<ul>
<li>Added stopping the transcript log if the log was enabled and started</li>
</ul>
</li>
<li>In Function GetRolePermissions, added new permissions
<ul>
<li>GroupName Id Name</li>
<li>&#8212;&#8212;&#8212; &#8212; &#8212;-</li>
<li>Citrix Catalog Service EA_Acct Catalog Service Identity operations</li>
<li>Citrix Catalog Service EA_Broker Catalog Service Broker operations</li>
<li>Citrix Catalog Service EA_Hyp Catalog Service Hypervisor operations</li>
<li>Citrix Catalog Service EA_Prov Remove Desktop from Delivery Group (1)</li>
</ul>
</li>
<li>In Function GetVDARegistryKeys, sorted the VDA registry key paths in alpha  order</li>
<li>In Function OutputDeliveryGroupDetails, added -EA 0 to Get-BrokerMachineConfiguration
<ul>
<li>Added properties:
<ul>
<li>AutomaticRestartForUntaggedMachines</li>
<li>AutoscaleLogOffWarningMessage</li>
<li>AutoscaleLogOffWarningTitle</li>
<li>AutoscaleMaxSecondsBeforeForcedLogOffDuringOffPeak</li>
<li>AutoscaleMaxSecondsBeforeForcedLogOffDuringPeak</li>
<li>AutoscalingEnabled</li>
<li>It seems most people had no idea that Citrix added AutoScale in CVADS.</li>
<li><a href="https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-service-sdk/en/latest/Broker/Set-BrokerDesktopGroup/" target="_blank" rel="noopener">https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-service-sdk/en/latest/Broker/Set-BrokerDesktopGroup/</a></li>
<li><a href="https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-service-sdk/en/latest/Broker/New-BrokerDesktopGroup/" target="_blank" rel="noopener">https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-service-sdk/en/latest/Broker/New-BrokerDesktopGroup/</a></li>
<li><a href="https://docs.citrix.com/en-us/citrix-virtual-apps-desktops-service/manage-deployment/autoscale/schedule-based-and-load-based-settings.html#miscellaneous-settings" target="_blank" rel="noopener">https://docs.citrix.com/en-us/citrix-virtual-apps-desktops-service/manage-deployment/autoscale/schedule-based-and-load-based-settings.html#miscellaneous-settings</a></li>
<li>Go to July 2021 <a href="https://docs.citrix.com/en-us/citrix-virtual-apps-desktops-service/whats-new.html" target="_blank" rel="noopener">https://docs.citrix.com/en-us/citrix-virtual-apps-desktops-service/whats-new.html</a></li>
</ul>
</li>
<li>Only get a delivery group&#8217;s StoreFront server data if there is any machine  configuration data</li>
</ul>
</li>
<li>In Function OutputMachines, fix the headings and output for Text
<ul>
<li>Added new properties for MCS catalogs
<ul>
<li>CleanOnBoot</li>
<li>DedicatedTenancy</li>
<li>IdentityPoolName</li>
<li>ResetAdministratorPasswords</li>
<li>ZoneHealthy</li>
</ul>
</li>
<li>Added error check to verify that the variables $TempDiskCacheSize and  $TempMemoryCacheSize exist before using them</li>
<li>Added the catalog&#8217;s custom properties for the Provisioning Scheme</li>
<li>These are the custom properties documented at<br />
https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-service-sdk/en/latest/MachineCreation/about_Prov_CustomProperties/</p>
<ul>
<li>Custom Properties For Azure
<ul>
<li>DedicatedHostGroupId</li>
<li>DiskEncryptionSetId</li>
<li>IdentityDiskStorageType</li>
<li>LicenseType</li>
<li>MachinesPerStorageAccount</li>
<li>OsType</li>
<li>PersistOsDisk</li>
<li>PersistVm</li>
<li>PersistWBC</li>
<li>ResourceGroups</li>
<li>SchemaVersion</li>
<li>SharedImageGalleryReplicaMaximum</li>
<li>SharedImageGalleryReplicaRatio</li>
<li>SharedImageGalleryStorageAccountType (not documented but found in  testing)</li>
<li>StorageAccountsPerResourceGroup</li>
<li>StorageAccountType</li>
<li>UseEphemeralOsDisk</li>
<li>UseManagedDisks</li>
<li>UseSharedImageGallery</li>
<li>WBCDiskStorageType</li>
<li>Zones</li>
</ul>
</li>
<li>Custom Properties For Aws
<ul>
<li>AwsCaptureInstanceProperties</li>
<li>AwsOperationalResourcesTagging</li>
</ul>
</li>
<li>Custom Properties For Gcp
<ul>
<li>CatalogZones</li>
<li>CryptoKeyId</li>
</ul>
</li>
</ul>
</li>
<li>Added Image History for the catalog&#8217;s Provisioning Scheme
<ul>
<li>Provisioning Scheme Name</li>
<li>Date</li>
<li>Master Image VM</li>
<li>Master Image Note</li>
<li>Functional Level</li>
<li>Image Status</li>
</ul>
</li>
<li>Fixed the wrong variable name used to get MetadataMap.Keys data for  Word/PDF and Text output</li>
<li>Reordered the output in alphabetical order</li>
<li>Reworked creating several variables to reduce the number of lines of code,  which for me, makes the code more readable</li>
</ul>
</li>
<li>In Function OutputRoleDefinitions, fixed a logic error that prevented the  correct HTML output if both MSWord/PDF and HTML were used
<ul>
<li>Sort output by folder name and then permission name</li>
</ul>
</li>
<li>In Function OutputSiteSettings, add the following items:
<ul>
<li>Bypass Authentication for Cached Resources
<ul>
<li>Allows client to display cached resources without authentication</li>
</ul>
</li>
<li>Cloud Site License
<ul>
<li>Configures the single cloud license chosen to be used as the default one for  the site</li>
</ul>
</li>
<li>Cloud Valid Licenses
<ul>
<li>The valid cloud license SKUs</li>
</ul>
</li>
<li>Credential Forwarding to Cloud Allowed
<ul>
<li>The indicator that whether the Connector is allowed to forward user  credentials to cloud</li>
</ul>
</li>
<li>Default Reuse Machines Without Shutdown In Outage
<ul>
<li>The default ReuseMachinesWithoutShutdownInOutage used for new desktop  groups when no explicit value is provided</li>
</ul>
</li>
<li>Delete Resource Leases on Logoff
<ul>
<li>Forces client to delete all leases on explicit logoff</li>
</ul>
</li>
<li>Enable automatic assignment of multiple users for Remote PC Access</li>
<li>Load Balance Multi-Session Catalogs
<ul>
<li>Use vertical scaling when finding an RDS machine for a session launch</li>
</ul>
</li>
<li>Resource Lease Validity Period in Days
<ul>
<li>Validity period for a lease</li>
</ul>
</li>
<li>Resource Leasing Enabled
<ul>
<li>Enables lease syncing on client</li>
</ul>
</li>
<li>Telemetry Headless Launch Enabled
<ul>
<li>Enables client to perform headless telemetry launches</li>
</ul>
</li>
<li>Telemetry Launch Minimum Time Interval in Minutes
<ul>
<li>Configures minimum time interval (in minutes) between headless telemetry  launches</li>
</ul>
</li>
<li>Telemetry Launch Shadow Delay in Minutes
<ul>
<li>Configures delay (in minutes) between ICA-HDX launch and headless  telemetry launch</li>
</ul>
</li>
</ul>
</li>
<li>In Function OutputAppendixA, only output data when the arrays contain data</li>
<li>In Function OutputSiteSettings, removed &#8220;Is Secondary Broker&#8221;, as that is an  internal Citrix setting</li>
<li>In Function ProcessAdministrators, sort Administrators by Name</li>
<li>In Function ProcessScriptSetup, added tests for the SDK and Group Policy  Snapin versions
<ul>
<li>If the SDK version is less than 7.32, end the script</li>
<li>If the Group Policy Snapin version is less than 7.30, end the script</li>
</ul>
</li>
<li>In Function ProcessScriptSetup, added a variable for the Remote SDK and  Group Policy Snapin versions</li>
<li>If Policies are specified, verify both the User and Computer nodes exist in the  LocalSiteGPO PSDrive
<ul>
<li>If either is missing, retry five times</li>
<li>If either is still missing after five retries, end the script</li>
</ul>
</li>
<li>In Functions ShowScriptOptions and ProcessScriptEnd, added the  authentication profile name and SDK and Group Policy Snapin versions</li>
<li>In Functions AbortScript and SaveandCloseDocumentandShutdownWord, add  code from Guy Leech to test for the &#8220;Id&#8221; property before using it</li>
<li>Moved testing for authentication to after initializing tracsript logging</li>
<li>That should allow me to see in the transcript log if you successfully  authenticated</li>
<li>Removed the App-V Publishing section from the script as Citrix Cloud uses  App Packages, not App-V
<ul>
<li>I&#8217;ll figure out how to add App Packages later</li>
</ul>
</li>
<li>Removed the requirement for the Citrix.GroupPolicy.Commands.psm1 module  file (Thanks to Guy Leech for the help)
<ul>
<li>Added the following functions from the module to the script and cleaned up  the Citrix code
<ul>
<li>CreateDictionary</li>
<li>CreateObject</li>
<li>FilterString</li>
<li>Get-CitrixGroupPolicy</li>
<li>Get-CitrixGroupPolicyConfiguration</li>
<li>Get-CitrixGroupPolicyFilter</li>
</ul>
</li>
</ul>
</li>
<li>Replaced most script Exit calls with AbortScript to stop the transcript log if the  log was enabled and started</li>
<li>Reworked the use of LocalSiteGPO PSDrive to prevent multiple creations and  deletions</li>
<li>Some console output cleanup</li>
<li>There is an &#8220;odd&#8221; issue with the LocalSiteGPO PSDrive where it suddenly  loses the child nodes of either the User or Computer parent nodes
<ul>
<li>When this happens, the script cannot continue. I added a fatal terminating  error to the script for when this issue happens.</li>
<li>If you use -DEV to record errors, PowerShell records a terminating error:</li>
<li>PS&gt;TerminatingError(Get-ChildItem): &#8220;FailedToAuthenticate: AuthHeader  MISSING&#8221;</li>
<li>I look for this issue by looking for an array count of 0 and aborting the script:</li>
<li>Get-CitrixGroupPolicy :
<ul>
<li>FATAL ERROR.</li>
<li>The User node is missing for the PSDrive named LocalSiteGPO.</li>
<li>Script cannot Continue.</li>
</ul>
</li>
<li>At C:\webster\CC_Inventory_V1.ps1:nnnnn char:nn</li>
<li>+ &#8230; Policies += Get-CitrixGroupPolicy -DriveName LocalSiteGPO -PolicyName</li>
<li>..</li>
<li>+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</li>
<li>+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException</li>
<li>+ FullyQualifiedErrorId :</li>
<li>Microsoft.PowerShell.Commands.WriteErrorException,Get-CitrixGroupPolicy</li>
<li>VERBOSE: mm/dd/yyyy hh:mm:ss AM: System Cleanup</li>
<li>VERBOSE: mm/dd/yyyy hh:mm:ss AM: Script has been aborted</li>
<li>If you immediately rerun the script in the same PoSH session, the error usually  is gone</li>
<li>I try to catch this at the beginning of the script, but sometimes one of the  nodes just disappears</li>
</ul>
</li>
<li>Updated for CVAD 2109/7.31 and CVAD 2112/7.32</li>
<li>Updated Functions SaveandCloseTextDocument and  SaveandCloseHTMLDocument to add a &#8220;Report Complete&#8221; line</li>
<li>Updated Functions ShowScriptOptions and ProcessScriptEnd to add  $ReportFooter</li>
<li>Updated the help text</li>
<li>Updated the expired link for the ReadMe file
<ul>
<li><a href="https://carlwebster.sharefile.com/d-s1ef10b6883eb473fa2f4eef00be83799" target="_blank" rel="noopener">https://carlwebster.sharefile.com/d-s1ef10b6883eb473fa2f4eef00be83799</a></li>
</ul>
</li>
<li>Updated the ReadMe file</li>
</ul>
<p><strong>You can always find the most current script by going to <a href="https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/" target="_blank" rel="noopener">https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</a></strong></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">61843</post-id>	</item>
		<item>
		<title>Citrix Cloud Documentation Script V1.14</title>
		<link>https://www.carlwebster.com/citrix-cloud-documentation-script-v1-14/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Thu, 29 Jul 2021 15:03:17 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=44945</guid>

					<description><![CDATA[Version 1.14 29-Jul-2021 Added Computer policy ICA\Multi-Stream Connections\Multi-Port Policy Profile Management\Advanced settings\Enable credential-based access to user stores Profile Management\Advanced settings\Replicate user stores &#8211; Paths to replicate a user store Profile Management\File system\Large&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.14 29-Jul-2021</p>
<ul>
<li>Added Computer policy
<ul>
<li>ICA\Multi-Stream Connections\Multi-Port Policy</li>
<li>Profile Management\Advanced settings\Enable credential-based access to user stores</li>
<li>Profile Management\Advanced settings\Replicate user stores &#8211; Paths to replicate a user store</li>
<li>Profile Management\File system\Large File Handling List &#8211; Files to be created as symbolic links</li>
<li>Profile Management\File system\Synchronization\Accelerate folder mirroring</li>
<li>Profile Management\Profile container settings\Enable local caching for profile containers</li>
<li>Profile Management\Profile container settings\Folders to exclude in profile container</li>
<li>Profile Management\Profile container settings\Folders to include in profile container</li>
<li>VDA Data Collection\VDA data collection for Performance Analytics</li>
</ul>
</li>
<li>Added to Delivery Group details, &#8220;Allow session reconnect in maintenance mode&#8221;</li>
<li>Added User policy
<ul>
<li>ICA\Browser Content Redirection\Allow Bidirectional Content Redirection</li>
<li>ICA\Browser Content Redirection\Allowed URLs to be redirected to Client</li>
<li>ICA\Browser Content Redirection\Allowed URLs to be redirected to VDA</li>
<li>ICA\Desktop launches</li>
<li>ICA\Graphics\Graphic status indicator</li>
</ul>
</li>
<li>Changed the array built for the User policy setting ICA\Printing\Universal Printing\Universal printing optimization defaults from splitting on &#8220;,&#8221; to splitting on &#8220;;&#8221;</li>
<li>Changed the processing for the following policy settings. When they are Disabled in the console, the State value is still Enabled. If the State property is Enabled and the Value property is &#8220;&#8221;, then show the policy setting as disabled.
<ul>
<li>ICA\Rendezvous proxy configuration</li>
<li>Profile Management\Basic settings\Migrate user store</li>
<li>Profile Management\Basic settings\Path to user store</li>
<li>Profile Management\Cross-Platform settings\Path to cross-platform definitions</li>
<li>Profile Management\Cross-Platform settings\Path to cross-platform settings store</li>
<li>Profile Management\Log settings\Path to log file</li>
<li>Profile Management\Profile handling\Path to the template profile</li>
<li>Profile Management\Citrix Virtual Apps Optimization settings\Path to Citrix Virtual Apps optimization definitions:</li>
<li>ICA\Multimedia\Browser Content Redirection Proxy Configuration</li>
<li>Profile Management\Folder Redirection\AppData(Roaming)\AppData(Roaming) path</li>
<li>Profile Management\Folder Redirection\Contacts\Contacts path</li>
<li>Profile Management\Folder Redirection\Desktop\Desktop path</li>
<li>Profile Management\Folder Redirection\Documents\Documents path</li>
<li>Profile Management\Folder Redirection\Downloads\Downloads path</li>
<li>Profile Management\Folder Redirection\Favorites\Favorites path</li>
<li>Profile Management\Folder Redirection\Links\Links path</li>
<li>Profile Management\Folder Redirection\Music\Music path</li>
<li>Profile Management\Folder Redirection\Pictures\Pictures path</li>
<li>Profile Management\Folder Redirection\Saved Games\Saved Games path</li>
<li>Profile Management\Folder Redirection\Searches\Searches path</li>
<li>Profile Management\Folder Redirection\Start Menu\Start Menu path</li>
<li>Profile Management\Folder Redirection\Videos\Videos path</li>
</ul>
</li>
<li>Changed the way the array was built and processed for ICA\Multi-Stream Connections\Multi-Port Policy\CGP default port and CGP default port priority</li>
<li>Cleaned up text output for policy settings</li>
<li>Fixed numerous typos in Switch statements for policy settings</li>
<li>Fixed wrong variable name used to create array for Virtual Delivery Agent Settings\Monitoring\List of applications excluded from failure monitoring</li>
<li>For Computer policy setting ICA\Keyboard and IME\Client keyboard layout synchronization and IME improvement, add Disabled option to Switch statement</li>
<li>Renamed Computer policy
<ul>
<li>ICA\Local App Access\URL redirection blacklist to ICA\Local App Access\URL redirection black list</li>
<li>ICA\WebSockets\WebSocket connections to ICA\WebSockets\WebSockets connections</li>
</ul>
</li>
<li>Update the Site version Switch statement for version 7.28/2012, 7.29/2103, and 7.30/2106</li>
</ul>
<p><strong>You can always find the most current script by going to <a href="https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/" target="_blank" rel="noopener">https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</a></strong></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44945</post-id>	</item>
		<item>
		<title>17 Building Webster&#8217;s Lab V2 – Additional vCenter Configuration</title>
		<link>https://www.carlwebster.com/17-building-websters-lab-v2-additional-vcenter-configuration/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Tue, 15 Jun 2021 09:43:18 +0000</pubDate>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[Citrix Virtual Apps and Desktops]]></category>
		<category><![CDATA[VMware]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=31824</guid>

					<description><![CDATA[[Updated 29-Aug-2021] Before getting to work adding Citrix Virtual Apps and Desktops (CVAD), and VMware Horizon to the lab, there are a few additional items on the vCenter to-do list.&#8230;]]></description>
										<content:encoded><![CDATA[<p>[Updated 29-Aug-2021]</p>
<p>Before getting to work adding Citrix Virtual Apps and Desktops (CVAD), and VMware Horizon to the lab, there are a few additional items on the vCenter to-do list.</p>
<ol>
<li>Join vCenter to the lab&#8217;s Active Directory (AD) domain</li>
<li>Add the lab&#8217;s AD to the SSO</li>
<li>Create a Citrix related service account with minimum vCenter permissions for the hosting connection in Citrix Studio and with Citrix App Layering</li>
<li>Create a VMware related service account with minimum vCenter permissions for VMware Horizon</li>
<li>Create a Read-only account for use with monitoring software, like ControlUp and Goliath Technologies</li>
</ol>
<p>Log in to vCenter.</p>
<h2>Active Directory</h2>
<p>From the <em>Menu</em> dropdown, select <em>Administration</em>, as shown in Figure 1.</p>
<figure id="attachment_31827" aria-describedby="caption-attachment-31827" style="width: 533px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure001-16.png" target="_blank" rel="noopener"><img fetchpriority="high" decoding="async" class="wp-image-31827 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure001-16.png" alt="Figure 1" width="533" height="683" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure001-16.png 533w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure001-16-234x300.png 234w" sizes="(max-width: 533px) 100vw, 533px" /></a><figcaption id="caption-attachment-31827" class="wp-caption-text">Figure 1</figcaption></figure>
<p>Click <em>Configuration</em>, <em>Active Directory Domain</em>, and click <em>Join AD</em>, as shown in Figure 2.</p>
<figure id="attachment_31828" aria-describedby="caption-attachment-31828" style="width: 707px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure002-16.png" target="_blank" rel="noopener"><img decoding="async" class="wp-image-31828 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure002-16.png" alt="Figure 2" width="707" height="653" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure002-16.png 707w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure002-16-325x300.png 325w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure002-16-600x554.png 600w" sizes="(max-width: 707px) 100vw, 707px" /></a><figcaption id="caption-attachment-31828" class="wp-caption-text">Figure 2</figcaption></figure>
<p>Enter the <em>Domain</em>, a <em>Username</em>, a <em>Password</em>, and click <em>JOIN</em>, as shown in Figure 3.</p>
<p>If you want the vCenter computer account in a specific Organizational Unit (OU), as I do, enter the <em>Organization Unit</em>.</p>
<figure id="attachment_31829" aria-describedby="caption-attachment-31829" style="width: 573px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure003-16.png" target="_blank" rel="noopener"><img decoding="async" class="wp-image-31829 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure003-16.png" alt="Figure 3" width="573" height="375" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure003-16.png 573w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure003-16-458x300.png 458w" sizes="(max-width: 573px) 100vw, 573px" /></a><figcaption id="caption-attachment-31829" class="wp-caption-text">Figure 3</figcaption></figure>
<p>The vCenter appliance is now a domain member but needs a restart.</p>
<p>From the <em>Menu</em> dropdown, select <em>VMs and Templates</em>, as shown in Figure 4.</p>
<figure id="attachment_31830" aria-describedby="caption-attachment-31830" style="width: 327px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure004-16.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31830 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure004-16.png" alt="Figure 4" width="327" height="338" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure004-16.png 327w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure004-16-290x300.png 290w" sizes="auto, (max-width: 327px) 100vw, 327px" /></a><figcaption id="caption-attachment-31830" class="wp-caption-text">Figure 4</figcaption></figure>
<p>Expand the cluster, right-click the vCenter VM, click <em>Power</em>, and click <em>Restart Guest OS</em>, as shown in Figure 5.</p>
<figure id="attachment_31831" aria-describedby="caption-attachment-31831" style="width: 603px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure005-16.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31831 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure005-16.png" alt="Figure 5" width="603" height="498" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure005-16.png 603w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure005-16-363x300.png 363w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure005-16-600x496.png 600w" sizes="auto, (max-width: 603px) 100vw, 603px" /></a><figcaption id="caption-attachment-31831" class="wp-caption-text">Figure 5</figcaption></figure>
<p>Click <em>Yes</em> to confirm the restart, as shown in Figure 6.</p>
<figure id="attachment_31832" aria-describedby="caption-attachment-31832" style="width: 575px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure006-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31832 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure006-15.png" alt="Figure 6" width="575" height="206" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure006-15.png 575w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure006-15-530x190.png 530w" sizes="auto, (max-width: 575px) 100vw, 575px" /></a><figcaption id="caption-attachment-31832" class="wp-caption-text">Figure 6</figcaption></figure>
<p>Wait about 10 minutes before trying to log in to vCenter.</p>
<p>If you specified an OU to place the vCenter computer account while waiting for the vCenter appliance to restart, go to one of the domain controllers and open the Active Directory Users and Computers console. Browse to the OU specified and verify the vCenter computer account exists, as shown in Figure 7.</p>
<figure id="attachment_31833" aria-describedby="caption-attachment-31833" style="width: 699px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure007-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31833 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure007-15.png" alt="Figure 7" width="699" height="348" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure007-15.png 699w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure007-15-530x264.png 530w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure007-15-600x299.png 600w" sizes="auto, (max-width: 699px) 100vw, 699px" /></a><figcaption id="caption-attachment-31833" class="wp-caption-text">Figure 7</figcaption></figure>
<p>At this point, you must use the administrator vCenter account to log in. Even though we joined vCenter to the AD domain, the AD domain isn&#8217;t a Single Sign-On domain yet.</p>
<p>Once logged on to vCenter, go back to Administration/Single Sign On/Configuration, as shown in Figure 8.</p>
<figure id="attachment_31834" aria-describedby="caption-attachment-31834" style="width: 282px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure008-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31834 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure008-15.png" alt="Figure 8" width="282" height="659" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure008-15.png 282w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure008-15-128x300.png 128w" sizes="auto, (max-width: 282px) 100vw, 282px" /></a><figcaption id="caption-attachment-31834" class="wp-caption-text">Figure 8</figcaption></figure>
<p>Click <em>Identity Sources</em> and click <em>ADD IDENTITY SOURCE</em>, as shown in Figure 9.</p>
<figure id="attachment_31835" aria-describedby="caption-attachment-31835" style="width: 343px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure009-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31835 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure009-15.png" alt="Figure 9" width="343" height="290" /></a><figcaption id="caption-attachment-31835" class="wp-caption-text">Figure 9</figcaption></figure>
<p>Select <em>Active Directory (Windows Integrated Authentication)</em> from the Identity source type dropdown. If it is not already populated, enter the <em>Domain name</em>, select <em>Use machine account</em>, and click <em>ADD</em>, as shown in Figure 10.</p>
<figure id="attachment_31836" aria-describedby="caption-attachment-31836" style="width: 862px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure010-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31836 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure010-15.png" alt="Figure 10" width="862" height="440" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure010-15.png 862w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure010-15-530x271.png 530w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure010-15-768x392.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure010-15-600x306.png 600w" sizes="auto, (max-width: 862px) 100vw, 862px" /></a><figcaption id="caption-attachment-31836" class="wp-caption-text">Figure 10</figcaption></figure>
<p>The AD domain now shows as an Identity Source, as shown in Figure 11.</p>
<figure id="attachment_31837" aria-describedby="caption-attachment-31837" style="width: 1033px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure011-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31837 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure011-15.png" alt="Figure 11" width="1033" height="404" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure011-15.png 1033w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure011-15-530x207.png 530w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure011-15-900x352.png 900w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure011-15-768x300.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure011-15-600x235.png 600w" sizes="auto, (max-width: 1033px) 100vw, 1033px" /></a><figcaption id="caption-attachment-31837" class="wp-caption-text">Figure 11</figcaption></figure>
<p>We are not yet ready to log in to vCenter with AD credentials. First, we must add users and groups from the AD domain to a vCenter security role.</p>
<p>Click <em>Global Permissions</em>, as shown in Figure 12.</p>
<figure id="attachment_31838" aria-describedby="caption-attachment-31838" style="width: 341px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure012-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31838 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure012-15.png" alt="Figure 12" width="341" height="664" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure012-15.png 341w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure012-15-154x300.png 154w" sizes="auto, (max-width: 341px) 100vw, 341px" /></a><figcaption id="caption-attachment-31838" class="wp-caption-text">Figure 12</figcaption></figure>
<p>Click <em>+</em> (Plus sign) as shown in Figure 13.</p>
<figure id="attachment_31839" aria-describedby="caption-attachment-31839" style="width: 405px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure013-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31839 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure013-15.png" alt="Figure 13" width="405" height="264" /></a><figcaption id="caption-attachment-31839" class="wp-caption-text">Figure 13</figcaption></figure>
<p>Select the AD domain name from the <em>Domain</em> dropdown, type <strong>Domain Admins</strong> in the <em>User/Group</em> field, for <em>Role, </em>select <em>Administrator, </em>select <em>Propagate to children</em>, and click <em>OK</em>, as shown in Figure 14.</p>
<figure id="attachment_31840" aria-describedby="caption-attachment-31840" style="width: 574px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure014-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31840 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure014-15.png" alt="Figure 14" width="574" height="427" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure014-15.png 574w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure014-15-403x300.png 403w" sizes="auto, (max-width: 574px) 100vw, 574px" /></a><figcaption id="caption-attachment-31840" class="wp-caption-text">Figure 14</figcaption></figure>
<p>Now we can log in to vCenter with an AD domain account.</p>
<p>Log off vCenter and log in with an AD domain account granted permission, as shown in Figures 15 and 16.</p>
<figure id="attachment_31841" aria-describedby="caption-attachment-31841" style="width: 283px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure015-16.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31841 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure015-16.png" alt="Figure 15" width="283" height="236" /></a><figcaption id="caption-attachment-31841" class="wp-caption-text">Figure 15</figcaption></figure>
<figure id="attachment_31842" aria-describedby="caption-attachment-31842" style="width: 421px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure016-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31842 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure016-15.png" alt="Figure 16" width="421" height="362" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure016-15.png 421w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure016-15-349x300.png 349w" sizes="auto, (max-width: 421px) 100vw, 421px" /></a><figcaption id="caption-attachment-31842" class="wp-caption-text">Figure 16</figcaption></figure>
<p>Figure 17 shows a successful login with AD domain credentials.</p>
<figure id="attachment_31843" aria-describedby="caption-attachment-31843" style="width: 1602px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure017-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31843 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure017-15.png" alt="Figure 17" width="1602" height="318" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure017-15.png 1602w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure017-15-530x105.png 530w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure017-15-900x179.png 900w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure017-15-768x152.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure017-15-1536x305.png 1536w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure017-15-600x119.png 600w" sizes="auto, (max-width: 1602px) 100vw, 1602px" /></a><figcaption id="caption-attachment-31843" class="wp-caption-text">Figure 17</figcaption></figure>
<p>Next, we need permissions for service accounts for Citrix Virtual Apps and Desktops (CVAD) and VMware Horizon. First up, CVAD.</p>
<h2>Citrix Virtual Apps and Desktops and App Layering vCenter Permissions</h2>
<p>I need a vCenter account for my lab to use with both the CVAD Hosting Connection in Citrix Studio and Citrix App Layering.</p>
<p>Citrix details the required permissions at  <a href="https://docs.citrix.com/en-us/citrix-virtual-apps-desktops/install-configure/install-prepare/vmware.html" target="_blank" rel="noopener">CVAD VMware virtualization environments</a> and <a href="https://docs.citrix.com/en-us/citrix-app-layering/4/install-appliance/vmware-vsphere.html" target="_blank" rel="noopener">Citrix App Layering VMware vSphere</a>.</p>
<p>To save time, here are the combined permissions with all the duplicates removed. I put an &#8220;(AL)&#8221; by the permissions that apply only to Citrix App Layering. If you do not use App Layering, you can safely ignore those permissions. I took these permissions from the CVAD 2103 and App Layering 2104 documentation. I also fixed the names of the permissions that Citrix has wrong in their documentation.</p>
<p>Table 1 vCenter Permissions for CVAD and App Layering</p>
<table>
<tbody>
<tr>
<td width="480">Datastore &gt; Allocate space</td>
</tr>
<tr>
<td width="480">Datastore &gt; Browse datastore</td>
</tr>
<tr>
<td width="480">Datastore &gt; Low level file operations</td>
</tr>
<tr>
<td width="480">Folder &gt; Create folder (AL)</td>
</tr>
<tr>
<td width="480">Global &gt; Cancel task (AL)</td>
</tr>
<tr>
<td width="480">Global &gt; Manage custom attributes</td>
</tr>
<tr>
<td width="480">Global &gt; Set custom attribute</td>
</tr>
<tr>
<td width="480">Network &gt; Assign network</td>
</tr>
<tr>
<td width="480">Resource &gt; Assign virtual machine to resource pool</td>
</tr>
<tr>
<td width="480">vApp &gt; Export (AL)</td>
</tr>
<tr>
<td width="480">vApp &gt; Import (AL)</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Add existing disk</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Add new disk</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Add or remove device</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Advanced Configuration</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Change CPU Count</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Change Memory</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Change resource (AL)</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Change Settings</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Modify Device Settings (AL)</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Remove disk</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Rename (AL)</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Set annotation (AL)</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Configuration &gt; Upgrade virtual machine compatibility (AL)</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Edit Inventory &gt; Create from existing</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Edit Inventory &gt; Create new</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Edit Inventory &gt; Remove</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Interaction &gt; Configure CD media (AL)</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Interaction &gt; Connect devices (AL)</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Interaction &gt; Console interaction (AL)</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Interaction &gt; Install VMware Tools (AL)</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Interaction &gt; Power Off</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Interaction &gt; Power On</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Interaction &gt; Reset</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Interaction &gt; Suspend</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Provisioning &gt; Clone template</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Provisioning &gt; Clone virtual machine</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Provisioning &gt; Deploy template</td>
</tr>
<tr>
<td width="480">Virtual machine &gt; Snapshot management &gt; Create snapshot</td>
</tr>
</tbody>
</table>
<p>We <a href="https://www.carlwebster.com/14-building-websters-lab-v2-create-active-directory/" target="_blank" rel="noopener">created the svc_CtxVMware account previously</a>.</p>
<p>In the vCenter console, go to <em>Menu</em> -&gt; <em>Administration</em>, as shown in Figure 18.</p>
<figure id="attachment_31844" aria-describedby="caption-attachment-31844" style="width: 326px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure018-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31844 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure018-15.png" alt="Figure 18" width="326" height="680" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure018-15.png 326w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure018-15-144x300.png 144w" sizes="auto, (max-width: 326px) 100vw, 326px" /></a><figcaption id="caption-attachment-31844" class="wp-caption-text">Figure 18</figcaption></figure>
<p>Expand <em>Access Control</em>, click <em>Roles</em>, and click the <em>+</em> (Plus sign), as shown in Figure 19.</p>
<figure id="attachment_31845" aria-describedby="caption-attachment-31845" style="width: 470px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure019-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31845 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure019-15.png" alt="Figure 19" width="470" height="305" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure019-15.png 470w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure019-15-462x300.png 462w" sizes="auto, (max-width: 470px) 100vw, 470px" /></a><figcaption id="caption-attachment-31845" class="wp-caption-text">Figure 19</figcaption></figure>
<p>The hard part is going through all the settings in Table 1 and selecting the required permissions, as shown in Figure 20.</p>
<p><strong>Hey VMware, it would be nice if this dialog box were resizable.</strong></p>
<figure id="attachment_31846" aria-describedby="caption-attachment-31846" style="width: 939px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure020-15.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31846 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure020-15.png" alt="Figure 20" width="939" height="558" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure020-15.png 939w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure020-15-505x300.png 505w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure020-15-900x535.png 900w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure020-15-768x456.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure020-15-600x357.png 600w" sizes="auto, (max-width: 939px) 100vw, 939px" /></a><figcaption id="caption-attachment-31846" class="wp-caption-text">Figure 20</figcaption></figure>
<p>Continue selecting the required permissions. When all permissions are selected, click <em>Next</em>, as shown in Figure 21.</p>
<figure id="attachment_31847" aria-describedby="caption-attachment-31847" style="width: 938px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure021-14.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31847 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure021-14.png" alt="Figure 21" width="938" height="556" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure021-14.png 938w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure021-14-506x300.png 506w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure021-14-900x533.png 900w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure021-14-768x455.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure021-14-600x356.png 600w" sizes="auto, (max-width: 938px) 100vw, 938px" /></a><figcaption id="caption-attachment-31847" class="wp-caption-text">Figure 21</figcaption></figure>
<p>Enter a <strong>Role name </strong>and an optional <strong>Description</strong>, click <em>Finish</em>, as shown in Figure 22.</p>
<figure id="attachment_31848" aria-describedby="caption-attachment-31848" style="width: 939px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure022-14.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31848 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure022-14.png" alt="Figure 22" width="939" height="553" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure022-14.png 939w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure022-14-509x300.png 509w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure022-14-900x530.png 900w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure022-14-768x452.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure022-14-600x353.png 600w" sizes="auto, (max-width: 939px) 100vw, 939px" /></a><figcaption id="caption-attachment-31848" class="wp-caption-text">Figure 22</figcaption></figure>
<p>Click <em>Global Permissions</em> and click the <em>+</em> (Plus sign), as shown in Figure 23.</p>
<figure id="attachment_31849" aria-describedby="caption-attachment-31849" style="width: 580px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure023-13.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31849 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure023-13.png" alt="Figure 23" width="580" height="306" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure023-13.png 580w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure023-13-530x280.png 530w" sizes="auto, (max-width: 580px) 100vw, 580px" /></a><figcaption id="caption-attachment-31849" class="wp-caption-text">Figure 23</figcaption></figure>
<p>Select your AD domain in the <em>Domain </em>dropdown, then enter the service account name, select the just created <em>Role</em>, you must select <em>Propagate to children</em>, and click <em>OK</em>, as shown in Figure 24.</p>
<figure id="attachment_31850" aria-describedby="caption-attachment-31850" style="width: 573px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure024-13.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31850 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure024-13.png" alt="Figure 24" width="573" height="424" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure024-13.png 573w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure024-13-405x300.png 405w" sizes="auto, (max-width: 573px) 100vw, 573px" /></a><figcaption id="caption-attachment-31850" class="wp-caption-text">Figure 24</figcaption></figure>
<p>If you are following this article series, there is no CVAD infrastructure to test the account.</p>
<h2>VMware Horizon vCenter Permissions</h2>
<p>VMware lists their required permissions for Horizon 8 2106 at <a href="https://docs.vmware.com/en/VMware-Horizon/2106/horizon-installation/GUID-467F552F-3034-4917-A985-B5E5FEC5C68F.html" target="_blank" rel="noopener">Privileges Required for the vCenter Server User</a>.</p>
<p>Figures 25 and 26 show the required permissions for the VMware Horizon 8 2106 service account.</p>
<p><strong>Hey VMware, it would be better to list the <em>Privilege Group on vCenter Server</em> and <em>Privileges to Enable</em> in the same order they appear in the vCenter New Role wizard.</strong></p>
<figure id="attachment_31851" aria-describedby="caption-attachment-31851" style="width: 698px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure025-12.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31851 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure025-12.png" alt="Figure 25" width="698" height="1039" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure025-12.png 698w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure025-12-202x300.png 202w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure025-12-537x800.png 537w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure025-12-600x893.png 600w" sizes="auto, (max-width: 698px) 100vw, 698px" /></a><figcaption id="caption-attachment-31851" class="wp-caption-text">Figure 25</figcaption></figure>
<figure id="attachment_31852" aria-describedby="caption-attachment-31852" style="width: 693px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure026-11.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31852 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure026-11.png" alt="Figure 26" width="693" height="988" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure026-11.png 693w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure026-11-210x300.png 210w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure026-11-561x800.png 561w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure026-11-600x855.png 600w" sizes="auto, (max-width: 693px) 100vw, 693px" /></a><figcaption id="caption-attachment-31852" class="wp-caption-text">Figure 26</figcaption></figure>
<p>Table 2 vCenter Permissions for Horizon – Ordered List</p>
<table width="485">
<tbody>
<tr>
<td width="485">Datastore/Allocate space</td>
</tr>
<tr>
<td width="485">Datastore/Browse datastore</td>
</tr>
<tr>
<td width="485">Folder/Create folder</td>
</tr>
<tr>
<td width="485">Folder/Delete folder</td>
</tr>
<tr>
<td width="485">Global/Act as vCenter Server</td>
</tr>
<tr>
<td width="485">Global/Disable methods</td>
</tr>
<tr>
<td width="485">Global/Enable methods</td>
</tr>
<tr>
<td width="485">Global/Manage custom attributes</td>
</tr>
<tr>
<td width="485">Global/Set custom attribute</td>
</tr>
<tr>
<td width="485">Host/Configuration/Advanced settings</td>
</tr>
<tr>
<td width="485">Host/Inventory/Modify cluster</td>
</tr>
<tr>
<td width="485">Network/Assign network</td>
</tr>
<tr>
<td width="485">Resource/Assign virtual machine to resource pool</td>
</tr>
<tr>
<td width="485">Resource/Migrate powered off virtual machine</td>
</tr>
<tr>
<td width="485">Resource/Migrate powered on virtual machine</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Add or remove device</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Advanced configuration</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Change CPU count</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Change Memory</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Change resource</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Change Settings</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Configure Host USB device</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Configure managedBy</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Configure Raw device</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Display connection settings</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Extend virtual disk</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Modify device settings</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Query Fault Tolerance compatibility</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Query unowned files</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Reload from path</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Remove disk</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Rename</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Reset guest information</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Set annotation</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Toggle disk change tracking</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Toggle fork parent</td>
</tr>
<tr>
<td width="485">Virtual machine/Change Configuration/Upgrade virtual machine compatibility</td>
</tr>
<tr>
<td width="485">Virtual machine/Edit Inventory/Move</td>
</tr>
<tr>
<td width="485">Virtual machine/Edit Inventory/Register</td>
</tr>
<tr>
<td width="485">Virtual machine/Edit Inventory/Unregister</td>
</tr>
<tr>
<td width="485">Virtual machine/Interaction/Connect devices</td>
</tr>
<tr>
<td width="485">Virtual machine/Interaction/Perform wipe or shrink operations</td>
</tr>
<tr>
<td width="485">Virtual machine/Interaction/Power off</td>
</tr>
<tr>
<td width="485">Virtual machine/Interaction/Power on</td>
</tr>
<tr>
<td width="485">Virtual machine/Interaction/Reset</td>
</tr>
<tr>
<td width="485">Virtual machine/Interaction/Suspend</td>
</tr>
<tr>
<td width="485">Virtual machine/Provisioning/Allow disk access</td>
</tr>
<tr>
<td width="485">Virtual machine/Provisioning/Clone template</td>
</tr>
<tr>
<td width="485">Virtual machine/Provisioning/Clone virtual machine</td>
</tr>
<tr>
<td width="485">Virtual machine/Provisioning/Customize guest</td>
</tr>
<tr>
<td width="485">Virtual machine/Provisioning/Deploy template</td>
</tr>
<tr>
<td width="485">Virtual machine/Provisioning/Read customization specifications</td>
</tr>
<tr>
<td width="485">Virtual machine/Snapshot management/Create snapshot</td>
</tr>
<tr>
<td width="485">Virtual machine/Snapshot management/Remove snapshot</td>
</tr>
<tr>
<td width="485">Virtual machine/Snapshot management/Rename snapshot</td>
</tr>
<tr>
<td width="485">Virtual machine/Snapshot management/Revert to snapshot</td>
</tr>
</tbody>
</table>
<p>We <a href="https://www.carlwebster.com/14-building-websters-lab-v2-create-active-directory/" target="_blank" rel="noopener">created the svc_VMwareHorizon AD account previously</a>.</p>
<p>Expand <em>Access Control</em>, click <em>Roles</em>, and click the <em>+</em> (Plus sign), as shown in Figure 27.</p>
<figure id="attachment_31853" aria-describedby="caption-attachment-31853" style="width: 470px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure027-11.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31853 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure027-11.png" alt="Figure 27" width="470" height="305" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure027-11.png 470w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure027-11-462x300.png 462w" sizes="auto, (max-width: 470px) 100vw, 470px" /></a><figcaption id="caption-attachment-31853" class="wp-caption-text">Figure 27</figcaption></figure>
<p>The hard part is going through all the settings and selecting the required permissions, as shown in Figure 28.</p>
<figure id="attachment_31854" aria-describedby="caption-attachment-31854" style="width: 940px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure028-10.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31854 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure028-10.png" alt="Figure 28" width="940" height="558" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure028-10.png 940w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure028-10-505x300.png 505w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure028-10-900x534.png 900w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure028-10-768x456.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure028-10-600x356.png 600w" sizes="auto, (max-width: 940px) 100vw, 940px" /></a><figcaption id="caption-attachment-31854" class="wp-caption-text">Figure 28</figcaption></figure>
<p>Continue selecting the required permissions. When all permissions are selected, click <em>Next</em>, as shown in Figure 29.</p>
<figure id="attachment_31855" aria-describedby="caption-attachment-31855" style="width: 937px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure029-10.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31855 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure029-10.png" alt="Figure 29" width="937" height="559" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure029-10.png 937w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure029-10-503x300.png 503w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure029-10-900x537.png 900w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure029-10-768x458.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure029-10-600x358.png 600w" sizes="auto, (max-width: 937px) 100vw, 937px" /></a><figcaption id="caption-attachment-31855" class="wp-caption-text">Figure 29</figcaption></figure>
<p>Enter a <strong>Role name </strong>and an optional <strong>Description</strong>, click <em>Finish</em>, as shown in Figure 30.</p>
<figure id="attachment_31856" aria-describedby="caption-attachment-31856" style="width: 940px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure030-10.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31856 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure030-10.png" alt="Figure 30" width="940" height="555" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure030-10.png 940w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure030-10-508x300.png 508w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure030-10-900x531.png 900w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure030-10-768x453.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure030-10-600x354.png 600w" sizes="auto, (max-width: 940px) 100vw, 940px" /></a><figcaption id="caption-attachment-31856" class="wp-caption-text">Figure 30</figcaption></figure>
<p>Click <em>Global Permissions</em> and click the <em>+</em> (Plus sign), as shown in Figure 31.</p>
<figure id="attachment_31857" aria-describedby="caption-attachment-31857" style="width: 580px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure031-10.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31857 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure031-10.png" alt="Figure 31" width="580" height="306" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure031-10.png 580w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure031-10-530x280.png 530w" sizes="auto, (max-width: 580px) 100vw, 580px" /></a><figcaption id="caption-attachment-31857" class="wp-caption-text">Figure 31</figcaption></figure>
<p>Select your AD domain in the <em>Domain </em>dropdown, enter the service account name, select the just created <em>Role</em>, select <em>Propagate to children</em>, and click <em>OK</em>, as shown in Figure 32.</p>
<figure id="attachment_31858" aria-describedby="caption-attachment-31858" style="width: 573px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure032-10.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-31858 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure032-10.png" alt="Figure 32" width="573" height="426" srcset="https://www.carlwebster.com/wp-content/uploads/2021/05/Figure032-10.png 573w, https://www.carlwebster.com/wp-content/uploads/2021/05/Figure032-10-404x300.png 404w" sizes="auto, (max-width: 573px) 100vw, 573px" /></a><figcaption id="caption-attachment-31858" class="wp-caption-text">Figure 32</figcaption></figure>
<p>If you are following this article series, there is no Horizon infrastructure to test the account.</p>
<p>Leave the vCenter console open to Global Permissions.</p>
<h2>Create a Read-only Account</h2>
<p>In my lab, I use monitoring software from vendors like <a href="https://www.controlup.com/">ControlUp</a> and <a href="https://goliathtechnologies.com/">Goliath Technologies</a>. To provide for Least Privilege Access, use a Read-only account.</p>
<p>First, we need to create an AD service account to assign the vCenter Read-only Role.</p>
<p>On the first DC, open an elevated PowerShell session.</p>
<p>Copy and paste the following into the elevated PowerShell session and press <em>Enter</em>, as shown in Figure 33.</p>
<p>Remember to set the values you need.</p>
<p><strong>Note:</strong> Lines may wrap</p>
<pre class="brush: powershell; title: ; notranslate">
#Create the service account svc_VMwareReadOnly for Read-only vCenter permissions

$ADDomain = &quot;LabADDomain&quot;
$TLD = &quot;com&quot;
$Protect = $False

$UserPwd = Read-Host -AsSecureString -Prompt &quot;Enter password&quot;

New-ADUser -AccountPassword $UserPwd `
-CannotChangePassword $True `
-ChangePasswordAtLogon $False `
-Description &quot;DO NOT CHANGE THE PASSWORD OR DELETE/DISABLE ACCOUNT&quot; `
-DisplayName &quot;svc_VMwareReadOnly&quot; `
-Enabled $True `
-GivenName &quot;svc_VMwareReadOnly&quot; `
-Name &quot;svc_VMwareReadOnly&quot; `
-PasswordNeverExpires $True `
-PasswordNotRequired $False `
-Path &quot;OU=Service,OU=Accounts,OU=Lab,DC=$ADDomain,DC=$TLD&quot; `
-SamAccountName &quot;svc_VMwareReadOnly&quot; `
-UserPrincipalName &quot;svc_VMwareReadOnly@LabADDomain.com&quot;
</pre>
<figure id="attachment_34239" aria-describedby="caption-attachment-34239" style="width: 775px" class="wp-caption alignnone"><a style="font-weight: bold; font-size: 0.8125rem; font-style: italic;" href="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure033.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-34239 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure033.png" alt="Figure 33" width="775" height="426" srcset="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure033.png 775w, https://www.carlwebster.com/wp-content/uploads/2021/06/Figure033-530x291.png 530w, https://www.carlwebster.com/wp-content/uploads/2021/06/Figure033-768x422.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/06/Figure033-600x330.png 600w" sizes="auto, (max-width: 775px) 100vw, 775px" /></a><figcaption id="caption-attachment-34239" class="wp-caption-text">Figure 33</figcaption></figure>
<p>In Global Permissions, click the &#8220;<em>+</em>&#8220;, as shown in Figure 34.</p>
<figure id="attachment_34241" aria-describedby="caption-attachment-34241" style="width: 228px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure034.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-34241 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure034.png" alt="Figure 34" width="228" height="197" /></a><figcaption id="caption-attachment-34241" class="wp-caption-text">Figure 34</figcaption></figure>
<p>Change the <em>Domain</em> to the AD domain, select the new Read-only account for <em>User/Group</em>, select the Read-only <em>Role,</em> select <em>Propagate to children</em>, and click <em>OK</em>, as shown in Figure 35.</p>
<figure id="attachment_34242" aria-describedby="caption-attachment-34242" style="width: 573px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure035.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-34242 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure035.png" alt="Figure 35" width="573" height="425" srcset="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure035.png 573w, https://www.carlwebster.com/wp-content/uploads/2021/06/Figure035-404x300.png 404w" sizes="auto, (max-width: 573px) 100vw, 573px" /></a><figcaption id="caption-attachment-34242" class="wp-caption-text">Figure 35</figcaption></figure>
<p>The new Read-only account is added to the list, as shown in Figure 36.</p>
<figure id="attachment_34244" aria-describedby="caption-attachment-34244" style="width: 915px" class="wp-caption alignnone"><a href="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure036.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-34244 size-full" src="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure036.png" alt="Figure 36" width="915" height="302" srcset="https://www.carlwebster.com/wp-content/uploads/2021/06/Figure036.png 915w, https://www.carlwebster.com/wp-content/uploads/2021/06/Figure036-530x175.png 530w, https://www.carlwebster.com/wp-content/uploads/2021/06/Figure036-900x297.png 900w, https://www.carlwebster.com/wp-content/uploads/2021/06/Figure036-768x253.png 768w, https://www.carlwebster.com/wp-content/uploads/2021/06/Figure036-600x198.png 600w" sizes="auto, (max-width: 915px) 100vw, 915px" /></a><figcaption id="caption-attachment-34244" class="wp-caption-text">Figure 36</figcaption></figure>
<p>Next up: <a href="https://www.carlwebster.com/18-building-websters-lab-v2-additional-xencenter-configuration/" target="_blank" rel="noopener">Additional XenCenter Configuration</a></p>
<p><a href="https://www.carlwebster.com/building-websters-lab-v2/" target="_blank" rel="noopener">Landing page for the article series</a></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">31824</post-id>	</item>
		<item>
		<title>Citrix Cloud Documentation Script V1.13</title>
		<link>https://www.carlwebster.com/citrix-cloud-documentation-script-v1-13/</link>
					<comments>https://www.carlwebster.com/citrix-cloud-documentation-script-v1-13/#comments</comments>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Wed, 14 Apr 2021 11:02:31 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=30639</guid>

					<description><![CDATA[Version 1.13 14-Apr-2021 Added Computer policy Profile Management\Enable profile streaming for folders Workspace Environment Management\Citrix Cloud Connectors Added User policy ICA\Multimedia\Browser Content Redirection Server Fetch Proxy Auth Changed $Application.IconFromClient to&#8230;]]></description>
										<content:encoded><![CDATA[<p>Version 1.13 14-Apr-2021</p>
<ul>
<li>Added Computer policy
<ul>
<li>Profile Management\Enable profile streaming for folders</li>
<li>Workspace Environment Management\Citrix Cloud Connectors</li>
</ul>
</li>
<li>Added User policy
<ul>
<li>ICA\Multimedia\Browser Content Redirection Server Fetch Proxy Auth</li>
</ul>
</li>
<li>Changed $Application.IconFromClient to $Application.IconFromClient.ToString()</li>
<li>Changed how the Session Recording Status was obtained</li>
<li>Fixed three typos of &#8220;Unabled&#8221; to &#8220;Unable&#8221;</li>
<li>Fixed typos of &#8220;Descriptione&#8221; to &#8220;Description&#8221;</li>
<li>For Restart schedules added the following items:
<ul>
<li>Use natural reboot</li>
<li>Ignore maintenance mode</li>
<li>Maximum Overtime Start Minutes</li>
</ul>
</li>
<li>For the following three Delivery Group properties, if there is no data or value, use &#8220;-&#8221; to match all the other empty values
<ul>
<li>All connections not through NetScaler Gateway</li>
<li>Connections through NetScaler Gateway</li>
<li>Restrict to tag</li>
</ul>
</li>
<li>In Machine details added
<ul>
<li>Draining Until Shutdown (Multi-session only)</li>
<li>Last Connection Failure reason
<ul>
<li>&#8220;None&#8221; = &#8220;None&#8221;</li>
<li>&#8220;SessionPreparation&#8221; = &#8220;Session preparation&#8221;</li>
<li>&#8220;RegistrationTimeout&#8221; = &#8220;Registration timeout&#8221;</li>
<li>&#8220;ConnectionTimeout&#8221; = &#8220;Connection Timeout&#8221;</li>
<li>&#8220;Licensing&#8221; = &#8220;Licensing&#8221;</li>
<li>&#8220;Ticketing&#8221; = &#8220;Ticketing&#8221;</li>
<li>&#8220;Other&#8221; = &#8220;Other&#8221;</li>
</ul>
</li>
<li>Maintenance Mode reason
<ul>
<li>&#8220;Administrator&#8221; = &#8220;Machine was manually placed in maintenance mode by an administrator&#8221;</li>
<li>&#8220;MaxFailedRegistrations&#8221; = &#8220;Machine was automatically placed in maintenance mode due to reaching the maximum failed registration limit&#8221;</li>
<li>&#8220;None&#8221; = &#8220;Machine is not in maintenance mode&#8221;</li>
</ul>
</li>
<li>Will Shutdown After Use reason
<ul>
<li>&#8220;None&#8221; = &#8220;Machine will not shutdown after use&#8221;</li>
<li>&#8220;ResetDiskImage&#8221; = &#8220;Machine will shutdown after use to reset its disk image&#8221;</li>
<li>&#8220;ScheduledNaturalReboot&#8221; = &#8220;Machine will shutdown after use as part of the scheduled natural reboot process&#8221;</li>
<li>&#8220;OnDemandNaturalReboot&#8221; = &#8220;Machine will shutdown after use as part of an on-demand natural reboot process&#8221;</li>
</ul>
</li>
</ul>
</li>
<li>In Machine Details, for MCS catalogs, if the Provisioning Scheme doesn&#8217;t exist, set the $MasterVM variable to &#8220;Unable to retrieve details&#8221;</li>
<li>Moved Authentication code to right after the test for elevation. If authentication fails, there is no need to test and set a bunch of variables.</li>
<li>Renamed computer policy
<ul>
<li>Enable multi-session write-back for FSLogix Profile Container to Enable multi-session write-back for profile containers</li>
<li>Virtual channel white list to Virtual channel allow list</li>
</ul>
</li>
<li>To get the Master VM for an Azure Catalog, add searching for &#8220;.manageddisk&#8221;
<ul>
<li>Also added &#8220;.snapshot&#8221; which was found in customer data</li>
</ul>
</li>
<li>Updated the Authentication section in the ReadMe</li>
<li>Updated the text explanations for:
<ul>
<li>Machine Fault State
<ul>
<li>&#8220;None&#8221; = &#8220;No fault; machine is healthy&#8221;</li>
<li>&#8220;FailedToStart&#8221; = &#8220;Last power-on operation for machine failed&#8221;</li>
<li>&#8220;StuckOnBoot&#8221; = &#8220;Machine does not seem to have booted following power on&#8221;</li>
<li>&#8220;Unregistered&#8221; = &#8220;Machine has failed to register within expected period, or its registration has been rejected&#8221;</li>
<li>&#8220;MaxCapacity&#8221; = &#8220;Machine is reporting itself at maximum capacity&#8221;</li>
</ul>
</li>
<li>Machine Scheduled Reboot
<ul>
<li>&#8220;None&#8221; = &#8220;No reboot is scheduled&#8221;</li>
<li>&#8220;Pending&#8221; = &#8220;Machine is awaiting reboot but is available for us&#8221;</li>
<li>&#8220;Draining&#8221; = &#8220;Machine is awaiting reboot and is unavailable for new sessions; reconnections to existing connections are still allowed, however&#8221;</li>
<li>&#8220;InProgress&#8221; = &#8220;Machine is actively undergoing a scheduled reboot&#8221;</li>
<li>&#8220;Natural&#8221; = &#8220;Natural reboot in progress. Machine is awaiting a restart&#8221;</li>
</ul>
</li>
</ul>
</li>
<li>When testing a session for Session Recording status, add a test for $null -ne $results</li>
</ul>
<p><strong>You can always find the most current script by going to <a href="https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/" target="_blank" rel="noopener">https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</a></strong></p>
<p>Thanks</p>
<p>Webster</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.carlwebster.com/citrix-cloud-documentation-script-v1-13/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">30639</post-id>	</item>
		<item>
		<title>New Script: Documenting Citrix Cloud with Microsoft PowerShell V1.00</title>
		<link>https://www.carlwebster.com/new-script-documenting-citrix-cloud-with-microsoft-powershell-v1-00/</link>
		
		<dc:creator><![CDATA[Carl Webster]]></dc:creator>
		<pubDate>Mon, 21 Sep 2020 09:00:22 +0000</pubDate>
				<category><![CDATA[Citrix Cloud]]></category>
		<category><![CDATA[PowerShell]]></category>
		<guid isPermaLink="false">https://www.carlwebster.com/?p=19690</guid>

					<description><![CDATA[After a lot of hard work by the testers and myself, we are pleased to release a new Citrix Cloud (CC) / Citrix Virtual Apps and Desktops service (CVADS) documentation&#8230;]]></description>
										<content:encoded><![CDATA[<p>After a lot of hard work by the testers and myself, we are pleased to release a new Citrix Cloud (CC) / Citrix Virtual Apps and Desktops service (CVADS) documentation script.</p>
<p><span id="more-19690"></span></p>
<p>There are five important things you should know about this script.</p>
<ol>
<li>It works only with Citrix Cloud, it does not support the on-premises product</li>
<li>Stating the obvious, you must have an account on citrix.cloud.com</li>
<li>It requires a minimum PowerShell version of 5</li>
<li>The default output is HTML, not Microsoft Word</li>
<li>You can select any combination of the four output report types: HTML, MSWord, PDF, and Text</li>
</ol>
<p>Please see the <a href="https://carlwebster.sharefile.com/d-sb4e144f9ecc48e7b" target="_blank" rel="noopener noreferrer">ReadMe file</a> for the rest of the script&#8217;s requirements.</p>
<p>I want to thank several testers who provided <strong>lots</strong> of feedback, input, sample reports, and worked with me to test fixes, and helped me understand the Citrix Cloud authentication process.</p>
<ul>
<li>Arnaud Pain &#8211; fellow CTP</li>
<li>Eric Haavarstein &#8211; fellow CTP</li>
<li>David Prows &#8211; fellow IGEL INSIDER</li>
<li>Devan Tilley &#8211; IGEL stud and co-worker of David Prows</li>
</ul>
<p>There were more testers, but these four went above and beyond the call of duty.</p>
<p>We learned several interesting and odd things along the way.</p>
<ol>
<li>Some of the testers had no problem running the script non-elevated, but most of us could not get the Citrix Cloud authentication cmdlet to work unless run from an elevated PowerShell session. That forced me to require an elevation test for the script to run.</li>
<li>Getting Citrix Cloud authentication figured out was a royal PITA. As covered in the <a href="https://carlwebster.sharefile.com/share/view/sb4e144f9ecc48e7b" target="_blank" rel="noopener noreferrer">ReadMe file</a>, you can create a named profile or create a &#8220;Default&#8221; profile.  What we found initially was that if you requested to get Citrix Policy data, even if you used a named profile, you would get prompted for authentication on the first call the New-PSDrive by the Citrix policy code. But, if you create a &#8220;Default&#8221; profile, that profile would automatically be used by New-PSDrive. Getting all this figured out so you can run the script automated as a scheduled task was quite a chore. What we figured out is the easiest thing to do is create the &#8220;Default&#8221; profile and run the script with that. The &#8220;Default&#8221; profile is automatically used by the Get-XDAuthentication cmdlet and by New-PSDrive. The bottom line, create a profile named &#8220;Default&#8221; and it makes using this script much simpler. Thanks to Arnaud, David, Devan, and Eric for answering the 100s of questions I had trying to get this figured out and documented. I added a help text example showing how to use the script as a scheduled task.</li>
<li>The original goal was to use only the modules provided by Citrix with the Remote SDK. That turned out to cause a lot of frustration. First, documenting the Citrix Policies would not work and we saw a lot of weird errors with retrieving StoreFront information. By that, I mean the StoreFront servers configured in Studio. To make a very long story short, it turns out the cmdlets used to retrieve StoreFront data require the use of the Citrix.Common.GroupPolicy snapin. The <strong>only</strong> way to get that snapin is to install the Citrix Group Policy Management Console (CGPMC). It appears the way Citrix retrieves StoreFront data requires a PSDrive and without the Citrix.Common.GroupPolicy snapin, the required PSDrive doesn&#8217;t exist and cannot get created. Once the CGPMC is installed and the snapin added to the PowerShell session, the required cmdlets work properly. This is a very weird dependency. By the way, no one ever was prompted for authentication for the StoreFront PSDrive, only the Citrix Policy PSDrive. Weird.</li>
<li>Several testers would get errors if the script was run more than one time in the same PowerShell session with odd PSDrive errors. I recommend that you run the script from a new, elevated PowerShell session each time.</li>
</ol>
<p>This script is based on the CVAD V3.00 script. It only took a laborious three weeks to turn that script into one that documented Citrix Cloud.</p>
<p>Here are the changes in the V1.00 Citrix Cloud script from the CVAD V3.00 script. Many of the fixes were put into the V3.00 and V2.36 scripts. If it needed fixing in this script, the other scripts needed the same fixes.</p>
<ul>
<li>Add a switch statement for the machine/desktop/server Power State</li>
<li>Add a test to make sure the script is running from an elevated PowerShell session</li>
<li>Add additional Citrix Cloud administrator permissions:
<ul>
<li>App-V
<ul>
<li>Add App-V applications</li>
<li>Remove App-V applications</li>
</ul>
</li>
<li>Cloud
<ul>
<li>Read Storefront Configuration</li>
<li>Update Storefront Configuration</li>
</ul>
</li>
<li>Director
<ul>
<li>View Filters page Application Instances only</li>
<li>View Filters page Connections only</li>
<li>View Filters page Machines only</li>
<li>View Filters page Sessions only</li>
</ul>
</li>
<li>Other Permissions
<ul>
<li>Customer Update Site Configuration</li>
<li>Update Site Configuration</li>
<li>Read database status information</li>
<li>Export Broker Configuration</li>
</ul>
</li>
<li>UPM
<ul>
<li>Add UPM Broker Machine Configuration</li>
<li>Read UPM Broker Machine Configuration</li>
<li>Delete UPM Broker Machine Configuration</li>
</ul>
</li>
</ul>
</li>
<li>Added a ValidateSet to the Sections parameter. You can use -Section, press tab, and tab through all the section options. (Credit to Guy Leech)</li>
<li>Added a -ProfileName parameter for use by Get-XDAuthentication
<ul>
<li>For more information, see the Authentication section in the ReadMe file <a href="https://carlwebster.sharefile.com/d-sb4e144f9ecc48e7b" target="_blank" rel="noopener noreferrer">https://carlwebster.sharefile.com/d-sb4e144f9ecc48e7b</a></li>
<li>Thanks to David Prows and Devan Tilly for documenting this process for me to  use</li>
</ul>
</li>
<li>Added testing to see if the computer running the script is in a Domain or Workgroup
<ul>
<li>If not in a domain, and VDARegistryKeys is set, set it to $False</li>
<li>If not in a domain, set NoADPolicies to $True</li>
</ul>
</li>
<li>Added testing to see if the Remote SDK is installed (Thanks to Martin Zugec)</li>
<li>Change all Write-Verbose $(Get-Date) to add -Format G to put the dates in the user&#8217;s locale (Thanks to Guy Leech)</li>
<li>Change checking some String variables from just $Null to [String]::IsNullOrEmpty
<ul>
<li>Some cmdlet&#8217;s string properties are sometimes Null and sometimes an empty string</li>
</ul>
</li>
<li>Change checking the way a machine is online or offline</li>
<li>Change some cmdlets to sort on the left of the pipeline using the cmdlet&#8217;s -SortBy option</li>
<li>Changed testing for existing PSDrives from Get-PSDrive to Test-Path</li>
<li>Comment out the code for Session Recording until Citrix enables the cmdlet in the Cloud</li>
<li>Fixed administrators output by restricting to UserIdentityType -ne &#8220;Sid&#8221; -and (-not ([String]::IsNullOrEmpty($_.Name)))</li>
<li>Fixed an issue with &#8220;Connections meeting any of the following (Access Gateway) filters&#8221;
<ul>
<li>If you selected HTML and any other output format in the same run, only the HTML output had any Access Gateway data</li>
</ul>
</li>
<li>Fixed issue with PowerShell 5.1.x and empty Hashtables for Ian Brighton&#8217;s Word Table functions
<ul>
<li>PoSH 3, 4, and 5.0 had no problem with an empty hashtable and would create a blank Word table with only column headings</li>
<li>For many tables, before passing the hashtable to Ian&#8217;s function, test if the hashtable is empty</li>
<li>If it is, create a dummy row of data for the hashtable</li>
<li>For example, a RemotePC catalog based on OU that contains no machines, or Applications with no administrators</li>
<li>Instead of having a missing table, the table will now have a row that says &#8220;None found&#8221;</li>
</ul>
</li>
<li>Fixed issue with the array used for Appendix A and the CSV file when selecting multiple output formats
<ul>
<li>If HTML and Text and MSWord were selected, Appendix A and the CSV file contained three duplicate entries</li>
<li>Changed from using only one array to three. Changed from using $Script:ALLVDARegistryItems to
<ul>
<li>$Script:WordALLVDARegistryItems</li>
<li>$Script:TextALLVDARegistryItems</li>
<li>$Script:HTMLALLVDARegistryItems</li>
</ul>
</li>
</ul>
</li>
<li>Fixed output issues with Power Management settings</li>
<li>Fixed several more array out of bounds issues when accessing element 0 when the array was empty</li>
<li>Fixed Zone output by excluding &#8220;Initial Zone&#8221; and Zones with a name of &#8220;00000000-0000-0000-0000-000000000000&#8221;</li>
<li>For Appendix A, Text output, change the column heading &#8220;DDC Name&#8221; to &#8220;Computer Name&#8221; to match the HTML and MSWord/PDF output</li>
<li>For Zones, add Citrix Cloud Connectors</li>
<li>For Zones, add MemType into the Sort-Object for Site View and Zone View</li>
<li>For Zones, for MSWord and PDF output, change the column widths</li>
<li>Removed a lot of the Licensing code as there are no Get-Lic* cmdlets in the Remote SDK</li>
<li>Removed all code for BrokerRegistryKeys
<ul>
<li>Removed AppendixB</li>
</ul>
</li>
<li>Removed all code for CEIP</li>
<li>Removed all code for Hardware</li>
<li>Removed all code for Microsoft hotfixes, Citrix hotfixes, and installed Windows Features and Roles
<ul>
<li>Removed AppendixC, AppendixD, and AppendixE</li>
</ul>
</li>
<li>Removed all code for the Controllers section
<ul>
<li>Also removed code for checking if StoreFront is installed on the Delivery Controller</li>
</ul>
</li>
<li>Removed all code for the three Citrix SQL databases</li>
<li>Removed some code for Configuration Logging.
<ul>
<li>We don&#8217;t have access to Preferences or the Logging database details</li>
<li>We do have access to the configuration logging high-level action details</li>
<li>Remove checking for product code MPS since that doesn&#8217;t exist in the cloud licenses</li>
</ul>
</li>
<li>Removed the help text and parameter for $AdminAddress
<ul>
<li>Hardcode $AdminAddress to LocalHost</li>
</ul>
</li>
<li>Removed licensing data that didn&#8217;t make sense for Citrix Cloud and added some data that did make sense</li>
<li>Since the RegistrationState property is an enum, add .ToString() to the machine/desktop/server variable so HTML output is correct</li>
<li>When getting the Master VM for an MCS based machine catalog, also check for images ending in .template for Nutanix</li>
<li>When getting the provisioning scheme data for a machine, only process machines with a provisioning type of MCS
<ul>
<li>There is no provisioning scheme data for manually or PVS provisioned machines</li>
</ul>
</li>
<li>When VDARegistryKeys is used, now test the RemoteRegistry service for its status
<ul>
<li>If the service is not running, add that information into the various *VDARegistryItems arrays</li>
</ul>
</li>
<li>Where appropriate, changed all &#8220;CVAD&#8221; to &#8220;CC&#8221;</li>
</ul>
<p><strong style="font-size: 1rem;">You can always find the most current script by going to </strong><a style="font-size: 1rem;" title="Current Scripts" href="https://www.carlwebster.com/downloads/" target="_blank" rel="noopener noreferrer"><strong>https://www.carlwebster.com/where-to-get-copies-of-the-documentation-scripts/</strong></a></p>
<p>Thanks</p>
<p>Webster</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">19690</post-id>	</item>
	</channel>
</rss>
