Quantcast
Channel: sinisasokolic.com
Viewing all 25 articles
Browse latest View live

VMware Horizon 6.0 & Mirage 5.0 Reviewers Guides

$
0
0

VMware released their Mirage 5.0 Reviewer´s Guide. It can be downloaded here: http://www.vmware.com/files/pdf/techpaper/vmware-horizon-mirage-reviewers-guide.pdf.

Topics covered are:

  • What is VMware Mirage?
  • Key features
  • Packaging and licensing
  • Components and architecture
  • Installation and configuration
  • Hands-on evaluation exercises

There is also a Reviewers Guide available for Horizon 6.0. It can be downloaded here: http://www.vmware.com/files/pdf/view/VMware-View-Evaluators-Guide.pdf

Topics covered are:

  • Installation Prerequisites
  • Installing View Components
  • Remote Desktop Session Host Configuration
  • Configuring View
  • Preparing Desktop Images for Linked-Clone Desktop Pool Deployment
  • Preparing a Desktop Image for Full-Clone Desktop Pool Deployment
  • Deploying View Desktops and Applications
  • Entitling Users to View Desktops and Applications
  • Connecting to View Desktops and Applications

Cheers,
Sinisa


Installing Splunk and uberAgent Components

$
0
0

Today I want share the steps that are necessary to install the prerequisites for Helge Klein´s uberAgent. We will start with the installation of Splunk. After this first step is done we will go on and install the server components of uberAgent.

What is Splunk?
That exactly was my problem some months ago. I had heard a few times about it but didn´t really know what to do with all of the information. After watching Helge´s presentation at E2EVC I decided to have a deeper look into this topic.

What Splunk does…
Basicallly it captures data from the machines you want and makes them readable be using Splunks Search Processing Language (SPL). You can collect nearly any data and whatever form it has and create reports and interactive Dashboards.
The capabilities reach from monitoring and searching to correlating data with customizable Dashboards and Views. From my point of view this system is so powerfull and customizable that a first look at it makes me think of so many use cases I never could have imagined. You get unlimited possibilities with the data that was lying dead on your servers before.

How do I get it?
Splunk is available in three editions. You can get a Free, Enterprise and Cloud edition. The main difference is the amount of data you are allowed to analyze. The Free edition has a limit of 500 MBs per day. Additional differences can be found in the Clustering capabilities. The installation files are easily obtainable at http://www.splunk.com. There is a “Free vs. Enterprise” comparison available on Splunk´s website.

Why should I use it?
My main focus are Proof of Concepts and Troubleshooting scenarios along with performance comparisons. The Free edition should help you in many cases searching for errors and optimization points. In huge enterprise environments it can help you get insights you have not seen before in such an easy way.

Installing a basic Splunk Server
I have a Windows Server 2012 R2 Server without any other software components in place. To start we need to click on the “splunk-6.2.1-245427-x64-release” that was downloaded before.

Tick the checkbox to accept the License Agreement and click CUSTOMIZE OPTIONS. I am doing this only to document the different steps you can configure. Otherwise click INSTALL.

1_Splunk

Choose the path were you want the files to be located. I´m leaving it as it is. NEXT.

2_Splunk

In this case we will use the local system because it is sufficient for a first laptop test environment. You should use “Domain Account” if you want to do any of the following actions with Splunk Enterprise:

  • Read Event Logs remotely
  • Collect performance counters remotely
  • Read network shares for log files

Further information can be found here. NEXT.

3_Splunk

Yes, create a Start Menu Shortcut. INSTALL.

4_Splunk

Click FINISH to start a browser with the Splunk website.

5_Splunk

Now we need to sign in to the website. Type the default credentials in the fields.
Username: admin
Password: changeme
SIGN IN.

6_Splunk

We need to change the password after login. SAVE PASSWORD.

7_Splunk

We are in. The Splunk server is running and ready for further mess.
If you need to change the transport type to HTTPS you can easily change this under Settings >Server Settings >General Settings.
You see how easy it was to install the basic Splunk server. It won´t get any harder with the other components.

Install uberAgent components
Now let´s install the “uberAgent_indexer.tgz” and the “uberAgent_searchhead.tgz”. To do this we need to click on the small wheel shown below.

8_Splunk

What is a search head?
This is a Splunk Enterprise instance that handles search management functions.

What is the Indexer?
This is Splunk Enterprise instance that indexes data, transforms raw data into events and places the results into an index. It also searches the indexed data in response to search requests.

Click on INSTALL APP FROM FILE.

9_Splunk

Now browse to the place you downloaded the uberAgent files to and choose “uberAgent_indexer.tgz”. You don´t need to tick the checkbox below if you haven´t already an uberAgent package uploaded to your Splunk server.

10_Splunk

Do this step again to upload the “uberAgent_searchhead.tgz”. Restart your Splunk server afterwards.

11_Splunk

It is running, what´s next?
The next blog will deal with the uberAgent installation and configuration. Until then you can have a look at the other available Splunk apps here: https://apps.splunk.com

Cheers,
Sinisa

Citrix & VMware – Installer Mess!

$
0
0

At first I want to wish you all a happy new year. I had planned a different blog post as the first one but I had no chance of preventing me writing down these thoughts about the installers of Citrix XenDesktop (respectively XenApp) and VMware Horizon View.

Both companies have large-scale installations out there and both are on the market for a very long time. But although they should have experience with enterprise environments and customization possibilities for their software components they still have room for improvement.

Lets have a look at some examples:

Citrix

Citrix XenDesktop VDA Installation

Some weeks ago Citrix released their stand-alone installer for the VDA component.

Before that they provided a way of extracting different files and folders from the ISO to reduce the package size. The KB-article can be found here: http://support.citrix.com/article/CTX140973

Until that time the only chance of getting the right combination of files and folders for a reduced package size was trial and error. Then putting files together and checking the installer logs for errors during installation.
That way we were able to install the reduced packages for the Controller, VDA and Studio components back from Version 7.0 without the need of using the whole ISO from a network share.

The other infrastructure components?

StoreFront is straight forward but what about the Controller component or the Citrix Studio? Have you seen the KB-article about manual installation of the Citrix Studio?
No? Here it is: http://support.citrix.com/article/CTX127527.

You need to install all of this packages and the prerequisites that I don´t explicitly mention here:

PowerShell SDKs
x**\Citrix Desktop Delivery Controller\ADIdentity_PowerShellSnapIn_x**.msi
x**\Citrix Desktop Delivery Controller\Broker_PowerShellSnapIn_x**.msi
x**\Citrix Desktop Delivery Controller\Configuration_PowerShellSnapIn_x**.msi
x**\Citrix Desktop Delivery Controller\Host_PowerShellSnapIn_x**.msi
x**\Citrix Desktop Delivery Controller\MachineCreation_PowerShellSnapIn_x**.msi
x**\Citrix Desktop Delivery Controller\MachineIdentity_PowerShellSnapIn_x**.msi
x**\Citrix Desktop Delivery Controller\Citrix.Common.Commands.Install_x**.msi
x**\Licensing\ Licensing Config.PowerShellSnapIn.msi
x**\Desktop Studio\PVS PowerShell SDK x**.msi
x**\Citrix Policy\CitrixGroupPolicyManagement_x**.msi

Desktop Studio MMC Snap-in
x**\Desktop Studio\Desktop Studio_x**.msi

Is this something you would call customer-friendly? Citrix was marketing its new simple GUI installation from the beginning of XenDesktop 7.0. Take a deeper look under the hood and it looks differently.

The concept of small building blocks

Please don´t get me wrong. I like the principle of creating small building blocks. But it doesn´t makes sense if I start giving packagers the “Desktop Studio_x**.msi” just to realize that there are some (or even more) things missing after the package has been deployed. The files and the documentation need some adjustment from Citrix in that case to make clear how things work.

But… Not everything is bad about the installers.

Likes

  • Generic installation of the complete infrastructure without the need to make configurations during installation
  • Ease of component installation: XenDesktopServerSetup.exe /quiet /components CONTROLLER /nosql … really simple and straight forward
  • Once packaged these packages can be used for different environments.

Don´t likes

  • Citrix assumes we would use the GUI to install customer environments. I am an Consultant and want to script and automate things. And large scale enterprises don´t click, they deploy with SCCM or something similar.
  • Missing stand-alone packages for the other infrastructure components

Lets have a look at how VMware does the job….

VMware

VMware View Connection Server Installation

If you log in to your my.vmware.com account you are presented with a few download options regarding the installers for the infrastructure. Lets take the View Connection Server installer as example. This is one single file that is capable of installing the Connection Server, the Replica Server and the Security Server role. In my opinion straight forward until it comes to the point were you need to pair the security server with a connection server or the Replica Server with it´s counter part.

Commandline options are ok but unnecessary complicated in my opinion. The installation commandlines and options should be as simple as possible to prevent quoting errors or typos.

Likes

  • Simple installer structure
  • Smaller sources size then XenDesktop

Don´t likes

  • Unnecessary complicated installer options: Vmware-viewconnectionserver-y.y.y-xxxxxx.exe /s /v”/qn VDM_SERVER_Instance_TYPE=2 ADAM_PRIMARY_NAME=cs1.companydomain.com VDM_INITIAL_ADMIN_SID=S-1-5-32-544 VDM_SERVER_RECOVERY_PWD=password VDM_SERVER_RECOVERY_PWD_REMINDER=””password”””
  • No generic infrastructure installation possible

Wrap-up

I suggest merging the Citrix and VMware developers to create the perfect installer experience :-).
The Citrix XenDesktop installers are easy to use and generic. Configuration is done after the initial installation. But they are badly provided from the ground up, making it unnecessary complicated for packagers to reduce the footprint of the packages.
VMware has the better concept for their installers. But if you dive deeper into the installation options and the need to configure some of the components during install, they lack of a generic possibility of installation.

If we take a further look at Microsoft and the installation of their infrastructure components then Microsoft takes the lead:

Add-windowsfeature RDS-RD-Server

It can´t be simpler to install a infrastructure role. As long as you don´t have to install the System Center Suite, that´s another topic.

Cheers,
Sinisa

uberAgent for Splunk – Installation and Configuration

$
0
0

With this second blog post regarding Splunk and Helge´s uberAgent I want to share my experiences during installation and configuration.
I will start with an overview of the uberAgent installation, will then switch to some configuration settings and give you a quick overview about how it can be licensed and which operating systems are supported. At the end I will describe how you can clean up your Splunk server to start with a fresh data collection.

Automated Installation of uberAgent
The installation is simple and quickly done. As I am a friend of automation and PowerShell you can download a PowerShell AppDeployment Toolkit package of uberAgent here.

Manual installation
If you still want to do it manually. Here´s how it goes…

Start “uberAgent-32.msi” or “uberAgent-64.msi” from the Files\bin folder or use one of the prepared batch files.

uberAgent_Files

Let´s use “uberAgent-64.msi” for this example.

The first screen comes up. NEXT.

1_uberAgent

We accept the License Agreement. NEXT.

2_uberAgent

Now we can change the installation directory. I will leave it as it is. NEXT.

3_uberAgent

At this point we need to insert the Splunk Indexers or forwarders with the desired port. I inserted my Splunk server with the default port. NEXT.

4_uberAgent

That is all. INSTALL.

5_uberAgent

The installation is done and we complete the process with FINISH.

6_uberAgent

We now have a new Service running on the machine.

7_uberAgent

The details show which executable is run.

9_uberAgent

When we switch to the path to the executable stated above we see a total of three files in the installation directory. If you don´t insert a valid license key after the installation a fourth file (HKSplash.exe) can be found in that directory. This is the Splash screen that will come up every time you log on to a machine with uberAgent.

uberAgent_directory

If we now switch to the registry we can see a handfull of keys like the specified install location and the Splunk Indexers or Forwarders with the desired port.

10_uberAgent

One key further we see information about uberAgents Last timestamps.

11_uberAgent

Data Collection
UberAgent directly starts to gather the following data:

  • Logon duration
  • Computer startup duration
  • Machine performance
  • Session performance
  • Process Performance
  • Application performance
  • Application usage
  • Application versions
  • Process startup duration
  • GPU usage
  • Browser performance per website
  • And many more

A full list of the collected metrics can be found here: https://helgeklein.com/uberagent-for-splunk/list-metrics/

Supported Systems
uberAgent works on Windows Vista, Windows Server 2008 and above.

Licensing
The agent comes with two licensing modes

  • Client licenses
  • Server licenses

Both types are available as perpetual, term and service provider licenses. The server license explicitly covers Remote Desktop Services servers and similar systems, too (e.g. Citrix XenApp, Microsoft RDS).
You also need a Splunk license if you choose to collect more then 500 MB data per day. Everything below is covered by a free license. For small POCs and performance tests on RDS systems this should be sufficent.

DebugMode
DebugMode is enabled by default on the endpoints. Two logfiles are created in C:\Windows\temp:

  • uberAgent.log
  • uAInSessionHelper.log

If you want to disable it you need to change the entry in the config file “uberAgent.conf” in the installation directory. A restart of the uberAgent service commits the changes.

[Miscellaneous]
DebugMode = true

Changing the Splunk Server Adress after installation
If you want to change the Splunk server adress after the initial installation be sure to change the Computername value in the registry AND in the config file. When you are done restart the uberAgent service for the changes to take effect.

Cleaning Splunk Eventdata
Sometimes it might be usefull to clean up the Splunk server data in order to start with a fresh Index. You can do that by using the CLI on the Splunk server. Here´s how to do it:

First we need to stop Splunk…

Splunk stop

Then we clean up the index data…

Splunk clean eventdata

And when the command is done we start Splunk…

Splunk start

In PowerShell this will look someway like this:

PS C:\Program Files\Splunk\bin> .\splunk.exe stop
Splunkd: Stopped
PS C:\Program Files\Splunk\bin> .\splunk.exe clean eventdata
This action will permanently erase all events from ALL indexes; it cannot be undone.
Are you sure you want to continue [y/n]? y
Cleaning database _audit.
Cleaning database _blocksignature.
Cleaning database _internal.
Cleaning database _introspection.
Cleaning database _thefishbucket.
Cleaning database history.
Cleaning database main.
Cleaning database msad.
Cleaning database perfmon.
Cleaning database summary.
Cleaning database uberagent.
Cleaning database windows.
Cleaning database wineventlog.
Cleaning database winevents.
Cleaning database xd.
Cleaning database xd_alerts.
Cleaning database xd_perfmon.
Cleaning database xd_winevents.
Disabled database 'splunklogger': will not clean.
PS C:\Program Files\Splunk\bin> .\splunk.exe start

Splunk> The IT Search Engine.

Checking prerequisites...
        Checking http port [8000]: open
        Checking mgmt port [8089]: open
        Checking appserver port [127.0.0.1:8065]: open
        Checking kvstore port [8191]: open
        Checking configuration...  Done.
        Checking critical directories...        Done
        Checking indexes...
                Validated: _audit _blocksignature _internal _introspection _thefishbucket history main msad perfmon summ
ary uberagent windows wineventlog winevents xd xd_alerts xd_perfmon xd_winevents
        Done
        Checking filesystem compatibility...  Done
        Checking conf files for problems...
                Value in stanza [eventtype=uberAgent:Logon:SessionLogonTime] in C:\Program Files\Splunk\etc\apps\uberAge
nt\default\tags.conf, line 1 not URI encoded: eventtype = uberAgent:Logon:SessionLogonTime
                Value in stanza [eventtype=uberAgent:Logon:ProfileLoadTimeMs] in C:\Program Files\Splunk\etc\apps\uberAg
ent\default\tags.conf, line 5 not URI encoded: eventtype = uberAgent:Logon:ProfileLoadTimeMs
                Value in stanza [eventtype=uberAgent:Logon:GroupPolicyProcessingTimes] in C:\Program Files\Splunk\etc\ap
ps\uberAgent\default\tags.conf, line 9 not URI encoded: eventtype = uberAgent:Logon:GroupPolicyProcessingTimes
                Value in stanza [eventtype=uberAgent:Logon:GroupPolicyCSEDetail] in C:\Program Files\Splunk\etc\apps\ube
rAgent\default\tags.conf, line 13 not URI encoded: eventtype = uberAgent:Logon:GroupPolicyCSEDetail
                Value in stanza [eventtype=uberAgent:Logon:GroupPolicyLogonScriptTimeMs] in C:\Program Files\Splunk\etc\
apps\uberAgent\default\tags.conf, line 17 not URI encoded: eventtype = uberAgent:Logon:GroupPolicyLogonScriptTimeMs
                Value in stanza [eventtype=uberAgent:Logon:ADLogonScriptTimeMs] in C:\Program Files\Splunk\etc\apps\uber
Agent\default\tags.conf, line 21 not URI encoded: eventtype = uberAgent:Logon:ADLogonScriptTimeMs
                Value in stanza [eventtype=uberAgent:Logon:ShellStartupTimeMs] in C:\Program Files\Splunk\etc\apps\uberA
gent\default\tags.conf, line 25 not URI encoded: eventtype = uberAgent:Logon:ShellStartupTimeMs
                Value in stanza [eventtype=uberAgent:Logon:TotalLogonTimeMs] in C:\Program Files\Splunk\etc\apps\uberAge
nt\default\tags.conf, line 29 not URI encoded: eventtype = uberAgent:Logon:TotalLogonTimeMs
                Value in stanza [eventtype=uberAgent:Logon:SessionEnd] in C:\Program Files\Splunk\etc\apps\uberAgent\def
ault\tags.conf, line 33 not URI encoded: eventtype = uberAgent:Logon:SessionEnd
                Value in stanza [eventtype=uberAgent:Application:BrowserPerformanceIE] in C:\Program Files\Splunk\etc\ap
ps\uberAgent\default\tags.conf, line 37 not URI encoded: eventtype = uberAgent:Application:BrowserPerformanceIE
                Value in stanza [eventtype=uberAgent:Application:BrowserPerformanceChrome] in C:\Program Files\Splunk\et
c\apps\uberAgent\default\tags.conf, line 43 not URI encoded: eventtype = uberAgent:Application:BrowserPerformanceChrome
                Value in stanza [eventtype=uberAgent:Application:OutlookPluginLoad] in C:\Program Files\Splunk\etc\apps\
uberAgent\default\tags.conf, line 49 not URI encoded: eventtype = uberAgent:Application:OutlookPluginLoad
                Value in stanza [eventtype=uberAgent:System:SystemPerformanceSummary] in C:\Program Files\Splunk\etc\app
s\uberAgent\default\tags.conf, line 55 not URI encoded: eventtype = uberAgent:System:SystemPerformanceSummary
                Value in stanza [eventtype=uberAgent:System:GpuUsage] in C:\Program Files\Splunk\etc\apps\uberAgent\defa
ult\tags.conf, line 67 not URI encoded: eventtype = uberAgent:System:GpuUsage
                Value in stanza [eventtype=uberAgent:System:MachineInventory] in C:\Program Files\Splunk\etc\apps\uberAg
ent\default\tags.conf, line 71 not URI encoded: eventtype = uberAgent:System:MachineInventory
                Value in stanza [eventtype=uberAgent:Process:NetworkTargetPerformance] in C:\Program Files\Splunk\etc\ap
ps\uberAgent\default\tags.conf, line 77 not URI encoded: eventtype = uberAgent:Process:NetworkTargetPerformance
                Value in stanza [eventtype=uberAgent:Session:SessionDetail] in C:\Program Files\Splunk\etc\apps\uberAgen
t\default\tags.conf, line 83 not URI encoded: eventtype = uberAgent:Session:SessionDetail
                Value in stanza [eventtype=uberAgent:Application:ApplicationDetail] in C:\Program Files\Splunk\etc\apps\
uberAgent\default\tags.conf, line 93 not URI encoded: eventtype = uberAgent:Application:ApplicationDetail
                Value in stanza [eventtype=uberAgent:Application:ApplicationInventory] in C:\Program Files\Splunk\etc\ap
ps\uberAgent\default\tags.conf, line 105 not URI encoded: eventtype = uberAgent:Application:ApplicationInventory
                Value in stanza [eventtype=uberAgent:Process:ProcessDetail] in C:\Program Files\Splunk\etc\apps\uberAgen
t\default\tags.conf, line 109 not URI encoded: eventtype = uberAgent:Process:ProcessDetail
                Value in stanza [eventtype=uberAgent:Process:ProcessStartup] in C:\Program Files\Splunk\etc\apps\uberAge
nt\default\tags.conf, line 123 not URI encoded: eventtype = uberAgent:Process:ProcessStartup
                Value in stanza [eventtype=uberAgent:Application:SoftwareUpdateInventory] in C:\Program Files\Splunk\etc
\apps\uberAgent\default\tags.conf, line 131 not URI encoded: eventtype = uberAgent:Application:SoftwareUpdateInventory
                Value in stanza [eventtype=uberAgent:OnOffTransition:BootDetail] in C:\Program Files\Splunk\etc\apps\ube
rAgent\default\tags.conf, line 135 not URI encoded: eventtype = uberAgent:OnOffTransition:BootDetail
                Value in stanza [eventtype=uberAgent:OnOffTransition:BootIODetail] in C:\Program Files\Splunk\etc\apps\u
berAgent\default\tags.conf, line 139 not URI encoded: eventtype = uberAgent:OnOffTransition:BootIODetail
                Value in stanza [eventtype=uberAgent:OnOffTransition:BootProcessDetail] in C:\Program Files\Splunk\etc\a
pps\uberAgent\default\tags.conf, line 143 not URI encoded: eventtype = uberAgent:OnOffTransition:BootProcessDetail
                Value in stanza [eventtype=uberAgent:OnOffTransition:ShutdownDetail] in C:\Program Files\Splunk\etc\apps
\uberAgent\default\tags.conf, line 147 not URI encoded: eventtype = uberAgent:OnOffTransition:ShutdownDetail
                Value in stanza [eventtype=uberAgent:OnOffTransition:StandbyDetail] in C:\Program Files\Splunk\etc\apps\
uberAgent\default\tags.conf, line 151 not URI encoded: eventtype = uberAgent:OnOffTransition:StandbyDetail
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowAppStartup] in C:\Program Files\Splunk\etc\apps
\uberAgent\default\tags.conf, line 155 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowAppStartup
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowAppShutdown] in C:\Program Files\Splunk\etc\app
s\uberAgent\default\tags.conf, line 159 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowAppShutdown
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowAppStandby] in C:\Program Files\Splunk\etc\apps
\uberAgent\default\tags.conf, line 163 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowAppStandby
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowServiceStartup] in C:\Program Files\Splunk\etc\
apps\uberAgent\default\tags.conf, line 167 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowServiceStartup
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowServiceShutdown] in C:\Program Files\Splunk\etc
\apps\uberAgent\default\tags.conf, line 171 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowServiceShutdown
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowServiceHybridStandby] in C:\Program Files\Splun
k\etc\apps\uberAgent\default\tags.conf, line 175 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowServiceHybri
dStandby
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowDriverStartup] in C:\Program Files\Splunk\etc\a
pps\uberAgent\default\tags.conf, line 179 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowDriverStartup
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowDriverShutdown] in C:\Program Files\Splunk\etc\
apps\uberAgent\default\tags.conf, line 183 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowDriverShutdown
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowDriverStandby] in C:\Program Files\Splunk\etc\a
pps\uberAgent\default\tags.conf, line 187 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowDriverStandby
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowDriverResume] in C:\Program Files\Splunk\etc\ap
ps\uberAgent\default\tags.conf, line 191 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowDriverResume
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowUserPolicy] in C:\Program Files\Splunk\etc\apps
\uberAgent\default\tags.conf, line 195 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowUserPolicy
                Value in stanza [eventtype=uberAgent:OnOffTransition:SlowSMSSInit] in C:\Program Files\Splunk\etc\apps\u
berAgent\default\tags.conf, line 199 not URI encoded: eventtype = uberAgent:OnOffTransition:SlowSMSSInit
                Value in stanza [eventtype=uberAgent:System:PerformanceCounter] in C:\Program Files\Splunk\etc\apps\uber
Agent\default\tags.conf, line 203 not URI encoded: eventtype = uberAgent:System:PerformanceCounter
                Your indexes and inputs configurations are not internally consistent. For more information, run 'splunk
btool check --debug'
        Done
All preliminary checks passed.

Starting splunk server daemon (splunkd)...

Splunkd: Starting (pid 3680)
Done


Waiting for web server at https://127.0.0.1:8000 to be available..... Done


If you get stuck, we're here to help.
Look for answers here: http://docs.splunk.com

The Splunk web interface is at https://SERVERNAME:8000

I hope this is a good start for you to understand were uberAgent is installed and how you can change basic settings.

The next blog post will deal with the customization of data collection and more detail how to minimize the amount of data sent to the Splunk server.

All information as always without warranty for any failures in your environment.

Cheers,
Sinisa

How to set Citrix XenApp 7.6 Policies with PowerShell

$
0
0

I was recently asked how to create Citrix policies with PowerShell and I must admit that it took me some time to figure it out. If you search for solutions you get only a few hints on how to do it. The best hint came from Ingmar Verheij (http://www.ingmarverheij.com/set-citrix-policies-via-powershell/) but things changed a little but with the latest XenApp and XenDesktop versions.

Why should we use PowerShell to create Citrix Policies?
Lets start with some words why you should use PowerShell and why you should use Citrix Policies without setting them by Group Policy. PowerShell gives us the possibility to create baseline policies for a whole bunch of customers and you can parameterize your installations or you can recreate your homelab automatically.
And… processing local policies should be much faster (I will recheck that argument shortly by comparing the logon duration between locally set Citrix Policies and GPOs).

Now let me explain how to do it:

First of all switch to the following location (you should be doing this on a Controller):

cd "C:\Program Files (x86)\Citrix\Scout\Current\Utilities"

Then import the PowerShell module:

import-module "C:\Program Files (x86)\Citrix\Scout\Current\Utilities\Citrix.GroupPolicy.Commands.psm1"

Let´s check if it is loaded:

get-module

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     0.0        Citrix.GroupPolicy.Commands         {Add-CtxGroupPolicyFilter, Export-CtxGroupPolicy, Get-CtxG...
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Con...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}

Looking good. Although the Version 0.0 doesn’t produce much confidence.

Now let´s check what commands are available:

get-command -Module Citrix.GroupPolicy.Commands

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Function        Add-CtxGroupPolicyFilter                           Citrix.GroupPolicy.Commands
Function        Export-CtxGroupPolicy                              Citrix.GroupPolicy.Commands
Function        Get-CtxGroupPolicy                                 Citrix.GroupPolicy.Commands
Function        Get-CtxGroupPolicyConfiguration                    Citrix.GroupPolicy.Commands
Function        Get-CtxGroupPolicyFilter                           Citrix.GroupPolicy.Commands
Function        Import-CtxGroupPolicy                              Citrix.GroupPolicy.Commands
Function        New-CtxGroupPolicy                                 Citrix.GroupPolicy.Commands
Function        Remove-CtxGroupPolicy                              Citrix.GroupPolicy.Commands
Function        Remove-CtxGroupPolicyFilter                        Citrix.GroupPolicy.Commands
Function        Set-CtxGroupPolicy                                 Citrix.GroupPolicy.Commands
Function        Set-CtxGroupPolicyConfiguration                    Citrix.GroupPolicy.Commands
Function        Set-CtxGroupPolicyFilter                           Citrix.GroupPolicy.Commands

We need to create a new PSdrive before we can move on:

new-psdrive -name LocalFarmGpo -psprovider CitrixGroupPolicy -controller localhost \

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
LocalFa...                             CitrixGrou... LocalFarmGpo:\

You should name it exactly like shown above (LocalFarmGpo) because for some reason all the functions in the PSM1 module are hardcoded to that PSDrive. Otherwise you will get errors. Here´s the link to the online documentation: http://docs.citrix.com/en-us/xenapp-and-xendesktop/7-5/cds-sdk-wrapper-rho.html.

See if it´s there:

Get-PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Alias                                  Alias
C                  19,61         40,04 FileSystem    C:\                                     Users\Administrator.MACPRO
Cert                                   Certificate   \
D                                      FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
LocalFa...                             CitrixGrou... LocalFarmGpo:\
LocalGpo                               CitrixGrou... LocalGpo:\
Templates                              CitrixGrou... Templates:\
Variable                               Variable
WSMan                                  WSMan
XDHyp                                  Citrix.Hyp... XDHyp:\

Now we can check how to create a new Citrix policy:

get-help New-CtxGroupPolicy

NAME
    New-CtxGroupPolicy

SYNOPSIS
    Creates group policies.

SYNTAX
    New-CtxGroupPolicy [-PolicyName]  [-Type]  [-Description ] [-Enabled ] [-Priority
    ] [-DriveName ] [-WhatIf] [-Confirm] []

DESCRIPTION
    This cmdlet creates group policies using the Citrix.Common.GroupPolicy provider.

RELATED LINKS
    Set-CtxGroupPolicy
    Remove-CtxGroupPolicy

REMARKS
    To see the examples, type: "get-help New-CtxGroupPolicy -examples".
    For more information, type: "get-help New-CtxGroupPolicy -detailed".
    For technical information, type: "get-help New-CtxGroupPolicy -full".
    For online help, type: "get-help New-CtxGroupPolicy -online"

Okay…

Everything is working and we do know how to create a new GPO:

New-CtxGroupPolicy Test-Policy user

Diving into it:

cd LocalFarmGpo:\

We can now jump into user or computer settings.

Set-CtxGroupPolicyConfiguration Test-Policy user SessionClipboardWriteAllowedFormats Enabled

If you only want to see the settings for a specific Policy you can run:

Get-CtxGroupPolicyConfiguration Test-Policy -ConfiguredOnly

If you want to know all the settings you can set, run the following command:

Get-CtxGroupPolicyConfiguration

This is what it looks like:

policies

Here´s a handy little script that manages loading the Module and creating the PSdrive. You can dive directly with it into the local policies:

# Variables for GPO creation
$PolicyName = Read-Host "Please insert the name of the local Citrix Group Policy you want to create"
$Scope = Read-Host "Please insert the scope of the Policy (user or computer)"

# Import the Module
import-module "C:\Program Files (x86)\Citrix\Scout\Current\Utilities\Citrix.GroupPolicy.Commands.psm1"

# Create the PSDrive
new-psdrive -name LocalFarmGpo -psprovider CitrixGroupPolicy -controller localhost \

# Some commands to get you started...

# Get the available Policies
# Get-CtxGroupPolicy

# Create a new Policy
# New-CtxGroupPolicy $PolicyName $Scope

# Command to retrieve all the configurable items
# Get-CtxGroupPolicyConfiguration

<# Set Policy Settings
    Set-CtxGroupPolicyConfiguration $PolicyName $Scope SessionClipboardWriteAllowedFormats Enabled
    
    or that way...
    PS C:\> $obj = Get-CtxGroupPolicyConfiguration $PolicyName $Scope
    PS C:\> $obj.SessionClipboardWriteAllowedFormats = "Enabled"
    PS C:\> Set-CtxGroupPolicyConfiguration $obj
#>

# Configurable Policy Settings
<#

# Scope Computer

PolicyName                                 : Unfiltered
Type                                       : Computer
VirtualLoopbackPrograms                    : @{State=NotConfigured; Path=VirtualIP\VirtualLoopbackPrograms}
VirtualLoopbackSupport                     : @{State=NotConfigured; Path=VirtualIP\VirtualLoopbackSupport}
EnableAutoUpdateOfControllers              : @{State=NotConfigured; Path=VirtualDesktopAgent\EnableAutoUpdateOfControllers}
CPUUsageMonitoring_Enable                  : @{State=NotConfigured; Path=VirtualDesktopAgent\CPUUsageMonitoring\CPUUsageMonitoring_Enable}
CPUUsageMonitoring_Period                  : @{State=NotConfigured; Value=60; Path=VirtualDesktopAgent\CPUUsageMonitoring\CPUUsageMonitoring_Period}
CPUUsageMonitoring_Threshold               : @{State=NotConfigured; Value=95; Path=VirtualDesktopAgent\CPUUsageMonitoring\CPUUsageMonitoring_Threshold}
ExclusionList_Part                         : @{State=NotConfigured; Path=UserProfileManager\RegistrySettings\ExclusionList_Part}
IncludeListRegistry_Part                   : @{State=NotConfigured; Path=UserProfileManager\RegistrySettings\IncludeListRegistry_Part}
PSAlwaysCache                              : @{State=NotConfigured; Path=UserProfileManager\PSSettings\PSAlwaysCache}
PSAlwaysCache_Part                         : @{State=NotConfigured; Value=0; Path=UserProfileManager\PSSettings\PSAlwaysCache_Part}
PSEnabled                                  : @{State=NotConfigured; Path=UserProfileManager\PSSettings\PSEnabled}
PSPendingLockTimeout                       : @{State=NotConfigured; Value=1; Path=UserProfileManager\PSSettings\PSPendingLockTimeout}
PSUserGroups_Part                          : @{State=NotConfigured; Path=UserProfileManager\PSSettings\PSUserGroups_Part}
DeleteCachedProfilesOnLogoff               : @{State=NotConfigured; Path=UserProfileManager\ProfileHandling\DeleteCachedProfilesOnLogoff}
LocalProfileConflictHandling_Part          : @{State=NotConfigured; Value=Use; Path=UserProfileManager\ProfileHandling\LocalProfileConflictHandling_Part}
MigrateWindowsProfilesToUserStore_Part     : @{State=NotConfigured; Value=All; Path=UserProfileManager\ProfileHandling\MigrateWindowsProfilesToUserStore_Part}
ProfileDeleteDelay_Part                    : @{State=NotConfigured; Value=0; Path=UserProfileManager\ProfileHandling\ProfileDeleteDelay_Part}
TemplateProfileIsMandatory                 : @{State=NotConfigured; Path=UserProfileManager\ProfileHandling\TemplateProfileIsMandatory}
TemplateProfileOverridesLocalProfile       : @{State=NotConfigured; Path=UserProfileManager\ProfileHandling\TemplateProfileOverridesLocalProfile}
TemplateProfileOverridesRoamingProfile     : @{State=NotConfigured; Path=UserProfileManager\ProfileHandling\TemplateProfileOverridesRoamingProfile}
TemplateProfilePath                        : @{State=NotConfigured; Value=; Path=UserProfileManager\ProfileHandling\TemplateProfilePath}
DebugFilePath_Part                         : @{State=NotConfigured; Value=; Path=UserProfileManager\LogSettings\DebugFilePath_Part}
DebugMode                                  : @{State=NotConfigured; Path=UserProfileManager\LogSettings\DebugMode}
LogLevel_ActiveDirectoryActions            : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_ActiveDirectoryActions}
LogLevel_FileSystemActions                 : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_FileSystemActions}
LogLevel_FileSystemNotification            : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_FileSystemNotification}
LogLevel_Information                       : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_Information}
LogLevel_Logoff                            : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_Logoff}
LogLevel_Logon                             : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_Logon}
LogLevel_PolicyUserLogon                   : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_PolicyUserLogon}
LogLevel_RegistryActions                   : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_RegistryActions}
LogLevel_RegistryDifference                : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_RegistryDifference}
LogLevel_UserName                          : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_UserName}
LogLevel_Warnings                          : @{State=NotConfigured; Path=UserProfileManager\LogSettings\LogLevel_Warnings}
MaxLogSize_Part                            : @{State=NotConfigured; Value=1048576; Path=UserProfileManager\LogSettings\MaxLogSize_Part}
MirrorFoldersList_Part                     : @{State=NotConfigured; Path=UserProfileManager\FileSystemSettings\FSSynchronization\MirrorFoldersList_Part}
SyncDirList_Part                           : @{State=NotConfigured; Path=UserProfileManager\FileSystemSettings\FSSynchronization\SyncDirList_Part}
SyncFileList_Part                          : @{State=NotConfigured; Path=UserProfileManager\FileSystemSettings\FSSynchronization\SyncFileList_Part}
ExclusionListSyncDir_Part                  : @{State=NotConfigured; Path=UserProfileManager\FileSystemSettings\FSExclusions\ExclusionListSyncDir_Part}
ExclusionListSyncFiles_Part                : @{State=NotConfigured; Path=UserProfileManager\FileSystemSettings\FSExclusions\ExclusionListSyncFiles_Part}
CPEnable                                   : @{State=NotConfigured; Path=UserProfileManager\CPSettings\CPEnable}
CPMigrationFromBaseProfileToCPStore        : @{State=NotConfigured; Path=UserProfileManager\CPSettings\CPMigrationFromBaseProfileToCPStore}
CPPathData                                 : @{State=NotConfigured; Value=; Path=UserProfileManager\CPSettings\CPPathData}
CPSchemaPathData                           : @{State=NotConfigured; Value=; Path=UserProfileManager\CPSettings\CPSchemaPathData}
CPUserGroups_Part                          : @{State=NotConfigured; Path=UserProfileManager\CPSettings\CPUserGroups_Part}
DATPath_Part                               : @{State=NotConfigured; Value=Windows; Path=UserProfileManager\BasicSettings\DATPath_Part}
ExcludedGroups_Part                        : @{State=NotConfigured; Path=UserProfileManager\BasicSettings\ExcludedGroups_Part}
OfflineSupport                             : @{State=NotConfigured; Path=UserProfileManager\BasicSettings\OfflineSupport}
ProcessAdmins                              : @{State=NotConfigured; Path=UserProfileManager\BasicSettings\ProcessAdmins}
ProcessedGroups_Part                       : @{State=NotConfigured; Path=UserProfileManager\BasicSettings\ProcessedGroups_Part}
PSMidSessionWriteBack                      : @{State=NotConfigured; Path=UserProfileManager\BasicSettings\PSMidSessionWriteBack}
ServiceActive                              : @{State=NotConfigured; Path=UserProfileManager\BasicSettings\ServiceActive}
DisableDynamicConfig                       : @{State=NotConfigured; Path=UserProfileManager\AdvancedSettings\DisableDynamicConfig}
LoadRetries_Part                           : @{State=NotConfigured; Value=5; Path=UserProfileManager\AdvancedSettings\LoadRetries_Part}
LogoffRatherThanTempProfile                : @{State=NotConfigured; Path=UserProfileManager\AdvancedSettings\LogoffRatherThanTempProfile}
ProcessCookieFiles                         : @{State=NotConfigured; Path=UserProfileManager\AdvancedSettings\ProcessCookieFiles}
ConcurrentLogonsTolerance                  : @{State=NotConfigured; Value=2; Path=LoadManagement\ConcurrentLogonsTolerance}
CPUUsage                                   : @{State=NotConfigured; Value=-1; Path=LoadManagement\CPUUsage}
CPUUsageExcludedProcessPriority            : @{State=NotConfigured; Value=BelowNormalOrLow; Path=LoadManagement\CPUUsageExcludedProcessPriority}
DiskUsage                                  : @{State=NotConfigured; Value=-1; Path=LoadManagement\DiskUsage}
MaximumNumberOfSessions                    : @{State=NotConfigured; Value=250; Path=LoadManagement\MaximumNumberOfSessions}
MemoryUsage                                : @{State=NotConfigured; Value=-1; Path=LoadManagement\MemoryUsage}
MemoryUsageBaseLoad                        : @{State=NotConfigured; Value=768; Path=LoadManagement\MemoryUsageBaseLoad}
IcaListenerPortNumber                      : @{State=NotConfigured; Value=1494; Path=ICA\IcaListenerPortNumber}
IcaListenerTimeout                         : @{State=NotConfigured; Value=120000; Path=ICA\IcaListenerTimeout}
AcceptWebSocketsConnections                : @{State=NotConfigured; Path=ICA\WebSockets\AcceptWebSocketsConnections}
WebSocketsPort                             : @{State=NotConfigured; Value=8008; Path=ICA\WebSockets\WebSocketsPort}
WSTrustedOriginServerList                  : @{State=NotConfigured; Value=*; Path=ICA\WebSockets\WSTrustedOriginServerList}
SessionReliabilityConnections              : @{State=NotConfigured; Path=ICA\SessionReliability\SessionReliabilityConnections}
SessionReliabilityPort                     : @{State=NotConfigured; Value=2598; Path=ICA\SessionReliability\SessionReliabilityPort}
SessionReliabilityTimeout                  : @{State=NotConfigured; Value=180; Path=ICA\SessionReliability\SessionReliabilityTimeout}
IdleTimerInterval                          : @{State=NotConfigured; Value=0; Path=ICA\ServerLimits\IdleTimerInterval}
UpsCgpPort                                 : @{State=NotConfigured; Value=7229; Path=ICA\Printing\UniversalPrintServer\UpsCgpPort}
UpsEnable                                  : @{State=NotConfigured; Value=UpsDisabled; Path=ICA\Printing\UniversalPrintServer\UpsEnable}
UpsHttpPort                                : @{State=NotConfigured; Value=8080; Path=ICA\Printing\UniversalPrintServer\UpsHttpPort}
MultimediaAcceleration                     : @{State=NotConfigured; Path=ICA\Multimedia\MultimediaAcceleration}
MultimediaAccelerationDefaultBufferSize    : @{State=NotConfigured; Value=5; Path=ICA\Multimedia\MultimediaAccelerationDefaultBufferSize}
MultimediaAccelerationEnableCSF            : @{State=NotConfigured; Path=ICA\Multimedia\MultimediaAccelerationEnableCSF}
MultimediaAccelerationUseDefaultBufferSize : @{State=NotConfigured; Path=ICA\Multimedia\MultimediaAccelerationUseDefaultBufferSize}
MultimediaConferencing                     : @{State=NotConfigured; Path=ICA\Multimedia\MultimediaConferencing}
MultiPortPolicy                            : @{State=NotConfigured; Value=; Path=ICA\MSI\MultiPortPolicy}
MultiStreamPolicy                          : @{State=NotConfigured; Path=ICA\MSI\MultiStreamPolicy}
RtpAudioPortRange                          : @{State=NotConfigured; Value=16500,16509; Path=ICA\MSI\RtpAudioPortRange}
UDPAudioOnServer                           : @{State=NotConfigured; Path=ICA\MSI\UDPAudioOnServer}
AllowLocalAppAccess                        : @{State=NotConfigured; Path=ICA\LocalAppAccess\AllowLocalAppAccess}
URLRedirectionBlackList                    : @{State=NotConfigured; Path=ICA\LocalAppAccess\URLRedirectionBlackList}
URLRedirectionWhiteList                    : @{State=NotConfigured; Path=ICA\LocalAppAccess\URLRedirectionWhiteList}
IcaKeepAlives                              : @{State=NotConfigured; Value=DoNotSendKeepAlives; Path=ICA\KeepAlive\IcaKeepAlives}
IcaKeepAliveTimeout                        : @{State=NotConfigured; Value=60; Path=ICA\KeepAlive\IcaKeepAliveTimeout}
DisplayDegradePreference                   : @{State=NotConfigured; Value=ColorDepth; Path=ICA\Graphics\DisplayDegradePreference}
DisplayDegradeUserNotification             : @{State=NotConfigured; Path=ICA\Graphics\DisplayDegradeUserNotification}
DisplayMemoryLimit                         : @{State=NotConfigured; Value=65536; Path=ICA\Graphics\DisplayMemoryLimit}
DynamicPreview                             : @{State=NotConfigured; Path=ICA\Graphics\DynamicPreview}
ImageCaching                               : @{State=NotConfigured; Path=ICA\Graphics\ImageCaching}
LegacyGraphicsMode                         : @{State=NotConfigured; Path=ICA\Graphics\LegacyGraphicsMode}
MaximumColorDepth                          : @{State=NotConfigured; Value=BitsPerPixel32; Path=ICA\Graphics\MaximumColorDepth}
QueueingAndTossing                         : @{State=NotConfigured; Path=ICA\Graphics\QueueingAndTossing}
PersistentCache                            : @{State=NotConfigured; Value=3000000; Path=ICA\Graphics\Caching\PersistentCache}
EnhancedDesktopExperience                  : @{State=NotConfigured; Path=ICA\EnhancedDesktopExperience\EnhancedDesktopExperience}
IcaRoundTripCalculation                    : @{State=NotConfigured; Path=ICA\EndUserMonitoring\IcaRoundTripCalculation}
IcaRoundTripCalculationInterval            : @{State=NotConfigured; Value=15; Path=ICA\EndUserMonitoring\IcaRoundTripCalculationInterval}
IcaRoundTripCalculationWhenIdle            : @{State=NotConfigured; Path=ICA\EndUserMonitoring\IcaRoundTripCalculationWhenIdle}
AutoClientReconnect                        : @{State=NotConfigured; Path=ICA\AutoClientReconnect\AutoClientReconnect}
AutoClientReconnectAuthenticationRequired  : @{State=NotConfigured; Value=DoNotRequireAuthentication; Path=ICA\AutoClientReconnect\AutoClientReconnectAuthenticationRequired}
AutoClientReconnectLogging                 : @{State=NotConfigured; Value=DoNotLogAutoReconnectEvents; Path=ICA\AutoClientReconnect\AutoClientReconnectLogging}
AdvanceWarningFrequency                    : @{State=NotConfigured; Value=01:00:00; Path=ConfigMgr\AdvanceWarningFrequency}
AdvanceWarningMessageBody                  : @{State=NotConfigured; Value={TIMESTAMP}                                             
                                             Please save your work. The system will go offline for maintenance in {TIMELEFT}; Path=ConfigMgr\AdvanceWarningMessageBody}
AdvanceWarningMessageTitle                 : @{State=NotConfigured; Value=Upcoming Maintenance; Path=ConfigMgr\AdvanceWarningMessageTitle}
AdvanceWarningPeriod                       : @{State=NotConfigured; Value=16:00:00; Path=ConfigMgr\AdvanceWarningPeriod}
AgentTaskInterval                          : @{State=NotConfigured; Value=00:05:00; Path=ConfigMgr\AgentTaskInterval}
FinalForceLogoffMessageBody                : @{State=NotConfigured; Value=The system is currently going offline for maintenance; Path=ConfigMgr\FinalForceLogoffMessageBody}
FinalForceLogoffMessageTitle               : @{State=NotConfigured; Value=Notification From IT Staff; Path=ConfigMgr\FinalForceLogoffMessageTitle}
ForceLogoffGracePeriod                     : @{State=NotConfigured; Value=00:05:00; Path=ConfigMgr\ForceLogoffGracePeriod}
ForceLogoffMessageBody                     : @{State=NotConfigured; Value={TIMESTAMP}
                                             Please save your work. The system will go offline for maintenance in {TIMELEFT}; Path=ConfigMgr\ForceLogoffMessageBody}
ForceLogoffMessageTitle                    : @{State=NotConfigured; Value=Notification From IT Staff; Path=ConfigMgr\ForceLogoffMessageTitle}
ImageProviderIntegrationEnabled            : @{State=NotConfigured; Path=ConfigMgr\ImageProviderIntegrationEnabled}
RebootMessageBody                          : @{State=NotConfigured; Value=The system is currently going offline for maintenance; Path=ConfigMgr\RebootMessageBody}

# Scope User

PolicyName                              : Unfiltered
Type                                    : User
ProfileLoadTimeMonitoring_Enable        : @{State=NotConfigured; Path=VirtualDesktopAgent\ProfileLoadTimeMonitoring\ProfileLoadTimeMonitoring_Enable}
ProfileLoadTimeMonitoring_Threshold     : @{State=NotConfigured; Value=60; Path=VirtualDesktopAgent\ProfileLoadTimeMonitoring\ProfileLoadTimeMonitoring_Threshold}
ICALatencyMonitoring_Enable             : @{State=NotConfigured; Path=VirtualDesktopAgent\ICALatencyMonitoring\ICALatencyMonitoring_Enable}
ICALatencyMonitoring_Period             : @{State=NotConfigured; Value=30; Path=VirtualDesktopAgent\ICALatencyMonitoring\ICALatencyMonitoring_Period}
ICALatencyMonitoring_Threshold          : @{State=NotConfigured; Value=200; Path=VirtualDesktopAgent\ICALatencyMonitoring\ICALatencyMonitoring_Threshold}
EnableLossless                          : @{State=NotConfigured; Path=VirtualDesktopAgent\HDX3DPro\EnableLossless}
ProGraphicsObj                          : @{State=NotConfigured; Value=6553600; Path=VirtualDesktopAgent\HDX3DPro\ProGraphicsObj}
FRVideos_Part                           : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRVideos\FRVideos_Part}
FRVideosPath_Part                       : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRVideos\FRVideosPath_Part}
FRStartMenu_Part                        : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRStartMenu\FRStartMenu_Part}
FRStartMenuPath_Part                    : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRStartMenu\FRStartMenuPath_Part}
FRSearches_Part                         : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRSearches\FRSearches_Part}
FRSearchesPath_Part                     : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRSearches\FRSearchesPath_Part}
FRSavedGames_Part                       : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRSavedGames\FRSavedGames_Part}
FRSavedGamesPath_Part                   : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRSavedGames\FRSavedGamesPath_Part}
FRPictures_Part                         : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRPictures\FRPictures_Part}
FRPicturesPath_Part                     : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRPictures\FRPicturesPath_Part}
FRMusic_Part                            : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRMusic\FRMusic_Part}
FRMusicPath_Part                        : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRMusic\FRMusicPath_Part}
FRLinks_Part                            : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRLinks\FRLinks_Part}
FRLinksPath_Part                        : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRLinks\FRLinksPath_Part}
FRFavorites_Part                        : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRFavorites\FRFavorites_Part}
FRFavoritesPath_Part                    : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRFavorites\FRFavoritesPath_Part}
FRDownloads_Part                        : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRDownloads\FRDownloads_Part}
FRDownloadsPath_Part                    : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRDownloads\FRDownloadsPath_Part}
FRDocuments_Part                        : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRDocuments\FRDocuments_Part}
FRDocumentsPath_Part                    : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRDocuments\FRDocumentsPath_Part}
FRDesktop_Part                          : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRDesktop\FRDesktop_Part}
FRDesktopPath_Part                      : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRDesktop\FRDesktopPath_Part}
FRContacts_Part                         : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRContacts\FRContacts_Part}
FRContactsPath_Part                     : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRContacts\FRContactsPath_Part}
FRAdminAccess_Part                      : @{State=NotConfigured; Path=UserProfileManager\FolderRedirection\FRCommonSettings\FRAdminAccess_Part}
FRIncDomainName_Part                    : @{State=NotConfigured; Path=UserProfileManager\FolderRedirection\FRCommonSettings\FRIncDomainName_Part}
FRAppData_Part                          : @{State=NotConfigured; Value=RedirectUncPath; Path=UserProfileManager\FolderRedirection\FRAppData\FRAppData_Part}
FRAppDataPath_Part                      : @{State=NotConfigured; Value=; Path=UserProfileManager\FolderRedirection\FRAppData\FRAppDataPath_Part}
StorefrontAccountsList                  : @{State=NotConfigured; Path=Receiver\StorefrontAccountsList}
ClientClipboardWriteAllowedFormats      : @{State=NotConfigured; Path=ICA\ClientClipboardWriteAllowedFormats}
ClipboardRedirection                    : @{State=NotConfigured; Path=ICA\ClipboardRedirection}
DesktopLaunchForNonAdmins               : @{State=NotConfigured; Path=ICA\DesktopLaunchForNonAdmins}
NonPublishedProgramLaunching            : @{State=NotConfigured; Path=ICA\NonPublishedProgramLaunching}
ReadonlyClipboard                       : @{State=NotConfigured; Path=ICA\ReadonlyClipboard}
RestrictClientClipboardWrite            : @{State=NotConfigured; Path=ICA\RestrictClientClipboardWrite}
RestrictSessionClipboardWrite           : @{State=NotConfigured; Path=ICA\RestrictSessionClipboardWrite}
SessionClipboardWriteAllowedFormats     : @{State=NotConfigured; Path=ICA\SessionClipboardWriteAllowedFormats}
FramesPerSecond                         : @{State=NotConfigured; Value=30; Path=ICA\VisualDisplay\FramesPerSecond}
VisualQuality                           : @{State=NotConfigured; Value=Medium; Path=ICA\VisualDisplay\VisualQuality}
ExtraColorCompression                   : @{State=NotConfigured; Path=ICA\VisualDisplay\StillImages\ExtraColorCompression}
ExtraColorCompressionThreshold          : @{State=NotConfigured; Value=8192; Path=ICA\VisualDisplay\StillImages\ExtraColorCompressionThreshold}
LossyCompressionLevel                   : @{State=NotConfigured; Value=Medium; Path=ICA\VisualDisplay\StillImages\LossyCompressionLevel}
LossyCompressionThreshold               : @{State=NotConfigured; Value=2147483647; Path=ICA\VisualDisplay\StillImages\LossyCompressionThreshold}
ProgressiveHeavyweightCompression       : @{State=NotConfigured; Path=ICA\VisualDisplay\StillImages\ProgressiveHeavyweightCompression}
MinimumAdaptiveDisplayJpegQuality       : @{State=NotConfigured; Value=Normal; Path=ICA\VisualDisplay\MovingImages\MinimumAdaptiveDisplayJpegQuality}
MovingImageCompressionConfiguration     : @{State=NotConfigured; Path=ICA\VisualDisplay\MovingImages\MovingImageCompressionConfiguration}
ProgressiveCompressionLevel             : @{State=NotConfigured; Value=None; Path=ICA\VisualDisplay\MovingImages\ProgressiveCompressionLevel}
ProgressiveCompressionThreshold         : @{State=NotConfigured; Value=2147483647; Path=ICA\VisualDisplay\MovingImages\ProgressiveCompressionThreshold}
TargetedMinimumFramesPerSecond          : @{State=NotConfigured; Value=10; Path=ICA\VisualDisplay\MovingImages\TargetedMinimumFramesPerSecond}
UsbDeviceRedirection                    : @{State=NotConfigured; Path=ICA\USBDevices\UsbDeviceRedirection}
UsbDeviceRedirectionRules               : @{State=NotConfigured; Path=ICA\USBDevices\UsbDeviceRedirectionRules}
UsbPlugAndPlayRedirection               : @{State=NotConfigured; Path=ICA\USBDevices\UsbPlugAndPlayRedirection}
TwainCompressionLevel                   : @{State=NotConfigured; Value=Medium; Path=ICA\TWAINDevices\TwainCompressionLevel}
TwainRedirection                        : @{State=NotConfigured; Path=ICA\TWAINDevices\TwainRedirection}
LocalTimeEstimation                     : @{State=NotConfigured; Path=ICA\TimeZoneControl\LocalTimeEstimation}
SessionTimeZone                         : @{State=NotConfigured; Value=UseServerTimeZone; Path=ICA\TimeZoneControl\SessionTimeZone}
SessionConnectionTimer                  : @{State=NotConfigured; Path=ICA\SessionLimits\SessionConnectionTimer}
SessionConnectionTimerInterval          : @{State=NotConfigured; Value=1440; Path=ICA\SessionLimits\SessionConnectionTimerInterval}
SessionDisconnectTimer                  : @{State=NotConfigured; Path=ICA\SessionLimits\SessionDisconnectTimer}
SessionDisconnectTimerInterval          : @{State=NotConfigured; Value=1440; Path=ICA\SessionLimits\SessionDisconnectTimerInterval}
SessionIdleTimer                        : @{State=NotConfigured; Path=ICA\SessionLimits\SessionIdleTimer}
SessionIdleTimerInterval                : @{State=NotConfigured; Value=1440; Path=ICA\SessionLimits\SessionIdleTimerInterval}
MinimumEncryptionLevel                  : @{State=NotConfigured; Value=Basic; Path=ICA\Security\MinimumEncryptionLevel}
AutoCreationEventLogPreference          : @{State=NotConfigured; Value=LogErrorsAndWarnings; Path=ICA\Printing\AutoCreationEventLogPreference}
ClientPrinterRedirection                : @{State=NotConfigured; Path=ICA\Printing\ClientPrinterRedirection}
DefaultClientPrinter                    : @{State=NotConfigured; Value=ClientDefault; Path=ICA\Printing\DefaultClientPrinter}
PrinterAssignments                      : @{State=NotConfigured; Path=ICA\Printing\PrinterAssignments}
SessionPrinters                         : @{State=NotConfigured; Path=ICA\Printing\SessionPrinters}
WaitForPrintersToBeCreated              : @{State=NotConfigured; Path=ICA\Printing\WaitForPrintersToBeCreated}
UpsPrintStreamInputBandwidthLimit       : @{State=NotConfigured; Value=0; Path=ICA\Printing\UniversalPrintServer\UpsPrintStreamInputBandwidthLimit}
DPILimit                                : @{State=NotConfigured; Value=Unlimited; Path=ICA\Printing\UniversalPrinting\DPILimit}
EMFProcessingMode                       : @{State=NotConfigured; Value=SpoolDirectlyToPrinter; Path=ICA\Printing\UniversalPrinting\EMFProcessingMode}
ImageCompressionLimit                   : @{State=NotConfigured; Value=LosslessCompression; Path=ICA\Printing\UniversalPrinting\ImageCompressionLimit}
UniversalPrintingPreviewPreference      : @{State=NotConfigured; Value=NoPrintPreview; Path=ICA\Printing\UniversalPrinting\UniversalPrintingPreviewPreference}
UPDCompressionDefaults                  : @{State=NotConfigured; Value=ImageCompression=StandardQuality,HeavyweightCompression=False,ImageCaching=True,FontCaching=True,AllowNonAdminsToModify=False; Path=ICA\Printing\UniversalPrinting\UPDCompressionDefaults}
InboxDriverAutoInstallation             : @{State=NotConfigured; Path=ICA\Printing\Drivers\InboxDriverAutoInstallation}
UniversalDriverPriority                 : @{State=NotConfigured; Values=System.Object[]; Value=EMF;XPS;PCL5c;PCL4;PS; Path=ICA\Printing\Drivers\UniversalDriverPriority}
UniversalPrintDriverUsage               : @{State=NotConfigured; Value=FallbackToUpd; Path=ICA\Printing\Drivers\UniversalPrintDriverUsage}
AutoCreatePDFPrinter                    : @{State=NotConfigured; Path=ICA\Printing\ClientPrinters\AutoCreatePDFPrinter}
ClientPrinterAutoCreation               : @{State=NotConfigured; Value=AllPrinters; Path=ICA\Printing\ClientPrinters\ClientPrinterAutoCreation}
ClientPrinterNames                      : @{State=NotConfigured; Value=StandardPrinterNames; Path=ICA\Printing\ClientPrinters\ClientPrinterNames}
DirectConnectionsToPrintServers         : @{State=NotConfigured; Path=ICA\Printing\ClientPrinters\DirectConnectionsToPrintServers}
GenericUniversalPrinterAutoCreation     : @{State=NotConfigured; Path=ICA\Printing\ClientPrinters\GenericUniversalPrinterAutoCreation}
PrinterDriverMappings                   : @{State=NotConfigured; Path=ICA\Printing\ClientPrinters\PrinterDriverMappings}
PrinterPropertiesRetention              : @{State=NotConfigured; Value=FallbackToProfile; Path=ICA\Printing\ClientPrinters\PrinterPropertiesRetention}
RetainedAndRestoredClientPrinters       : @{State=NotConfigured; Path=ICA\Printing\ClientPrinters\RetainedAndRestoredClientPrinters}
ClientComPortRedirection                : @{State=NotConfigured; Path=ICA\Ports\ClientComPortRedirection}
ClientComPortsAutoConnection            : @{State=NotConfigured; Path=ICA\Ports\ClientComPortsAutoConnection}
ClientLptPortRedirection                : @{State=NotConfigured; Path=ICA\Ports\ClientLptPortRedirection}
ClientLptPortsAutoConnection            : @{State=NotConfigured; Path=ICA\Ports\ClientLptPortsAutoConnection}
MultimediaOptimization                  : @{State=NotConfigured; Path=ICA\Multimedia\MultimediaOptimization}
UseGPUForMultimediaOptimization         : @{State=NotConfigured; Path=ICA\Multimedia\UseGPUForMultimediaOptimization}
VideoQuality                            : @{State=NotConfigured; Value=Unconfigured; Path=ICA\Multimedia\VideoQuality}
MultiStream                             : @{State=NotConfigured; Path=ICA\MSI\MultiStream}
AutoKeyboardPopUp                       : @{State=NotConfigured; Path=ICA\MobileExperience\AutoKeyboardPopUp}
ComboboxRemoting                        : @{State=NotConfigured; Path=ICA\MobileExperience\ComboboxRemoting}
MobileDesktop                           : @{State=NotConfigured; Path=ICA\MobileExperience\MobileDesktop}
AllowVisuallyLosslessCompression        : @{State=NotConfigured; Path=ICA\Graphics\AllowVisuallyLosslessCompression}
AsynchronousWrites                      : @{State=NotConfigured; Path=ICA\FileRedirection\AsynchronousWrites}
AutoConnectDrives                       : @{State=NotConfigured; Path=ICA\FileRedirection\AutoConnectDrives}
ClientDriveLetterPreservation           : @{State=NotConfigured; Path=ICA\FileRedirection\ClientDriveLetterPreservation}
ClientDriveRedirection                  : @{State=NotConfigured; Path=ICA\FileRedirection\ClientDriveRedirection}
ClientFixedDrives                       : @{State=NotConfigured; Path=ICA\FileRedirection\ClientFixedDrives}
ClientFloppyDrives                      : @{State=NotConfigured; Path=ICA\FileRedirection\ClientFloppyDrives}
ClientNetworkDrives                     : @{State=NotConfigured; Path=ICA\FileRedirection\ClientNetworkDrives}
ClientOpticalDrives                     : @{State=NotConfigured; Path=ICA\FileRedirection\ClientOpticalDrives}
ClientRemoveableDrives                  : @{State=NotConfigured; Path=ICA\FileRedirection\ClientRemoveableDrives}
HostToClientRedirection                 : @{State=NotConfigured; Path=ICA\FileRedirection\HostToClientRedirection}
ReadOnlyMappedDrive                     : @{State=NotConfigured; Path=ICA\FileRedirection\ReadOnlyMappedDrive}
SpecialFolderRedirection                : @{State=NotConfigured; Path=ICA\FileRedirection\SpecialFolderRedirection}
AeroRedirection                         : @{State=NotConfigured; Path=ICA\DesktopUI\AeroRedirection}
DesktopWallpaper                        : @{State=NotConfigured; Path=ICA\DesktopUI\DesktopWallpaper}
GraphicsQuality                         : @{State=NotConfigured; Value=Medium; Path=ICA\DesktopUI\GraphicsQuality}
MenuAnimation                           : @{State=NotConfigured; Path=ICA\DesktopUI\MenuAnimation}
WindowContentsVisibleWhileDragging      : @{State=NotConfigured; Path=ICA\DesktopUI\WindowContentsVisibleWhileDragging}
AllowLocationServices                   : @{State=NotConfigured; Path=ICA\ClientSensors\Location\AllowLocationServices}
AudioBandwidthLimit                     : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\AudioBandwidthLimit}
AudioBandwidthPercent                   : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\AudioBandwidthPercent}
ClipboardBandwidthLimit                 : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\ClipboardBandwidthLimit}
ClipboardBandwidthPercent               : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\ClipboardBandwidthPercent}
ComPortBandwidthLimit                   : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\ComPortBandwidthLimit}
ComPortBandwidthPercent                 : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\ComPortBandwidthPercent}
FileRedirectionBandwidthLimit           : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\FileRedirectionBandwidthLimit}
FileRedirectionBandwidthPercent         : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\FileRedirectionBandwidthPercent}
HDXMultimediaBandwidthLimit             : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\HDXMultimediaBandwidthLimit}
HDXMultimediaBandwidthPercent           : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\HDXMultimediaBandwidthPercent}
LptBandwidthLimit                       : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\LptBandwidthLimit}
LptBandwidthLimitPercent                : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\LptBandwidthLimitPercent}
OverallBandwidthLimit                   : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\OverallBandwidthLimit}
PrinterBandwidthLimit                   : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\PrinterBandwidthLimit}
PrinterBandwidthPercent                 : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\PrinterBandwidthPercent}
TwainBandwidthLimit                     : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\TwainBandwidthLimit}
TwainBandwidthPercent                   : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\TwainBandwidthPercent}
USBBandwidthLimit                       : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\USBBandwidthLimit}
USBBandwidthPercent                     : @{State=NotConfigured; Value=0; Path=ICA\Bandwidth\USBBandwidthPercent}
AllowRtpAudio                           : @{State=NotConfigured; Path=ICA\Audio\AllowRtpAudio}
AudioPlugNPlay                          : @{State=NotConfigured; Path=ICA\Audio\AudioPlugNPlay}
AudioQuality                            : @{State=NotConfigured; Value=High; Path=ICA\Audio\AudioQuality}
ClientAudioRedirection                  : @{State=NotConfigured; Path=ICA\Audio\ClientAudioRedirection}
MicrophoneRedirection                   : @{State=NotConfigured; Path=ICA\Audio\MicrophoneRedirection}
FlashAcceleration                       : @{State=NotConfigured; Path=ICA\AdobeFlashDelivery\HDXMediaStreamForFlash\FlashAcceleration}
FlashBackwardsCompatibility             : @{State=NotConfigured; Path=ICA\AdobeFlashDelivery\HDXMediaStreamForFlash\FlashBackwardsCompatibility}
FlashDefaultBehavior                    : @{State=NotConfigured; Value=Enable; Path=ICA\AdobeFlashDelivery\HDXMediaStreamForFlash\FlashDefaultBehavior}
FlashEventLogging                       : @{State=NotConfigured; Path=ICA\AdobeFlashDelivery\HDXMediaStreamForFlash\FlashEventLogging}
FlashIntelligentFallback                : @{State=NotConfigured; Path=ICA\AdobeFlashDelivery\HDXMediaStreamForFlash\FlashIntelligentFallback}
FlashLatencyThreshold                   : @{State=NotConfigured; Value=30; Path=ICA\AdobeFlashDelivery\HDXMediaStreamForFlash\FlashLatencyThreshold}
FlashServerSideContentFetchingWhitelist : @{State=NotConfigured; Path=ICA\AdobeFlashDelivery\HDXMediaStreamForFlash\FlashServerSideContentFetchingWhitelist}
FlashUrlColorList                       : @{State=NotConfigured; Path=ICA\AdobeFlashDelivery\HDXMediaStreamForFlash\FlashUrlColorList}
FlashUrlCompatibilityList               : @{State=NotConfigured; Path=ICA\AdobeFlashDelivery\HDXMediaStreamForFlash\FlashUrlCompatibilityList}
#>

There are tons of configuration items you can configure that way. If you know how to do it it seems like a straight forward process.

Cheers,
Sinisa

A Look Inside My Homelab

$
0
0

I was busy upgrading and rebuilding my home lab in the last weeks. Now I want to share with you in detail how it looks like.

This blog post will cover the following topics:

  • Hardware overview
  • Network overview
  • Operating System overview
  • installation and configuration
  • Performance
  • Apps
  • Future Additions


_DSC7993

The basic idea behind the lab is to have a separate basic infrastructure on one host that is capable of managing one or more Hyper-V hosts in addition to one or more ESXi Hosts.


The Hardware

The first system in my lab was built with these components:

  • Lian Li PC-D666WRX Big-Tower
  • Z97M-D3H, Intel Z97 Mainboard – Socket 1150
  • Gigabyte Z97M-D3H, Intel Z97 Mainboard – Socket 1150
  • Intel Core i7-4770K 3,5 GHz (Haswell) Socket 1150
  • 2x Corsair Vengeance LP Series Black DDR3-1600, CL9 – 16 GB Kit
  • Samsung SH-224DB 5,25 Zoll SATA DVD-Burner
  • Corsair RM Series RM650 – 650 Watt
  • Cooler Master V8 CPU-Cooler – Vapor Chamber
  • Western Digital Red, SATA 6G, Intellipower, 3,5 – 2 TB
  • InLine 2x Gigabit Network-Card, PCIe x1 inkl. Low Profile
  • 2x Samsung 850 EVO Series 2,5 Zoll SSD, SATA 6G – 120 GB

Periphery
The monitor is a Samsung S32D850T 31,5 inch LED-Monitor. He is really huge and the best feature is that you can run two pictures side by side on it. It has a resolution of 2560 x 1440 Pixel (WQHD). In my opinion the best monitor I´ve ever had.
The mouse is a Mad Catz R.A.T. 7 Gaming Maus with 6400 dpi. I love it because you can change ergonomic parts an it to fit perfectly in my hand. I wanted a mouse with a cable because batteries are empty in the most stupid moments.
The keyboard is a SteelSeries 6Gv2 keyboard. I love the feedback of the keys because they feel like to old server keyboards 15 years ago.

Some details about the tower
The Tower supports two systems under one cover. I find this pretty cool because it doesn´t look like garbage in the room like if you use different types of housings. You can insert E-ATX, ATX, Micro-ATX Mainbords on one side and Micro-ATX and Mini-ITX on the other side.

_DSC7980

Front removed with a view into the HDD racks.

_DSC7982

There are 6 system fans included in the tower and I use three with the first system. Each of the HDD racks supports three 3,5″ drives and two 2,5″ drives. Additionally you can put two 2,5″ drives at the floor on each side. This is how it looks like from the back:

_DSC7983

At the top is room for another 6 optional 120mm fans and there are four USB 3.0 Ports with HD Audio per system available.

_DSC7984

Take a look inside. You can see that I have enough room for further expansion of the system.

_DSC7987

The system is connected to the Diskstation via two 1 GB Ports.

Synology DiskStation DS2415+

The Diskstation is equipped with the following drives:

  • 6x Seagate Desktop HDD, SATA 6G, 7200RPM, 3,5 Zoll – 3 TB
  • 2x Samsung 850 PRO Series SSD, SATA 6G – 256 GB

The two SSDs are used for read and write caching. The HHDs are configured in RAID 6. The left 4 Slots are used with 4 Seagate Barracuda 2 TB HDDs for source files and documents configured in RAID 5.

_DSC7978

This is the back of the Diskstation. Two Ports are used for the load balanced iSCSI connections to the Hyper-V host. One is connected to the corporate network to the Cisco Meraki box, the other one is connected to my home network.

_DSC7979


Networking

All components are also connected to a Cisco Meraki Z1 with a minimum of one Ethernet Port. This way I can access my Lab from the office vice versa through a private VPN connection. If you haven´t heard about Cisco Meraki Cloud Managed network components you can access more information here.

_DSC7999


Operating system overview

The base installation of the Windows Server 2012 R2 Hyper-V Host is done on the two 120 GB Samsung SSDs in a RAID 1 configuration. I was using VMware Fusion before switching to Hyper-V. The main reason why I switched is the memory handling. In VMware Fusion you assign a certain amount of memory e.g. 2048 MB RAM and this is fixed. In Hyper-V you can start with 512 MB base RAM and tell the machine to not use more than x MB RAM. This ends in much more available RAM in my lab. I have 32 GB RAM on my first machine and I can easily run 20 VMs.

Installation and Configuration

It took me some time to figure out how to configure iSCSI with MPIO and the network card settings to get performance that is acceptable for me.

iSCSI and MPIO
How iSCSI and MPIO should be configured can be found here: https://www.synology.com/de-de/knowledgebase/tutorials/552

Network configuration
The first failure I did was not placing the Synology adapters and the adapters of my Hyper-V hosts in different subnets. This forum post helped me with the solution:http://forum.synology.com/wiki/index.php/How_to_use_the_iSCSI_Target_Service_on_the_Synology_DiskStation

Receive Side Scaling and TCP Offload
Performance was bad after the first tests. After disabling Receive Side Scaling and TCP offload resolved the performance issues. You can find more information on that topic here:https://social.technet.microsoft.com/Forums/en-US/6754b837-f96d-42c4-b22f-292756c83ea4/iscsi-connections-at-startup?forum=winserverfiles.

Issues with XenApp 7.6 and XenDesktop 7.6 VDA installations
Because I was using VMware in my lab before this error message was new to me.
CTX137731_issue
I had created all the VMs as Generation 2 machines. This led to the problem that the installation of a VDA failed because Secure Boot is enabled by default in this configuration (more information about Secure Boot can be found here: http://blogs.technet.com/b/jhoward/archive/2013/11/01/hyper-v-generation-2-virtual-machines-part-6.aspx). After disabling Secure Boot for the VDAs via PowerShell installation worked as expected. You can set the configuration via PowerShell:

Set-VMFirmware -vmname $env:computername -EnableSecureBoot Off

For more information about the problem visit also: http://support.citrix.com/article/CTX137731


What about Performance?

I made a Iometer test based on a blog post Jim Moyle wrote on the Atlantis Computing Website. You can easily compare your homelab performance to mine. You can find the blog post here: https://community.atlantiscomputing.com/blog/Atlantis/August-2013/How-to-use-Iometer-to-Simulate-a-Desktop-Workload.aspx

iometer_2

iometer

I think the numbers are not that bad.


Mac Apps

Jump Desktop is my preferred app to access remote desktops. I created connections to all lab servers. See for yourself:

Jump_Desktop


Future additions

I will add one Rasperry Pi 2 as admin client with Windows 10 and all administrative tools installed on it.

The second half of the Lian Li housing will be used for the following configuration (or similar):

Hyper-V Host

  • 4x Corsair Vengeance LPX Series DDR4-2400, CL14 – 32 GB Kit
  • Inline 2x Gigabit Network-Card, PCIE x2 Icl. LowProfile
  • 2x Samsung 850 EVO Series 2.5 SSD, SATA 6G – 120 GB
  • 2x Intel Xeon E5-2808 V3 1,8 GHz (Haswell-EP) Socket 2011-V3 – boxed
  • Intel DB32800CW2, Intel C812 Mainboard – DualSocket 2011-V3
  • 2x be quiet! Dark Rook Pro 3 CPU-Cooler

Synology DiskStation DS2415+
You might ask yourself why didn´t choose a DX1215 es expansion unit for the DS2415? This is because of the missing ports on the expansion unit and I want to connect the Hyper-V host – like the first system – with load balanced 1 GB Ports. Some disks need to be there as well.

  • 4x Western Digital Red Pro, SATA 6G, 7.200, 3,5 – 2 TB
  • 2x Samsung 850 PRO Series SSD, SATA 6G, 256 GB

I am also thinking about adding three Intel NUCs in a similar case like Ruben did in his home lab. If you haven´t seen Rubens homelab you should take a look look. It really looks awesome.

I hope this was interesting for you and you might get ideas for your own homelab.

Cheers,
Sinisa

Install Citrix StoreFront 3.0.1 from the Command Line

$
0
0

With this blog post I want to show you how to install Citrix StoreFront 3.0.1 with all it´s necessary prerequisites from the command line.

If you start the Citrix StoreFront installer via GUI the installer takes care of all the prerequisites on your system. You can see this behaviour in the screenshot:

02_storefront

In enterprise environments it is often not wanted to have installers taking care of prerequisites. I am a fan of total control over the environments I am taking care of. Every component needs to be installed in a controlled way.

Let´s see what we need to install before running the Citrix StoreFront installer to prevent the “uncontrolled” installation of additional Features and Roles.

Prerequisites

StoreFront needs a Web Server to be able to run. Some additional Sub-Features are needed as well.

  • Web Server (IIS)
  • Web Server
  • Common HTTP Features
  • Default Document
  • HTTP Errors
  • Static Content
  • HTTP Redirection
  • Health and Diagnostics
  • HTTP Logging
  • Security
  • Request Filtering
  • Basic Authentication
  • Windows Authentication
  • Application Development
  • .NET Extensibility 4.5
  • Application Initialization
  • ASP.NET 4.5
  • ISAPI Extensions
  • ISAPI Filters
  • Management Tools
  • IIS Management Console
  • IIS Management Scripts and Tools
  • .NET Framework 4.5 Features
  • .NET Framework 4.5
  • ASP.NET 4.5
  • WCF Services
  • TCP Port Sharing

In order to install them via command line we open a PowerShell console and insert the following commands:

Add-windowsfeature Web-Server
Add-windowsfeature Web-Basic-Auth
Add-windowsfeature Web-Http-Redirect
Add-windowsfeature Web-Windows-Auth
Add-windowsfeature Web-App-Dev
Add-windowsfeature Web-Net-Ext45
Add-windowsfeature Web-AppInit
Add-windowsfeature Web-Asp-Net45
Add-windowsfeature Web-Mgmt-Tools
Add-windowsfeature Web-Scripting-Tools
Add-windowsfeature NET-Framework-45-Features

Now we have installed all the prerequisites and we can go on with the Citrix StoreFront installation. The parameters are as follows:

StoreFront Installation

CitrixStoreFront-x64.exe [-silent] [-INSTALLDIR installationlocation] [-WINDOWS_CLIENT filelocation\filename.exe] [-MAC_CLIENT filelocation\filename.dmg]

Installation via PowerShell works this way:

start-process -FilePath "YOURSOURCESSHARE\CitrixStoreFront-x64.exe" -ArgumentList "-silent" -wait 

The file locations of the Windows and Mac client belong IMHO to an additional customizing script for StoreFront. Therefore I won´t add them at this time.

Below you can find my installation script for the Citrix StoreFront server. It assumes you have a Windows Server 2012 R2 in place that is member of a domain and fully patched.

What it does (very simple):

  • installs Web Server Features and Roles
  • installs Citrix StoreFront 3.0.1
  • Reboots the system

Before you use it insert your file share path to the variable $labsources.

<#
.SYNOPSIS
	This script installs StoreFront 3.0.1
.DESCRIPTION
    The following components are installed:
    - necessary Roles and Features
    - StoreFront 3.0.1
    - no further customization in this script
.PARAMETER
.NOTES
    This script was tested on Windows Server 2012 R2
.LINK
	http://www.RISConsulting.de
.AUTHOR
    Sinisa Sokolic
.Date
    2015-10-19
#>

# Script Variables
$labsources = "\\FILESERVER\SHARE"

Write-Host "Install: Citrix StoreFront 3.0.1" -ForegroundColor Green

# Part 01 - Prerequisites
Write-Host "Part 01 - Installing Prerequisites..." -ForegroundColor Green

# Install necessary Windows-Features for StoreFront 3.0.1

# Windows-Feature Web-Server
Write-Host "Installing Web-Server" -ForegroundColor Green
Add-windowsfeature Web-Server

# Windows-Feature Web-Basic-Auth
Write-Host "Installing Web-Basic-Auth" -ForegroundColor Green
Add-windowsfeature Web-Basic-Auth

# Windows-Feature Web-Http-Redirect
Write-Host "Installing Web-Http-Redirect" -ForegroundColor Green
Add-windowsfeature Web-Http-Redirect

# Windows-Feature Web-Windows-Auth
Write-Host "Installing Web-Windows-Auth" -ForegroundColor Green
Add-windowsfeature Web-Windows-Auth

# Windows-Feature Web-App-Dev
Write-Host "Installing Web-App-Dev" -ForegroundColor Green
Add-windowsfeature Web-App-Dev

# Windows-Feature Web-Net-Ext45
Write-Host "Installing Web-Net-Ext45" -ForegroundColor Green
Add-windowsfeature Web-Net-Ext45

# Windows-Feature Web-AppInit
Write-Host "Installing Web-AppInit" -ForegroundColor Green
Add-windowsfeature Web-AppInit

# Windows-Feature Web-Asp-Net45
Write-Host "Installing Web-Asp-Net45" -ForegroundColor Green
Add-windowsfeature Web-Asp-Net45

# Windows-Feature Web-Mgmt-Tools
Write-Host "Installing Web-Mgmt-Tools" -ForegroundColor Green
Add-windowsfeature Web-Mgmt-Tools

# Windows-Feature Web-Scripting-Tools
Write-Host "Installing Web-Scripting-Tools" -ForegroundColor Green
Add-windowsfeature Web-Scripting-Tools

# Windows-Feature NET-Framework-45-Features
Write-Host "Installing NET-Framework-45-Features" -ForegroundColor Green
Add-windowsfeature NET-Framework-45-Features

Write-Host "Finished Installing Prerequisites..." -ForegroundColor Green
Write-Host "Part 02 - Installing Software..." -ForegroundColor Green

# Install Citrix StoreFront 3.0.x
Write-Host "Installing StoreFront..." -ForegroundColor Green
start-process -FilePath "$labsources\XenDesktop_76\StoreFront_30\CitrixStoreFront-x64.exe" -ArgumentList "-silent" -wait

# Reboot system
Write-Host -ForegroundColor Green “Rebooting System..."
Restart-Computer -ComputerName $env:COMPUTERNAME

I hope this is useful for you.

All information without warranty.

Cheers,
Sinisa

Install Citrix XenDesktop 7.6 Server VDA from the Command Line

$
0
0

This is the second post of a series about how to install basic infrastructure components. This was the first one: Install Citrix StoreFront 3.0.1 from the Command Line.
Today I want to share some details of installing a Citrix XenDesktop 7.6 Server VDA from the command line. At the end you will find (as usual) a PowerShell script that does the job for me (and hopefully for you too).

Now let´s get started…

Prerequisites

Before we can install the VDA component on a Windows Server 2012 R2 system (you can do it also on 2008 R2 if you want, but then you have to tweak a little bit with the Windows Features) we need to take care of the prerequisites. Usually the installation with the GUI takes care of missing prerequisites.
Today we will do it on our own because you now, I am a control-freak and don´t want to do installers what they want to do without my permission 😉

Visual C++ Redistributables
You need Microsoft Visual C++ 2008, 2010 and 2013 Runtimes (32-bit and 64-bit) on your VDA. In detail this means the installer is searching for the following versions:

  • MS_VCPP_2008_redist_9.0.30729.4148_x64
  • MS_VCPP_2010_redist_10.0.30319_x64
  • MS_VCPP_2010_redist_10.0.30319_x86
  • MS_VCPP_2013_redist_12.0.21005_x86
  • MS_VCPP_2013_redist_12.0.2100_x64

See the screenshot below, it shows the necessary versions. The other redistributables are installed through Windows Update.

1_vda

.NET Framework
You also need Microsoft .NET Framework 4.5.1 (4.5.2 and 4.6 are also supported) on the system. If you have run Windows Update on the server and have installed everything you could it should be fine.

Microsoft Media Foundation
You need to activate Media Foundation before you install the Citrix VDA in order to support features such as HDX MediaStream Windows Media Redirection. Luckily Media Foundation is enabled during the installation of the Windows-Feature “Desktop Experience”. Look at the documentation at docs.citrix.com for further information.

Services
Please be aware of the fact that the Print Spooler Service needs to be running because otherwise setup of the VDA will fail. I have seen some high secure environments where the Spooler Service was deactivated in the base operating system image.

Windows-Features
In order to install the needed Windows-Features we open PowerShell and run the commands below:

# Windows-Feature Desktop-Experience
Write-Host "Installing Roles and Features" -ForegroundColor DarkGreen
Add-WindowsFeature Desktop-Experience
            
# Windows-Feature Remote Desktop Services Host
Write-Host "Installing RDS-RD-Server" -ForegroundColor DarkGreen
Add-WindowsFeature RDS-RD-Server

# Windows-Feature Remote Assistance
Write-Host "Installing Remote-Assistance" -ForegroundColor DarkGreen
Add-WindowsFeature Remote-Assistance

We need to reboot the server because Desktop-Experience and RDS-RD-Server need a reboot.

The following two Windows-Features are optional:

        
# Windows-Feature XPS Viewer
Write-Host "Installing XPS-Viewer" -ForegroundColor DarkGreen
Add-WindowsFeature XPS-Viewer

# Windows-Feature Windows Search Service
Write-Host "Installing Search-Service" -ForegroundColor DarkGreen
Add-WindowsFeature Search-Service

Install Visual C++ Redistributables
Now we will install the C++ Redistributables. This could be done like this:

# MS_VCPP_2008_redist_9.0.30729.4148_x64
Write-Host "MS_VCPP_2008_redist_9.0.30729.4148_x86" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VcRedist_2008_SP1\vcredist_x64.exe" -ArgumentList "/Q" -Wait

# MS_VCPP_2010_redist_10.0.30319_x64
Write-Host "MS_VCPP_2008_redist_10.0.30319_x64" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VcRedist_2010_RTM\vcredist_x64.exe" -ArgumentList "/Q" -Wait
           
# MS_VCPP_2010_redist_10.0.30319_x86
Write-Host "MS_VCPP_2010_redist_10.0.30319_x86" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VcRedist_2010_RTM\vcredist_x86.exe" -ArgumentList "/Q" -Wait

# MS_VCPP_2013_redist_12.0.21005_x86
Write-Host "MS_VCPP_2012_redist_12.0.2100_x86" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VcRedist_2013_RTM\vcredist_x64.exe" -ArgumentList "/Q" -Wait

# MS_VCPP_2013_redist_12.0.2100_x64
Write-Host "MS_VCPP_2012_redist_12.0.2100_x64" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VcRedist_2013_RTM\vcredist_x86.exe" -ArgumentList "/Q" -Wait

Check Printer Spooler
We move on with configuring the Printer Spooler. If you are sure he is running skip this step.

# http://docs.citrix.com/en-us/xenapp-and-xendesktop/7-6/xad-build-new-enviroment/xad-install-prepare.html
# VDA won´t install if Printer Spooler is not running
set-service -Name "Spooler" -StartupType Automatic -PassThru | Start-service

VDA Installation

Now that all prerequisites are met we can go on with the installation.You can choose from many commandline options to install a VDA. This is a list of them for your reference:

  • /COMPONENTS VDA, PLUGINS
  • /EXCLUDE excludes a package from installation
  • /HELP, /H, /? Shows this dialog
  • /NOREBOOT Suppress reboot after installation (if needed)
  • /PASSIVE, /QUIET Do not show UI during  installation
  • /BASEIMAGE Enables Personal vDisk support
  • /XA_SERVER_LOCATION XenApp Server address for Citrix Receiver
  • /CONTROLLERS List of controllers to register with (FQDNs)
  • /SITE_GUID XenServer site GUID in AD
  • /HDXFLASHV2ONLY Prevents installation of Flash Redirection legacy binaries for enhanced security
  • /ENABLE_HDX_3D_PRO Installs HDX 3D Pro Virtual Desktop Agent
  • /KEY_FILE Location of the key file for installing HDX 3D Pro
  • /ENABLE_HDX_PORTS Open up HDX ports in Windows firewall (if enabled)
  • /ENABLE_REAL_TIME_TRANSPORT Opens UDP ports 16500 – 16509 to enable HDX Real-time Transport for Audio in Windows Firewall (if enabled)
  • /ENABLE_REMOTE_ASSISTANCE Enable Remote Assistance
  • /OPTIMIZE Set up registry for faster VDA operation
  • /PORTNUMBER Port number to use for VDA <-> controller communication
  • /REMOVE Remove components (instead of installing)
  • /RECONFIGURE Perform VDA reconfiguration
  • /MASTERIMAGE Set up the VDA as a Master Image

I like it simple therefore this is everything I am doing to install the VDA today:

# Install Citrix XenDesktop 7.6.300.7020 VDA
Write-Host "Part 02 - Installing XenDesktop VDA" -ForegroundColor Green
start-process -FilePath "$labsources\XenDesktop_76\VDA\VDAServerSetup_7.6.300.exe" -ArgumentList "/noreboot /quiet /components VDA" -Wait 

Additionally you can install Citrix Receiver if you need it. I have added a command as example. All command line options can be found here.

# Install Receiver 14.3.100.10
Write-Host "Part 02 - Installing Receiver 14.3.100.10" -ForegroundColor Green
start-process -FilePath "$labsources\XenDesktop_76\VDA\CitrixReceiver.exe" -ArgumentList "/noreboot /silent /includeSSON /ADDLOCAL=ReceiverInside,ICA_Client,WebHelper,SSON,AM,USB,DesktopViewer,Flash ALLOWADDSTORE=N" -Wait

Script

Here ist the complete script to install a VDA from the Command Line. I haven´t inserted a reboot handling in it, so you have to take care of the reboots on your own. It is only meant to give you an idea of what needs to be done to install the VDA in that way.

<#
.SYNOPSIS
	This Script installs a Citrix XenDesktop 7.6 Server VDA.
.DESCRIPTION
    The following components are installed:
    - Microsoft Visual C++ 2008, 2010 and 2013 Redistributables
    - necessary Roles and Features
    - XenDesktop Server VDA 7.6.300.7020
    - Receiver 14.3.100.10
    - no further customization in this script
.PARAMETER
.NOTES
    This script was tested on Windows Server 2012 R2
.LINK
	http://www.RISConsulting.de
.AUTHOR
    Sinisa Sokolic
.Date
    2015-10-19
#>

# Script Variables
$labsources = "\\FILESERVER\SHARE"

Write-Host "Install: Citrix XenDesktop 7.6.300 VDA" -ForegroundColor Green

# Part 01 - Prerequisites
Write-Host "Part 01 - Installing Prerequisites..." -ForegroundColor Green

# MS_VCPP_2008_redist_9.0.30729.4148_x64
Write-Host "MS_VCPP_2008_redist_9.0.30729.4148_x86" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VcRedist_2008_SP1\vcredist_x64.exe" -ArgumentList "/Q" -Wait

# MS_VCPP_2010_redist_10.0.30319_x64
Write-Host "MS_VCPP_2008_redist_10.0.30319_x64" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VcRedist_2010_RTM\vcredist_x64.exe" -ArgumentList "/Q" -Wait
           
# MS_VCPP_2010_redist_10.0.30319_x86
Write-Host "MS_VCPP_2010_redist_10.0.30319_x86" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VcRedist_2010_RTM\vcredist_x86.exe" -ArgumentList "/Q" -Wait

# MS_VCPP_2013_redist_12.0.21005_x86
Write-Host "MS_VCPP_2012_redist_12.0.2100_x86" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VcRedist_2013_RTM\vcredist_x64.exe" -ArgumentList "/Q" -Wait

# MS_VCPP_2013_redist_12.0.2100_x64
Write-Host "MS_VCPP_2012_redist_12.0.2100_x64" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VcRedist_2013_RTM\vcredist_x86.exe" -ArgumentList "/Q" -Wait

Write-Host "Installing Roles and Features" -ForegroundColor Green
# Windows Feature Desktop Experience
Write-Host "Installing Desktop-Experience" -ForegroundColor DarkGreen
Add-WindowsFeature Desktop-Experience
            
# Windows Feature Remote Desktop Services Host
Write-Host "Installing RDS-RD-Server" -ForegroundColor DarkGreen
Add-WindowsFeature RDS-RD-Server

# Windows Feature Remote Assistance
Write-Host "Installing Remote-Assistance" -ForegroundColor DarkGreen
Add-WindowsFeature Remote-Assistance
            
# Windows Feature XPS Viewer
Write-Host "Installing XPS-Viewer" -ForegroundColor DarkGreen
Add-WindowsFeature XPS-Viewer

# Windows Feature Windows Search Service
Write-Host "Installing Search-Service" -ForegroundColor DarkGreen
Add-WindowsFeature Search-Service

# Check Printer Spooler
# http://docs.citrix.com/en-us/xenapp-and-xendesktop/7-6/xad-build-new-enviroment/xad-install-prepare.html
# VDA won´t install if Printer Spooler is not running
set-service -Name "Spooler" -StartupType Automatic -PassThru | Start-service

########################################################
# Please reboot the server before moving further....
########################################################

Write-Host "Finished Installing Prerequisites..." -ForegroundColor Green

# Part 02 - Citrix
Write-Host "Part 02 - Installing Software..." -ForegroundColor Green
            
# Install Citrix XenDesktop/XenApp 7.6.300.7020 VDA
Write-Host "Part 02 - Installing XenDesktop/XenApp VDA" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\VDAServerSetup_7.6.300.exe" -ArgumentList "/noreboot /quiet /components VDA" -Wait 
            
# Install Receiver 14.3.100.10
Write-Host "Part 02 - Installing Receiver 14.3.100.10" -ForegroundColor DarkGreen
start-process -FilePath "$labsources\XenDesktop_76\VDA\CitrixReceiver.exe" -ArgumentList "/noreboot /silent /includeSSON /ADDLOCAL=ReceiverInside,ICA_Client,WebHelper,SSON,AM,USB,DesktopViewer,Flash ALLOWADDSTORE=N" -Wait

# Wait 10 seconds to see errors if the occured
start-sleep -Seconds 10

# Reboot system
Write-Host -ForegroundColor Green “Rebooting System..."
Restart-Computer -ComputerName $env:COMPUTERNAME

I hope this is useful for you.

All information without warranty.

Cheers,
Sinisa


Install Citrix XenDesktop 7.6 Controller from the Command Line

$
0
0

Here we go again with the next post in a row about installing Citrix XenDesktop from the command line. This was the first one: Install Citrix StoreFront 3.0.1 from the Command Line.
The second one is here: http://www.sinisasokolic.com/install-citrix-xendesktop-7-6-server-vda-from-the-command-line/.
Because we need a Controller for our infrastructure to work correctly it is crucial to have it in place ;-). Let´s see what it takes to get it up and running in this third part of the series.

Prerequisites

Visual C++ Redistributables
You need Microsoft Visual C++ 2008 on your system. In detail this means the installer is searching for the following version:

  • MS_VCPP_2008_redist_9.0.30729.4148_x64

You might have other versions already installed but that doesn´t matter in this case. The installer is searching for a specific version.

.NET Framework
You also need Microsoft .NET Framework 4.5.1 (4.5.2 and 4.6 are also supported) on the system. If you have run Windows Update on the server and have installed everything you could it should be fine.

Windows Features
If you want to edit Citrix Policies with Group Policy Management you need to add the Group Policy Management Console Feature on the Controller.

Add-WindowsFeature GPMC

Install Visual C++ Redistributables
Now we will install the C++ Redistributables. This could be done like this:

# Install Microsoft Visual C++ 2008 x64 Redistributable
# Taken from installation media - https://www.citrix.com/downloads/xendesktop/product-software/xendesktop-76-platinum.html
Write-Host "Installing Microsoft Visual C++ 2008 x64 Redistributable" -ForegroundColor DarkGreen
start-process -Filepath "$labsources\XenDesktop_76\media\Support\VcRedist_2008_SP1\vcredist_x64.exe" -ArgumentList "/Q" -Wait

Controller Installation

The Controller installation is very simple. Usually I create Admin VDAs with Studio and Director installed on them to administrate the complete Site in bigger environments. Because I had many problems since XenDesktop 7.1 during upgrades to 7.5 and 7.6 I am usually installing the necessary components also on the Controllers. It makes life sometimes easier.

Let´s have look at the options we have to install a Controller:

  • /help or /h
  • /quiet or /passive
  • /logpath path
  • /noreboot
  • /remove
  • /removeall
  • /xenapp
  • /configure_firewall
  • /components component [,component] … (Required.) Comma-separated list of components to install or remove. Valid values are:
    CONTROLLER – Controller
    DESKTOPSTUDIO – Studio
    DESKTOPDIRECTOR – Director
    LICENSESERVER – Citrix Licensing
    STOREFRONT – StoreFront
    If this option is omitted, all components are installed (or removed, if the /remove option is also specified).
  • /installdir directory
  • /tempdir directory
  • /nosql
  • /no_remote_assistance (Valid only when installing Director.)

Read this page for further details:
https://docs.citrix.com/en-us/xenapp-and-xendesktop/7-6/xad-build-new-enviroment/xad-install-command.html

After choosing the necessary options install the Controller with the command line below:

# Install Citrix XenDesktop 7.6 Controller
# https://www.citrix.com/downloads/xendesktop/product-software/xendesktop-76-platinum.html
Write-Host "Installing Citrix XenDesktop 7.6 Controller" -ForegroundColor DarkGreen
start-process -Filepath "$labsources\XenDesktop_76\media\x64\XenDesktop Setup\Xendesktopserversetup.exe" -ArgumentList "/quiet /Components CONTROLLER /nosql /noreboot" -Wait

Additional Citrix Components

Now we are going to install the latest Citrix Studio.

# Hotfix DStudio760WX64002 (Version 7.6.2) For Citrix Studio 7.6 x64 - English
# http://support.citrix.com/article/CTX142245
Write-Host "Installing Hotfix DStudio760WX64002" -ForegroundColor DarkGreen
start-process -Filepath "$labsources\XenDesktop_76\Controller\DStudio760WX64002\DStudio760WX64002.msi" -ArgumentList "/quiet" -Wait

Citrix Group Policy Management

If we want to use GPMC to edit Group Policies we need additionally Citrix Group Policy Management installed on the Controller.

# Install Citrix GroupPolicyManagement 2.5.0.0
# https://www.citrix.com/downloads/xendesktop/product-software/xendesktop-76-feature-pack-3-platinum.html
Write-Host "Installing Citrix GroupPolicyManagement 2.5.0.0" -ForegroundColor DarkGreen
start-process -Filepath "$labsources\XenDesktop_76\Controller\CitrixGroupPolicyManagement_7.6.300\CitrixGroupPolicyManagement_x64.msi" -ArgumentList "/quiet" -Wait

XenDesktop 7.6 PowerShell Module

We will install the latest XenDesktop PowerShell Module.

# Hotfix XDPoshModule760WX64002 - For XenApp 7.6; XenDesktop 7.6 PowerShell Module (64-bit) - English
# http://support.citrix.com/article/CTX142288
Write-Host "Installing Hotfix XDPoshModule760WX64002" -ForegroundColor DarkGreen
start-process -Filepath "$labsources\XenDesktop_76\Controller\XDPoshModule760WX64002\XDPoshModule760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Hotfixes Update 2 – For Delivery Controller

Before the installation of the packages read this article first: http://support.citrix.com/article/CTX142439
If the hotfix package ConfMgrWOL760WX64002 is installed first, the error message “HCLPlugins\Managed Machine Folder not found” appears.
To prevent the error, install the following packages first: Broker Services [BrokerSrvc760WX64002], Machine Creation Services [MCSrvc760WX64002] or Host Services [HostSrvc760WX64002]. Citrix strongly recommends that ConfMgrWOL760WX64002 is installed last.
If you need to remove the hotfixes, uninstall ConfMgrWOL760WX64002 first and then uninstall the rest of the packages.

# Hotfixes Update 2 - For Delivery Controller 7.6 (64-bit) - English
# http://support.citrix.com/article/CTX142439
Write-Host "Installing Hotfixes Update 2 - For Delivery Controller 7.6 (64-bit)" -ForegroundColor DarkGreen
Write-Host "Installing BrokerSrvc760WX64002" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\BrokerSrvc760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Write-Host "Installing HostSrvc760WX64002" -ForegroundColor DarkGreen
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\HostSrvc760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Write-Host "Installing MCSrvc760WX64002" -ForegroundColor DarkGreen
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\MCSrvc760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Write-Host "Installing MonitorSrvc760WX64002" -ForegroundColor DarkGreen
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\MonitorSrvc760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Write-Host "Installing MonitorPSSI760WX64002" -ForegroundColor DarkGreen
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\MonitorPSSI760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Write-Host "Installing ConfigMgrWOL760WX64002" -ForegroundColor DarkGreen
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\ConfigMgrWOL760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Script

Here ist the complete script to install a Controller from the Command Line:

<#
.SYNOPSIS
	This Script installs a Citrix XenDesktop 7.6 Controller.
.DESCRIPTION
    The following components are installed:
        - Microsoft Visual C++ 2008 x64 Redistributable
        - XenDesktop 7.6 Controller
        - Citrix Studio
        - Citrix Group Policy Management
        - XenDesktop PowerShell Module
        - Citrix XenDesktop 7.6 Controller Hotfix 2
        - no further customization in this script
.PARAMETER
.NOTES
    This script was tested on Windows Server 2012 R2
.LINK
	http://www.RISConsulting.de
.AUTHOR
    Sinisa Sokolic
.Date
    2015-10-19
#>

# Script Variables
$labsources = "\\DEMOWDC1001\lab_sources"

Write-Host "Starting Installation of Citrix XenDesktop Delivery Controller 7.6 (64-bit)" -ForegroundColor Green

# Install necessary Windows-Features for Group Policy Editing
# Windows Feature GPMC
Write-Host "Installing GPMC" -ForegroundColor DarkGreen
Add-windowsfeature GPMC

# Install Microsoft Visual C++ 2008 x64 Redistributable
# Taken from installation media - https://www.citrix.com/downloads/xendesktop/product-software/xendesktop-76-platinum.html
Write-Host "Installing Microsoft Visual C++ 2008 x64 Redistributable" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\media\Support\VcRedist_2008_SP1\vcredist_x64.exe" -ArgumentList "/Q" -Wait

# Install Citrix XenDesktop 7.6 Controller
# https://www.citrix.com/downloads/xendesktop/product-software/xendesktop-76-platinum.html
Write-Host "Installing Citrix XenDesktop 7.6 Controller" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\media\x64\XenDesktop Setup\Xendesktopserversetup.exe" -ArgumentList "/quiet /Components CONTROLLER /nosql /noreboot" -Wait

# Hotfix DStudio760WX64002 (Version 7.6.2) For Citrix Studio 7.6 x64 - English
# http://support.citrix.com/article/CTX142245
Write-Host "Installing Hotfix DStudio760WX64002" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\Controller\DStudio760WX64002\DStudio760WX64002.msi" -ArgumentList "/quiet" -Wait

# Install Citrix GroupPolicyManagement 2.5.0.0
# https://www.citrix.com/downloads/xendesktop/product-software/xendesktop-76-feature-pack-3-platinum.html
Write-Host "Installing Citrix GroupPolicyManagement 2.5.0.0" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\Controller\CitrixGroupPolicyManagement_7.6.300\CitrixGroupPolicyManagement_x64.msi" -ArgumentList "/quiet" -Wait

# Hotfix XDPoshModule760WX64002 - For XenApp 7.6; XenDesktop 7.6 PowerShell Module (64-bit) - English
# http://support.citrix.com/article/CTX142288
Write-Host "Installing Hotfix XDPoshModule760WX64002" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\Controller\XDPoshModule760WX64002\XDPoshModule760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

# Hotfixes Update 2 - For Delivery Controller 7.6 (64-bit) - English
# http://support.citrix.com/article/CTX142439
Write-Host "Installing Hotfixes Update 2 - For Delivery Controller 7.6 (64-bit)" -ForegroundColor Green
Write-Host "Installing BrokerSrvc760WX64002" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\BrokerSrvc760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Write-Host "Installing HostSrvc760WX64002" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\HostSrvc760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Write-Host "Installing MCSrvc760WX64002" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\MCSrvc760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Write-Host "Installing MonitorSrvc760WX64002" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\MonitorSrvc760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Write-Host "Installing MonitorPSSI760WX64002" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\MonitorPSSI760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

Write-Host "Installing ConfigMgrWOL760WX64002" -ForegroundColor Green
start-process -Filepath "$labsources\XenDesktop_76\Controller\XA_XD_760_Controller_X64_HFs_2\ConfigMgrWOL760WX64002.msi" -ArgumentList "/quiet /norestart" -Wait

# Wait 10 seconds to see errors if the occured
start-sleep -Seconds 10

# Reboot system
Write-Host -ForegroundColor Green “Rebooting System..."
Restart-Computer -ComputerName $env:COMPUTERNAME

I hope this is useful for you.

All information without warranty.

Cheers,
Sinisa

FSLogix Apps and Profile Containers – How cool is that!?!

$
0
0

Today I want to share a deeper look at FSLogix Apps on Citrix XenApp with you. I will explain how the get started with the installation, the creation of rules, the assignment of Profile Containers and show you how it works in real life.

What is FSLogix?

FSLogix is an agent that is installed on a server or client that controls the visibility of installed components. It is capable of managing registry and file system access. It does not replace technologies like application virtualization nor does it change the way you install and manage applications on your endpoints.
This is one big advantage over other products because it can be integrated seamlessly into every environment and you can take advantage of the features and possibilities.

So why should I use it?

Very simple! FSLogix controls the visibility of applications running on you platforms, no matter if VDI, RDSH, physical or virtual. You can control access on a system, user or group level and hidden applications or drivers react as if they were not installed on the system. You can redirect files, directories, registry values und registry key objects for specific users, reducing the need to create additional silos or integrate technologies like application virtualization.
You simplify the complete technology stack by reducing the technologies you need in place to provide services to your customers or users.

And the best thing in my opinion is: you can automate it!

What do I need to get it running?

First off all you need Windows Vista or Windows Server 2008 and later as platform. Then you need the installation files. Get them here: http://info.fslogix.com/request-an-evaluation.

How do I install it?

FSLogix comes with three installation files:

  • Setup.exe – The FSLogix Agent that is installed on your endpoints
  • Setup-JavaRuleEditor.exe – The Rule Editor for Java Redirection Rules
  • Setup-RuleEditor.exe – The Rule Editor for FSLogix Apps Rules

The FSLogix Apps Agent needs to be installed on the systems you want to control. The RuleEditors are only needed on the machines you create the rules on e.g. a packaging or development system.

All executables come with the same setup parameters. Installation is easy this way:

fslogix_setup

  • Setup.exe /install /quiet /norestart
  • Setup-JavaRuleEditor.exe /install /quiet /norestart
  • Setup-RuleEditor.exe /install /quiet /norestart

Is there a service running?
After the installation of the agent you will find a new service on your systems. The Service is named FSLogix Apps Services. It runs the frxsvc.exe in “C:\Program Files\FSLogix\Apps\” and it is running under the SYSTEM account.

fslogix_service

Are there any filter drivers?
Run fltmc in a command prompt or PowerShell console to see the newly added filter driver “frxdrv”:

fslogix_filterdrv

What about the installation directory?
The installation directory contains five folders. The most important folder is the “Rules” folder. The Rules created with the help of the RuleEditors must be placed here in order to take effect.

fslogix_installdir

Where do I find logs?
Logfiles are created in the following path: “%ProgramData%\FSLogix\Logs\”

If a user logs in for the first time information about that is tracked in the log file. See for yourself:

fslogix_log

How do I create Rules?

There are two ways you can create rules. The first one is by using the FSLogix Apps RulesEditor. The second way is with the help of the command line. Let´s check the RulesEditor way first. Start it by choosing FSLogix Apps RuleEditor in the start menu.

fslogix_startmenu

This will open the RuleEditor.

fslogix_openruleeditor

Create a new rule and give it a name:

fslogix_openruleeditor1

The rules will be placed under “C:\Users\%username%\Documents\FSLogix Rule Sets”.

fslogix_openruleeditor2

Now choose the application you want to hide and if necessary browse to the installation directory. Click “SCAN” and “OK” when finished.

fslogix_openruleeditor3

Congratulations! You now have your first rule:

fslogix_openruleeditor4

Now check the button to see what happens.

fslogix_openruleeditor5

Et voila, the installation directory and the UNINSTALL string are gone.

fslogix_openruleeditor6

The next step you should do is to assign the rule. You can add users, groups, processes, network locations, computers or directory containers.

fslogix_openruleeditor7

For this test I will assign one of my test users. We have two options for the assignment:

  • Rule Set does apply to user/group
  • Rule Set does not apply to user/group

fslogix_openruleeditor8

Click OK when you´re finished. You should now have two new files in your user´s documents folder:

Notepad_plusplus.fxr – Contains the rules for the application or system

fslogix_fxr

Notepad_plusplus.fxa – Contains the groups, users or systems the rule applies to

fslogix_fxa

You should now copy these files to “C:\Program Files\FSLogix\Apps\Rules”. The rules will be applied immediately.

fslogix_fxrfxa

Alternative way of creating rules
You can use the command line to create rules that apply to the system. In the recent version of FSLogix Apps there is no way of creating the assignment files (FRA) without the help of the RuleEditor.

In order to create rules with the command line have a look at the following command:

[17:58:55][C:\Program Files\FSLogix\Apps|26]# .\frx.exe add-rule ?

Examples:
frx add-rule -redirect -src-parent C:\Windows -src=test.ini -dest-parent __USER_PROFILE_PATH__ -dest test.ini
frx add-rule -hide -src-parent C:\Windows
frx add-rule -hide -src-parent \Registry\User\*\Software -src MySoftware
frx add-rule -specific-data -src-parent \Registry\Machine\Software -src Value -datatype DWORD -data 42000000
frx add-rule -vhd-attach -src-parent C:\MyVolFolder -dest C:\VHDs\mydisk.vhd

All the options for the command line are specified in the Automation chapter below

Let´s be creative

I have installed FSLogix Apps on one RDSH server with the following applications installed:

  • Microsoft Project 2016
  • Adobe Reader DC
  • Mozilla Firefox
  • Foxit Reader

I have two users that launch a desktop session each on the same RDSH server.

User “TestA” is not allowed to use Microsoft Project 2016, Mozilla Firefox and Foxit Reader. He has a text file on his desktop that should be launched from the local system. “TestA” is also allowed to use Profile Containers.

You can see that the text file located in “C:\Users\Public\Desktop” is opened locally and that the user is allowed to start Adobe Reader DC. Microsoft Project 2016 is not available.

fslogix_usera

User “TestB” is allowed to launch Microsoft Project 2016 and is not allowed to use Adobe Reader DC. He has the exact same textfile on his desktop that is redirected to a file located on a file server. “TestB” is configured to use a Roaming Profile.

You can see in this example that the file located in C:\Users\Public\Desktop is opened from the file server although the details show something different. You can also see that Microsoft Project 2016 can be used by this user and that he openes PDF documents with Foxit Reader instead of Adobe Reader DC.

fslogix_userb

This is a very simple example to give you an idea how rules work and what can be done with them. Let´s look at another feature…

Attaching VHDs to specific folders

In order to have a sleak and thin base image you can attach VHD or VHDX files from other locations to folders on your systems. Let me show you how.
I will attach a VHD with system tools to a folder on my RDSH server under the following path: “C:\tools”. The VHD is located on my file server.

This is the rule I will apply it to the system:

fslogic_tools1

Now watch what happens after applying it:

fslogic_tools2

This is so freakin´ simple and we haven´t even begun to be creative with that stuff.

Automation

I really love automation and I love to be able to create configurations by writing scripts. If you want to have a baseline configuration of certain systems you could create a script that automatically creates the rules. This could look like this:

.\frx.exe add-rule -hide -src-parent="C:\" -src="Personality.ini"
.\frx.exe add-rule -hide -src-parent="C:\Users\*\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools"
.\frx.exe add-rule -hide -src-parent="C:\Users\*\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessibility"
.\frx.exe add-rule -hide -src-parent="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessibility\"
.\frx.exe add-rule -hide -src-parent="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Maintenance\"
.\frx.exe add-rule -hide -src-parent="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Silverlight\"
.\frx.exe add-rule -hide -src-parent="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\"
.\frx.exe add-rule -hide -src-parent="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Windows System\"
.\frx.exe add-rule -hide -src-parent="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Windows Accessories\"
.\frx.exe add-rule -hide -src-parent="C:\temp" 

Look at the further Parameters we have here. We could attach VHDs wherever we want, hide certain Printers or redirect files and folders.

Parameters:
[Rule Type]       Only one of the following rule types may be specified
  -hide           Hiding rule
  -redirect       Redirection rule
  -vhd-attach     VHD auto-attach rule
  -printer        Printer hiding rule
  -specific-data  Returns specific data for a registry value
  -src-parent   Parent directory/key or printer to which the rule applies
  -src          *File or value name
  -dest-parent  *Destination directory or key (redirection rules only)
  -dest         *Destination file or value (redirection rules only)
  -no-copy      *Creates a blank copy of the item upon redirection if it does not exist (default is to copy the source item)
  -volatile     *Volatile rule that will not persist across a machine reboot
  -datatype     *Type of specific data to return (SZ, DWORD)
  -data         *Hexadecimal representation of data to return

* Optional parameters

Special Variables (usable in -dest-parent/-dest parameters):
 __USER_SID__             User's SID
 __USER_NAME__            User's username
 __USER_PROFILE_PATH__    Path to users profile

If you do it this way you should be aware of the fact that no rule in the Rules folder is created. You will find these rules in the CompiledRules folder and as _DefaultRules.fxc file:

fslogix_compiled

A deeper look into the file reveals the details. If you like you can edit the file directly.

fslogix_fxc

Because the FXR and FXA files are simple text files we could also create them with a script without the need of using the RuleEditors. But you should be very careful with that. Today there is no documentation about the HEX values in the config files. I might try to document them if I find the time to test them and to be sure that they work.

This is it for a first look. I hope it was interesting and usefull for you. Now we will switch to the Profile Containers.

Profile Containers

In order to get Profile Containers up and running you need to change a few things on your target system.

Local Groups
First of all you should have a look at your local security groups. There should be two groups after the installation of the FSLogix components:

  • FSLogix Profile Exclude List
  • FSLogix Profile Include List

fslogix_groups

The Include List has “Everyone” as member. If you don´t want this you need to remove the Everyone-group and insert whoever you want to have user Profile Containers enabled. I would suggest adding the users via Group Policy to have a standardized way for all your systems in your environment.

Registry
You need to configure the Profile Containers Path in the registry. Add the Key “VHDLocations” as REG_MULTI_SZ with a minimum of one Path under the following path “HKLM\SOFTWARE\FSLogix\Profiles”. If there is no path inserted or the key is missing it won´t work.

fslogix_registry

There are some other optional keys you can set to configure the Profile Containers:

Path: HKLM\SOFTWARE\FSLogix\Profiles
VHDLocations as REG_MULTI_SZ
(\\server\share\Profiles). Local paths must be in drive letter format (C:\Profiles).

VolumeType as REG_SZ
(optional) Type of container to use, VHD or VHDX – If not specified, default is VHD. Note that VHDX format is only supported on Windows 8 or Server 2012 (or later).

VHDXSectorSize as REG_DWORD
(optional) Sector size, 0 or 4096 (0x1000) – If not specified, default is 0 which simply triggers the container default.

SizeInMBs as REG_DWORD
(optional) Size in MBs for new containers. If not specified, default is 30000 (30 GBs). Pay attention to Decimal vs Hex when specifying the number.

IsDynamic as REG_DWORD
(optional) 0 indicates Full Allocation, and 1 indicates Dynamic. Full Allocation means that the VHD file is immediately sized to the specified size of the disk. Dynamic Allocation means that the file is resized as new space is required. Full Allocation is slower at creation time, but produces better performance when writes happen since the entire space is already allocated. Dynamic is faster at creation time but may result in some latency as the file is resized accordingly.

If everything is fine you will see a Profile Container in the configured path.

fslogix_profile

If you want to migrate your existing profiles to Profile Containers you can use the command line:

[18:47:28][C:\Program Files\FSLogix\Apps|25]# .\frx.exe copy-profile

copy-profile                                                                   
  Copies the specified user profile into a VHD or VHDX.                        
  If the VHD or VHDX file does not exist, it will be created.                  
  By default the VHD or VHDX will be 30 GBs and sized dynamically.             
                                                                               
Parameters:                                                                    
  -filename          Specifies the path to the VHD or VHDX file                
  -username          'username' or 'domain\username'                           
  -sid               Can be used instead of username to identify the profile   
  -size-mbs          *Size in number of MBs for new VHD/VHDX                   
  -vhdx-sector-size  *VHDX sector size                                         
  -dynamic           *Set to 1 if VHD should be dynamic, 0 for full allocation 
  -src-parent        *Path to the parent VHD(X) file for differencing disks    
  -verbose           *Enables verbose output                                   
  -profile-path      *Specify the profile path                                 
  -label             *Disk volume label (default is Profile)                   
                                                                               
  * Optional parameters                                                        
                                                                               
Example:                                                                       
  frx copy-profile -filename C:\Profile.vhd -username DOMAIN\USERNAME       

Take care

A Profile Container will only be created if there is no existing user profile for the user on the system the user logs on to. Otherwise no Profile Container will be created. In this case look at the command line above.
And you must be aware of the fact that the Profile Container can only be accessed from one location at a time. If you start applications from multiple RDSH servers you won´t be able to access the Profile Container from the second machine.

From the field

A few words about rule assignments. In a XenApp or XenDesktop environment you typically create a domain local group for the resource assignment (e.g. Published application). A domain local group is used to integrate the users and this group is nested into the resource group.
I suggest you use the same resource group for the Published Applications and the Rule Assignment in FSLogix. This makes administration easy and you can implement a clean process.

As long as you have programs that are easy to scan with the RuleEditor everything is easy. Things are getting harder when you have to take care of FTAs or you want to install different versions of the same applications side-by-side. If you are a geek and are aware of that then you shouldn´t have any problems. If you don´t have deeper operating system knowledge you might get stuck here and there. And don´t hide important operating system files. Be aware of the fact that rules are created for everyone as long as you don’t change this with an assignment. You might create a system that is not working anymore.

The overall experience is great and most problems you might have are very simple to solve. Look at me, I could solve some access and redirection scenarios on my own ;-).

Further Information

https://fslogix.com/best-practices

All information without warranty.

I love to hear from your experiences with FSLogix and if you achieved a major hack with it I would be glad if you would share it. If someone knows what “enable-shnot” does, let me know. I couldn’t find anything in the documentation. Thanks!

See ya,
Sinisa

Azure Stack – Resources to get you started

$
0
0

Today I want to share some information about Azure Stack.
You will find links to some of the websites and blogs that give basic information about it. In the next days I will prepare my lab to install Azure Stack. Blogs about it will follow then.

What is Azure Stack?
Microsoft Azure Stack will bring proven innovation from Microsoft’s hyper-scale public cloud (Azure) into your datacenter, providing agility and productivity for application owners, flexibility and control for IT, and assurance that corporate assets are protected.

Official Azure Stack Webseite
https://azure.microsoft.com/en-us/overview/azure-stack/

Important Azure Stack References
http://blogs.technet.com/b/charlesjoy/archive/2015/05/06/azurestack-msignite.aspx

Hardware Requirements
http://blogs.technet.com/b/server-cloud/archive/2015/12/21/microsoft-azure-stack-hardware-requirements.aspx
http://www.thomasmaurer.ch/2015/12/hardware-requirements-for-microsoft-azure-stack-technical-preview-poc/

How to start if you don´t have the requiered hardware
http://www.danielstechblog.de/microsoft-azure-stack-technical-preview-on-lower-hardware/

Technical Preview documentation
https://azure.microsoft.com/en-us/documentation/azure-stack/

POC Architecture documentation
https://azure.microsoft.com/en-us/documentation/articles/azure-stack-architecture/

Create Marketplace items for Azure Stack
https://azure.microsoft.com/en-us/documentation/articles/azure-stack-create-marketplace-item/

Azure Stack Quick Start Templates
https://github.com/Azure/AzureStack-QuickStart-Templates

Feedback
https://feedback.azure.com/forums/344565-azure-stack/

Further Blogs
http://www.hyper-v.nu/archives/dvanderpeijl/2016/01/azure-stack-the-fabric-layer/

Why I love the PowerShell AppDeployment Toolkit

$
0
0

Today I want to share some thoughts and insights about a very useful toolkit that is available free for everybody – The PowerShell App Deployment Toolkit. I will describe what features it has, how the architecture looks like and how you can create and customize packages. At the end I will provide you with some packages you can start to play with.

First I want to make a short excurse about wrappers.

About Wrappers…

A wrapper is basically a script that runs certain functions around an installation package. This scripts could for example run copy jobs before or after the installation routine of an application, clean up files or provide extended logging functionality that some electronic software delivery products are missing today. In short: It provides functionality that is not available in an ESD product from scratch.

About wrapper languages…

Most of the wrappers in the field are still written in VBScript or as a Batch and although VBS is very fast and efficient I personally don´t like the fact that is not as easy to understand as a PowerShell script. Therefore the PSADK is IMHO the better wrapper.

About The PowerShell App Deployment Toolkit

The PowerShell App Deployment Toolkit was launched in August 2013 and is a joint collaboration between Seán Lillis and Dan Cunningham. Muhammad Mashwani and Aman Motazedian. You can use it for whatever deployment mechanism or ESD you are using in your infrastructure. It is written completely in PowerShell and has a lot of functions around deploying applications to endpoints and users. It is licensed under the Microsoft Public License (Ms-PL). See some of the features in the following list:

Main Features of the PowerShell App Deployment Toolkit

  • Easy To Use
  • Consistent
  • Powerful
  • User Interface
  • Localized
  • Integration with SCCM 2012 R2
  • Updatable
  • Extensible
  • Helpful

Functions/Logic (besides others)

  • Provides extensive logging of both the Toolkit functions and any MSI installation / uninstallation
  • Provides the ability to execute any type of setup (MSI or EXEs) and handle / translate the return codes
  • Mass remove MSI applications with a partial match (e.g. remove all versions of all MSI applications which match “Office”)
  • Check for in-progress MSI installations and wait for MSI Mutex to become available
  • Send a sequence of keys to an application window
  • Perform SCCM actions such as Machine and User Policy Refresh, Inventory Update and Software Update
  • Supports installation of applications on Citrix XenApp/Remote Desktop Session Host Servers
  • Check File versions
  • Pin or Unpin applications to the Start Menu or Task Bar
  • Create Start Menu Shortcuts
  • Register / Unregister DLL files
  • Refresh desktop icons
  • Test network connectivity
  • Test power connectivity
  • Check whether a PowerPoint slideshow is running

How does it look like?

The GUI is basically what the user sees during a deployment of a package if you want him to so something. Because the PSADK is very customizable you can change things to whatever you like. You can create full interactive packages or silent one´s.

This is what you see when you run “Deploy-Application.exe” without further parameters:

psadk

On the first screen that comes up I changed the banner to something that fits more likely from my perspective ;-). And that is the first example of how customizable it is.

You can configure defer settings or check the disk space before deploying a application – if you like. Let´s Continue… Installation in progress…

psadk

After the successfull installation the summary window comes up. You can see the standard message in the next window.

psadk

I will show you in a few moments how to change this. First let´s have a look at the package structure…

Deep Dive into the package structure

Every PSADK consists of 2 folders and three files in the root directory. The AppDeployToolkit folder contains the configuration files and function files. The Files folder is used for the source files. There you copy all the files that are needed in order to install the package. Alternatively you can create a variable for all your scripts that points to a central file share. That way you can skip putting the source files there. Personally I like the idea of having a “closed” package with the installation logic and the files in it.

Because you can insert version numbers into the script header it is easy to version packages.

psadk

If we switch to the AppDeploymentToolkit folder you will find the following files:

  • AppDeployToolkitBanner.png (the banner you see during the installation process and that I changed already)
  • AppDeployToolkitConfig.xml (configuration file with language settings etc.)
  • AppDeployToolkitExtensions.ps1 (script with your extensions for the framework)
  • AppDeployToolkitHelp.ps1 (a good helpfile explaining the functions)
  • AppDeployToolkitLogo.ico (the icon file)
  • AppDeployToolkitMain.cs (some further functions)
  • AppDeployToolkitMain.ps1 (main script with all functions)

psadk

The default log path is set to C:\Windows\Logs. After the installation of a package you can check for issues or errors at this place.

psadk

You can open the log files for example with Notepad or with CMTrace.exe. And that is again a point I really like. Looking at log files with CMTrace.exe is very straight forward and makes the process of troubleshooting application installation issues easy.

psadk

You can change default settings in the AppDepleyToolkitConfig.xml file. Be sure to change it once in a template and to copy this template for every package you want to create.

psadk

You can start AppDeployToolkitHelp.ps1 to check the available help for all functions.

psadk

Now let´s change the text at the end of the installation. We need to open the Deploy-Application.ps1 file and change the following line in the code to a text you like or remove it completely:

psadk

Why I love it!

I love standardization as well as packages and scripts that follow guidelines. And that´s what makes the PSADK so special. It enhances – if you like – your SCCM environment with functions you don´t get with the standard SCCM function set. Even if you don´t use SCCM or another ESD solution you can benefit from standardized installation and configuration packages. Again, if you use a standard like PowerShell you can reuse all of your software packages, even if you switch from SCCM to Empirum, Heat or want to deploy your applications through PowerShell DSC. No other language offers so many options.

Why I hate it!

Complex installations can be hard to read if they extend to a certain level. All phases are integrated in one main script and even if you use tools like the PowerShell ISE or Visual Studio Code it can sometimes be hard to edit. Especially if you use pre- and post-installation and uninstallation areas and have a huge amount of variables and functions.

Where can You use it?

Like I said before, nearly everywhere! If you created a package you can use it stand alone, in a script that runs the packages, you can integrate and deploy it via Group Policy or – and that´s the best thing in larger environments – with your ESD (e.g. SCCM).

Installation Scripts

Here you can see an example script file from the toolkit. It is very simple and I haven´t done any parameter initialization or inserted special variables for the installation parameters.

.SYNOPSIS This script performs the installation or uninstallation of an application(s). 
.DESCRIPTION The script is provided as a template to perform an install or uninstall of an application(s). The script either performs an "Install" deployment type or an "Uninstall" deployment type. The install deployment type is broken down into 3 main sections/phases: Pre-Install, Install, and Post-Install. The script dot-sources the AppDeployToolkitMain.ps1 script which contains the logic and functions required to install or uninstall an application. .PARAMETER DeploymentType The type of deployment to perform. Default is: Install. 
.PARAMETER DeployMode Specifies whether the installation should be run in Interactive, Silent, or NonInteractive mode. Default is: Interactive. Options: Interactive = Shows dialogs, Silent = No dialogs, NonInteractive = Very silent, i.e. no blocking apps. NonInteractive mode is automatically set if it is detected that the process is not user interactive. 
.PARAMETER AllowRebootPassThru Allows the 3010 return code (requires restart) to be passed back to the parent process (e.g. SCCM) if detected from an installation. If 3010 is passed back to SCCM, a reboot prompt will be triggered. 
.PARAMETER TerminalServerMode Changes to "user install mode" and back to "user execute mode" for installing/uninstalling applications for Remote Destkop Session Hosts/Citrix servers. 
.PARAMETER DisableLogging Disables logging to file for the script. Default is: $false. 
.EXAMPLE Deploy-Application.ps1 .EXAMPLE Deploy-Application.ps1 -DeployMode 'Silent' 
.EXAMPLE Deploy-Application.ps1 -AllowRebootPassThru -AllowDefer 
.EXAMPLE Deploy-Application.ps1 -DeploymentType Uninstall .NOTES Toolkit Exit Code Ranges: 60000 - 68999: Reserved for built-in exit codes in Deploy-Application.ps1, Deploy-Application.exe, and AppDeployToolkitMain.ps1 69000 - 69999: Recommended for user customized exit codes in Deploy-Application.ps1 70000 - 79999: Recommended for user customized exit codes in AppDeployToolkitExtensions.ps1 
.LINK  http://psappdeploytoolkit.com #>
[CmdletBinding()]
Param (
[Parameter(Mandatory=$false)]
[ValidateSet('Install','Uninstall')]
[string]$DeploymentType = 'Install',
[Parameter(Mandatory=$false)]
[ValidateSet('Interactive','Silent','NonInteractive')]
[string]$DeployMode = 'Interactive',
[Parameter(Mandatory=$false)]
[switch]$AllowRebootPassThru = $false,
[Parameter(Mandatory=$false)]
[switch]$TerminalServerMode = $false,
[Parameter(Mandatory=$false)]
[switch]$DisableLogging = $false
)

Try {
## Set the script execution policy for this process
Try { Set-ExecutionPolicy -ExecutionPolicy 'ByPass' -Scope 'Process' -Force -ErrorAction 'Stop' } Catch {}
##*===============================================
##* VARIABLE DECLARATION
##*===============================================
## Variables: Application

[string]$appVendor = 'Citrix'
[string]$appName = 'XenDesktop Controller'
[string]$appVersion = '7.6.300'
[string]$appArch = 'x64'
[string]$appLang = 'EN'
[string]$appRevision = '02'
[string]$appScriptVersion = '1.0.0'
[string]$appScriptDate = '03/30/2016'
[string]$appScriptAuthor = 'Sinisa Sokolic'
#
$labsources = "\\FILESERVER\lab_sources"

#*===============================================
##* Do not modify section below
#region DoNotModify
## Variables: Exit Code
[int32]$mainExitCode = 0
## Variables: Script
[string]$deployAppScriptFriendlyName = 'Deploy Application'
[version]$deployAppScriptVersion = [version]'3.6.5'
[string]$deployAppScriptDate = '08/17/2015'
[hashtable]$deployAppScriptParameters = $psBoundParameters
## Variables: Environment
If (Test-Path -LiteralPath 'variable:HostInvocation') { $InvocationInfo = $HostInvocation } Else { $InvocationInfo = $MyInvocation }
[string]$scriptDirectory = Split-Path -Path $InvocationInfo.MyCommand.Definition -Parent
## Dot source the required App Deploy Toolkit Functions
Try {
[string]$moduleAppDeployToolkitMain = "$scriptDirectory\AppDeployToolkit\AppDeployToolkitMain.ps1"
If (-not (Test-Path -LiteralPath $moduleAppDeployToolkitMain -PathType 'Leaf')) { Throw "Module does not exist at the specified location [$moduleAppDeployToolkitMain]." }
If ($DisableLogging) { . $moduleAppDeployToolkitMain -DisableLogging } Else { . $moduleAppDeployToolkitMain }
}
Catch {
If ($mainExitCode -eq 0){ [int32]$mainExitCode = 60008 }
Write-Error -Message "Module [$moduleAppDeployToolkitMain] failed to load: `n$($_.Exception.Message)`n `n$($_.InvocationInfo.PositionMessage)" -ErrorAction 'Continue'
## Exit the script, returning the exit code to SCCM
If (Test-Path -LiteralPath 'variable:HostInvocation') { $script:ExitCode = $mainExitCode; Exit } Else { Exit $mainExitCode }
}
#endregion
##* Do not modify section above
##*===============================================
##* END VARIABLE DECLARATION
##*===============================================
If ($deploymentType -ine 'Uninstall') {
##*===============================================
##* PRE-INSTALLATION
##*===============================================

[string]$installPhase = 'Pre-Installation'
## Show Welcome Message, close Internet Explorer if required, allow up to 3 deferrals, verify there is enough disk space to complete the install, and persist the prompt
Show-InstallationWelcome -CloseApps 'iexplore' -AllowDefer -DeferTimes 3 -CheckDiskSpace -PersistPrompt
## Show Progress Message (with the default message)
Show-InstallationProgress
##

##*===============================================
##* INSTALLATION
##*===============================================

[string]$installPhase = 'Installation'
## Handle Zero-Config MSI Installations
If ($useDefaultMsi) {
[hashtable]$ExecuteDefaultMSISplat =  @{ Action = 'Install'; Path = $defaultMsiFile }; If ($defaultMstFile) { $ExecuteDefaultMSISplat.Add('Transform', $defaultMstFile) }
Execute-MSI @ExecuteDefaultMSISplat; If ($defaultMspFiles) { $defaultMspFiles | ForEach-Object { Execute-MSI -Action 'Patch' -Path $_ } }
}

Execute-Process  -Path "$labsources\02_Citrix\XenDesktop_76\media\x64\XenDesktop Setup\Xendesktopserversetup.exe" -Parameters "/quiet /Components CONTROLLER /nosql /noreboot"

##*===============================================
##* POST-INSTALLATION
##*===============================================

[string]$installPhase = 'Post-Installation'
## ## Display a message at the end of the install
If (-not $useDefaultMsi) { Show-InstallationPrompt -Message 'You can customize text to appear at the end of an install or remove it completely for unattended installations.' -ButtonRightText 'OK' -Icon Information -NoWait }

}
ElseIf ($deploymentType -ieq 'Uninstall')
{
##*===============================================
##* PRE-UNINSTALLATION
##*===============================================

[string]$installPhase = 'Pre-Uninstallation'
## Show Welcome Message, close Internet Explorer with a 60 second countdown before automatically closing
Show-InstallationWelcome -CloseApps 'iexplore' -CloseAppsCountdown 60
## Show Progress Message (with the default message)
Show-InstallationProgress
##

##*===============================================
##* UNINSTALLATION
##*===============================================

[string]$installPhase = 'Uninstallation'
## Handle Zero-Config MSI Uninstallations
If ($useDefaultMsi) {
[hashtable]$ExecuteDefaultMSISplat =  @{ Action = 'Uninstall'; Path = $defaultMsiFile }; If ($defaultMstFile) { $ExecuteDefaultMSISplat.Add('Transform', $defaultMstFile) }
Execute-MSI @ExecuteDefaultMSISplat
}
#

##*===============================================
##* POST-UNINSTALLATION
##*===============================================

[string]$installPhase = 'Post-Uninstallation'
##

}
##*===============================================
##* END SCRIPT BODY
##*===============================================
## Call the Exit-Script function to perform final cleanup operations
Exit-Script -ExitCode $mainExitCode
}
Catch {
[int32]$mainExitCode = 60001
[string]$mainErrorMessage = "$(Resolve-Error)"
Write-Log -Message $mainErrorMessage -Severity 3 -Source $deployAppScriptFriendlyName
Show-DialogBox -Text $mainErrorMessage -Icon 'Stop'
Exit-Script -ExitCode $mainExitCode
}

How to add functionality?

<# .SYNOPSIS This script is a template that allows you to extend the toolkit with your own custom functions. 
.DESCRIPTION The script is automatically dot-sourced by the AppDeployToolkitMain.ps1 script. 
.NOTES     Toolkit Exit Code Ranges:     60000 - 68999: Reserved for built-in exit codes in Deploy-Application.ps1, Deploy-Application.exe, and AppDeployToolkitMain.ps1     69000 - 69999: Recommended for user customized exit codes in Deploy-Application.ps1     70000 - 79999: Recommended for user customized exit codes in AppDeployToolkitExtensions.ps1 
.LINK  http://psappdeploytoolkit.com #>

[CmdletBinding()]
Param (
)

##*===============================================
##* VARIABLE DECLARATION
##*===============================================

# Variables: Script
[string]$appDeployToolkitExtName = 'PSAppDeployToolkitExt'
[string]$appDeployExtScriptFriendlyName = 'App Deploy Toolkit Extensions'
[version]$appDeployExtScriptVersion = [version]'1.5.0'
[string]$appDeployExtScriptDate = '06/11/2015'
[hashtable]$appDeployExtScriptParameters = $PSBoundParameters

##*===============================================
##* FUNCTION LISTINGS
##*===============================================

#

##*===============================================
##* END FUNCTION LISTINGS
##*===============================================

##*===============================================
##* SCRIPT BODY
##*===============================================

If ($scriptParentPath) {
Write-Log -Message "Script [$($MyInvocation.MyCommand.Definition)] dot-source invoked by [$(((Get-Variable -Name MyInvocation).Value).ScriptName)]" -Source $appDeployToolkitExtName
}
Else {
Write-Log -Message "Script [$($MyInvocation.MyCommand.Definition)] invoked directly" -Source $appDeployToolkitExtName
}

##*===============================================
##* END SCRIPT BODY
##*===============================================

How to install a package?

There are two ways to install an application:

First:

Launch the "Deploy-Application.ps1" PowerShell script as administrator and use a parameter like -Deploymode "Silent"

Second:

Launch the "Deploy-Application.exe" and use parameters like /32 or -AllowRebootPassThru"

If you start the ps1 script or the exe file without any parameter it will always use “Install” as default.

How to uninstall a package?

This process is also very straight forward:


First:

Launch the "Deploy-Application.ps1" PowerShell script as administrator and use the parameter "Uninstall"

Second:

Launch the "Deploy-Application.exe" and use the parameter -DeploymentType "Uninstall"

How to start?

Well, I prepared something for you ;-)… In the downloads section of my blog you can find some preconfigured packages. The only thing you need to do is to add the source files (if they are needed) to the packages and you´re good to go.

Why should you use automated and standardized installation Packages?

In my opinion there is a very simple explanation for that. Every application that needs to be installed more than once profits from automation and it brings more than just the value in saving time. It also leads to:

  • Reproducibility
  • Quality assurance
  • Documentation

Further information

The toolkit itself has a very good documentation. Just download it and you have it. Find the download on GitHub. Version 3.6.8 is the current available version.

I really hope this was interesting for you and you can use something from here for yourself. All available PSADK packages on my blog come without warranty, please check them before installing them in your test lab or development environment.

Remote Desktop Services Updates Revealed – Windows Server 2012 R2

$
0
0

If you are running a Remote Desktop Services Infrastructure (RDS) with Citrix XenApp, VMware View or doesn´t use any third party extension at all you will have to install a bunch of Updates to resolve the most bugs you could run into from a Operating System perspective. There are two Knowledge Base articles available for RDS at Microsoft that explain the prerequisites and necessary steps to install these updates.

I don´t know if you ever tried to dig into these articles and get all the necessary information. In my eyes it´s not an easy process as it should be. Therefore I´m writing this blog to get you through it and to give you an fast overview of what needs to be installed for every specific infrastructure role.

This blog won´t cover the client updates, just Windows Server 2012 R2.

Available information from Microsoft

Here are the Microsoft Knowledge Base Articles you need to know if you have RDS running:

A few words about the Updates…

You should try to avoid installing all of these updates if you don´t have problems with RDS in your environment. If everything is running fine, forget this article. But if you feel like something is not working as expected go through the updates and the descriptions and check if you could resolve one of your issues by installing the specific update. The attached script will help you find the installed and missing updates for every RDS role.

Prerequisites in my lab

I have a fully patched Windows Server 2012 R2 server available for my test with all RDS roles installed on it (without the virtualization role because it cannot be installed side by side with the Session Host role on the same system). After that I ran my script and checked what is already installed and what not.

With a fully patched system the Rollups and Updates listed below are already installed (so forget about them):

Rollups

  • KB2919355
  • KB3000850
  • KB3013769

Updates

  • KB3108326
  • KB3123913
  • KB3146978
  • KB3078676

I had to make a few test rounds and installed the updates on three different servers in my lab to get only the updates that are needed. Somehow the behaviour documented in the table at the end of this blog might change with future updates. It should be reproducable today with fully patched Windows Server 2012 R2 servers.

The PowerShell script

Here is the script you can use to check your infrastructure roles. It only checks for the presence of the infrastructure roles and the updates that belong to them. Use it as your own risk.

Download it here

<#	
	.NOTES
	===========================================================================
	 Created on:   	4/5/2016 1:48 PM
	 Created by:   	Sinisa Sokolic
	 Organization: 	RIS Consulting GmbH
	 Filename:     	RDS_Updates_Revealed.ps1
	===========================================================================
	.DESCRIPTION
		This file checks the installed RDS roles on a server and additionaly looks for the corresponding updates.

	.GUIDELINES
		Just run it on one of your RDS servers. Please test this script in your lab or development environment before using it in production.
#>

Write-Host "######################################################################" -ForegroundColor Green
Write-Host -ForegroundColor Green "You are running the following Operating System:"
(Get-WmiObject -class Win32_OperatingSystem).Caption
[environment]::OSVersion.VersionString
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Checking Rollups"
Write-Host "######################################################################" -ForegroundColor Green

$KB2903939 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB2903939"}
    If(!$KB2903939)
        {
            Write-Host "KB2903939 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/2903939" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB2903939 is installed"  -ForegroundColor Green
        }

$KB2928680 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB2928680"}
    If(!$KB2928680)
        {
            Write-Host "KB2928680 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/2928680" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB2928680 is installed"  -ForegroundColor Green
        }

$KB2919355 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB2919355"}
    If(!$KB2919355)
        {
            Write-Host "KB2919355 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/2919355" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB2919355 is installed"  -ForegroundColor Green
        }

$KB2955164 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB2955164"}
    If(!$KB2955164)
        {
            Write-Host "KB2955164 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/2955164" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB2955164 is installed"  -ForegroundColor Green
        }

$KB2975719 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB2975719"}
    If(!$KB2975719)
        {
            Write-Host "KB2975719 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/2975719" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB2975719 is installed"  -ForegroundColor Green
        }

$KB3000850 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3000850"}
    If(!$KB3000850)
        {
            Write-Host "KB3000850 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3000850" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB3000850 is installed"  -ForegroundColor Green
        }

$KB3013769 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3013769"}
    If(!$KB3013769)
        {
            Write-Host "KB3013769 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3013769" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB3013769 is installed"  -ForegroundColor Green
        }

$KB2984006 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB2984006"}
    If(!$KB2984006)
        {
            Write-Host "KB2984006 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/2984006" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB2984006 is installed"  -ForegroundColor Green
        }

Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Checking General OS Updates"
Write-Host "######################################################################" -ForegroundColor Green

$KB3092688 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3092688"}
    If(!$KB3092688)
        {
            Write-Host "KB3092688 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3092688" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB3092688 is installed"  -ForegroundColor Green
        }

$KB3078689 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3078689"}
    If(!$KB3078689)
        {
            Write-Host "KB3078689 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3078689" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB3078689 is installed"  -ForegroundColor Green
        }

$KB3053667 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3053667"}
    If(!$KB3053667)
        {
            Write-Host "KB3053667 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3053667" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB3053667 is installed"  -ForegroundColor Green
        }

$KB2981330 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB2981330"}
    If(!$KB2981330)
        {
            Write-Host "KB2981330 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/2981330" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB2981330 is installed"  -ForegroundColor Green
        }

Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Checking RemoteApp"
Write-Host "######################################################################" -ForegroundColor Green

$KB3103000 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3103000"}
    If(!$KB3103000)
        {
            Write-Host "KB3103000 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3103000" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB3103000 is installed"  -ForegroundColor Green
        }

Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Checking Remote Desktop Client"
Write-Host "######################################################################" -ForegroundColor Green

$KB3024260 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3024260"}
    If(!$KB3024260)
        {
            Write-Host "KB3024260 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3024260" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB3024260 is installed"  -ForegroundColor Green
        }

Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Checking Device Redirection & Printing"
Write-Host "######################################################################" -ForegroundColor Green

$KB3073630 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3073630"}
    If(!$KB3073630)
        {
            Write-Host "KB3073630 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3073630" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB3073630 is installed"  -ForegroundColor Green
        }

$KB3055615 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3055615"}
    If(!$KB3055615)
        {
            Write-Host "KB3055615 is not installed" -ForegroundColor Red
            Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3055615" -ForegroundColor DarkYellow
        }
        else
        {
            Write-Host "KB3055615 is installed"  -ForegroundColor Green
        }

Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Checking Remote Assistance"
Write-Host "######################################################################" -ForegroundColor Green
$RemoteAssistance = (Get-WindowsFeature Remote-Assistance).Installed
If(!$RemoteAssistance)
        {
            Write-Host "Remote-Assistance is not installed" -ForegroundColor Red
        }
        else
        {
            Write-Host "Remote-Assistance is installed"  -ForegroundColor Yellow
            
            $KB2919355 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB2919355"}
                If(!$KB2919355)
                {
                    Write-Host "KB2919355 is not installed" -ForegroundColor Red
                    Write-Host "Get it here: https://support.microsoft.com/de-de/kb/2919355" -ForegroundColor DarkYellow
                }
                else
                {
                    Write-Host "KB2919355 is installed"  -ForegroundColor Green
                }
        }

Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Licensing"
Write-Host "######################################################################" -ForegroundColor Green
$RDSLicensing = (Get-WindowsFeature RDS-Licensing).Installed
If(!$RDSLicensing)
        {
            Write-Host "RDS-Licensing is not installed" -ForegroundColor Red
        }
        else
        {
            Write-Host "RDS-Licensing is installed"  -ForegroundColor Yellow

            $KB3013108 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3013108"}
                If(!$KB3013108)
                    {
                        Write-Host "KB3013108 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3013108" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB3013108 is installed"  -ForegroundColor Green
                    }

            $KB3108326 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3108326"}
                If(!$KB3108326)
                    {
                        Write-Host "KB3108326 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3108326" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB3108326 is installed"  -ForegroundColor Green
                    }
           }
        
Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Remote Desktop Connection Broker"
Write-Host "######################################################################" -ForegroundColor Green
$RDSConnectionBroker = (Get-WindowsFeature RDS-Connection-Broker).Installed
If(!$RDSConnectionBroker)
        {
            Write-Host "RDS-Connection-Broker is not installed" -ForegroundColor Red
        }
        else
        {
            Write-Host "RDS-Connection-Broker is installed"  -ForegroundColor Yellow
            Write-Host "No updates to be installed" -ForegroundColor Green
        }

Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Remote Desktop Gateway"
Write-Host "######################################################################" -ForegroundColor Green
$RDSGateway = (Get-WindowsFeature RDS-Gateway).Installed
If(!$RDSGateway)
        {
            Write-Host "RDS-Gateway is not installed" -ForegroundColor Red
        }
        else
        {
            Write-Host "RDS-Gateway is installed"  -ForegroundColor Yellow
            
            $KB3123913 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3123913"}
                If(!$KB3123913)
                    {
                        Write-Host "KB3123913 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3123913" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB3123913 is installed"  -ForegroundColor Green
                    }
        }

Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Remote Desktop Virtualization Host"
Write-Host "######################################################################" -ForegroundColor Green
$RDSVirtualization = (Get-WindowsFeature RDS-Virtualization).Installed
If(!$RDSVirtualization)
        {
            Write-Host "RDS-Virtualization is not installed" -ForegroundColor Red
        }
        else
        {
            Write-Host "RDS-Virtualization is installed"  -ForegroundColor Yellow
            
            $KB2908810 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB2908810"}
                If(!$KB2908810)
                    {
                        Write-Host "KB2908810 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/2908810" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB2908810 is installed"  -ForegroundColor Green
                    }

            $KB2908809 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB2908809"}
                If(!$KB2908809)
                    {
                        Write-Host "KB2908809 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/2908809" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB2908809 is installed"  -ForegroundColor Green
                    }

            $KB3092688 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3092688"}
                If(!$KB3092688)
                    {
                        Write-Host "KB3092688 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3092688" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB3092688 is installed"  -ForegroundColor Green
                    }
        }

Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Remote Desktop Session Host"
Write-Host "######################################################################" -ForegroundColor Green

$RDSRDServer = (Get-WindowsFeature RDS-RD-Server).Installed
If(!$RDSRDServer)
        {
            Write-Host "RDS-RD-Server is not installed" -ForegroundColor Red
        }
        else
        {
            Write-Host "RDS-RD-Server is installed"  -ForegroundColor Yellow
            
            $KB3146978 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3146978"}
                If(!$KB3146978)
                    {
                        Write-Host "KB3146978 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3146978" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB3146978 is installed"  -ForegroundColor Green
                    }

            $KB3103000 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3103000"}
                If(!$KB3103000)
                    {
                        Write-Host "KB3103000 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3103000" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB3103000 is installed"  -ForegroundColor Green
                    }

            $KB3092688 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3092688"}
                If(!$KB3092688)
                    {
                        Write-Host "KB3092688 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3092688" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB3092688 is installed"  -ForegroundColor Green
                    }

            $KB3078676 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3078676"}
                If(!$KB3078676)
                    {
                        Write-Host "KB3078676 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3078676" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB3078676 is installed"  -ForegroundColor Green
                    }

            $KB3073630 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3073630"}
                If(!$KB3073630)
                    {
                        Write-Host "KB3073630 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3073630" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB3073630 is installed"  -ForegroundColor Green
                    }
        }

Write-Host ""
Write-Host "######################################################################" -ForegroundColor Green
Write-Host "Remote Desktop Web Access"
Write-Host "######################################################################" -ForegroundColor Green
$RDSWebAccess = (Get-WindowsFeature RDS-Web-Access).Installed
If(!$RDSWebAccess)
        {
            Write-Host "RDS-Web-Access is not installed" -ForegroundColor Red
        }
        else
        {
            Write-Host "RDS-Web-Access is installed"  -ForegroundColor Yellow
            
            $KB3069129 = Get-HotFix | Where-Object {$_.HotFixId -eq "KB3069129"}
                If(!$KB3069129)
                    {
                        Write-Host "KB3069129 is not installed" -ForegroundColor Red
                        Write-Host "Get it here: https://support.microsoft.com/de-de/kb/3069129" -ForegroundColor DarkYellow
                    }
                    else
                    {
                        Write-Host "KB3069129 is installed"  -ForegroundColor Green
                    }
}

The PSADK packages….

If you have never heard of the PSADK Toolkit you should have a look at my previous blog post about it. I created packages for all the necessary referenced updates in this article.

You can download all of them in one big package or only the one´s you need.

Overview of updates and further information

This overview has additional information for every update. Go through it to find the MSU names, prerequisites or the installation order for your own needs. All information without warranty. If you feel something is wrong or works different for you let me know.

I hope you find it useful.

Rollup Packs

 

 

 

 

Title

KB Name

Installable

Prereq

Comments

Windows RT 8.1,
Windows 8.1, and Windows Server 2012 R2 update rollup: December 2013

KB2903939

Windows8.1-KB2903939-x64.msu

 

Windows8.1-KB2911134-x64.msu
not applicable

Windows8.1-KB2911804-x64.msu
not applicable

Windows RT 8.1,
Windows 8.1, and Windows Server 2012 R2 update rollup: March 2014

KB2928680

Windows8.1-KB2928680-x64.msu

 

 

Windows RT 8.1,
Windows 8.1, and Windows Server 2012 R2 update: April 2014

KB2919355

clearcompressionflag.exe

Windows8.1-KB2919355-x64.msu

Windows8.1-KB2932046-x64.msu

Windows8.1-KB2937592-x64.msu

Windows8.1-KB2938439-x64.msu

Windows8.1-KB2934018-x64.msu

 

# The updates must be
installed in the following order: clearcompressionflag.exe, KB2919355,
KB2932046, KB2959977, KB2937592, KB2938439 und KB2934018.

Windows8.1-KB2959977-x64
not applicable

May 2014 update
rollup for Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2

KB2955164

Windows8.1-KB2955164-x64.msu

 

 

August 2014 update rollup
for Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2

KB2975719

Windows8.1-KB2975719-x64.msu

Windows8.1-KB2993100-x64.msu

Windows8.1-KB2995004-x64.msu

 

# Installation of the
updates in the following order: 2993651, 2975719, 2993100, 2979582, 2990532,
2995004

Windows8.1-KB2993651-x64.msu
not applicable

Windows8.1-KB2979582-x64.msu
not applicable

Windows8.1-KB2990532-x64,msu
not applicabkle

 

September 2014
update rollup for Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2

KB2984006

Windows8.1-KB2984006-x64.msu

Windows8.1-KB2995004-x64.msu

 

Repeat this
process until all of the following KBs have been installed: KB2984006,
KB2977174, KB2995004, KB2994897

Windows8.1-KB2977174-x64.msu
not applicable

Windows8.1-KB2994897-x64.msu
not applicable

November 2014
update rollup for Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2

KB3000850

Windows8.1-KB3000850-x64.msu

Windows8.1-KB3003057-x64.msu

Windows8.1-KB3014442-x64.msu

 

# Repeat this process until
all of the following KBs have been installed: KB3000850, KB3003057,
KB3016437, KB3014442

# Update KB3016437 is only
applicable to Windows Server 2012 R2 Active Directory Domain Services (AD DS)
role enabled.

Windows8.1-KB3016437-x64.msu
not applicable

December 2014
update rollup for Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2

KB3013769

Windows8.1-KB3013769-x64.msu

 

 

General OS
Updates

 

 

 

 

Title

KB Name

Installable

Prereq

Comments

Stop error 0x000000C2 or
0x0000003B when you’re running Remote Desktop Services in Windows Server 2012
R2

KB3127673

Windows8.1-KB3127673-x64.msu

KB2919355

Windows8.1-KB3127673-x64.msu
not applicable

UPD profiles corrupted when
a network connectivity issue occurs in Windows Server 2012 R2

KB3092688

Windows8.1-KB3092688-v3-x64.msu

KB2919355

 

The prompt is not displayed
to the correct user in Windows Server 2012 R2-based RDS server

KB3078689

Windows8.1-KB3078689-x64.msu

KB2919355

 

Users can’t connect to
virtual machines that are running Windows 8.1 or Windows Server 2012 R2 by
remote desktop

KB3053667

Windows8.1-KB3053667-x64.msu

KB2919355

 

RDP session becomes
unresponsive when you connect to a Windows Server 2012 R2-based computer

KB3047296

Windows8.1-KB3047296-x64.msu

KB2919355

Windows8.1-KB3047296-x64.msu
not applicable

WTSQuerySessionInformation
API function always returns zero bytes for WTSIncomingBytes and
WTSOutgoingBytes

KB2981330

Windows8.1-KB2981330-x64.msu

 

You cannot unlock a remote
session by entering a PIN code after you plug in the smart card in Windows

KB3045923

Windows8.1-KB3045923-x64.msu

KB2919355

Windows8.1-KB3045923-x64.msu
not applicable

Remote Desktop session
freezes when you run an application in the session in Windows 8.1 or Windows
Server 2012 R2

KB2978367

Install prereq

KB2975719

 

Slow screen update in Lync
2013 when you share application or desktop in Windows 8.1 or Windows Server
2012 R2

KB2958375

Install prereq

KB2955164

 

Too few tiles are displayed
during image customization in Windows

KB2964835

Install prereq

KB2975719

 

Other monitors are not
clipped when you limit sharing to one monitor in Windows 8.1 and Windows
Server 2012 R2

KB2929447

Install prereq

KB2928680

 

Cannot connect to remote
applications hosted on a Windows Server 2012 R2 or Windows Server 2008 R2
SP1-based computer

KB2928492

Install prereq

KB2955164

 

Terminal Services client
connection error 0xC000035B when you use LmCompatibility

KB2903333

Method 1

Adjust the LmCompatibility
registry value not to force NTLMv1 by setting it to a value of 3 or larger.
For more information about the LmCompatibility registry
value, see the following Microsoft Technet topic:

 

LmCompatibilityLevel

Method 2

Set the EnforceChannelBinding registry
value to 0 (zero) to ignore missing channel bindings on the Gateway
server. To do this, locate the following registry subkey, and use the given
specifications:

 

HKLM\Software\Microsoft\Windows
NT\CurrentVersion\TerminalServerGateway\Config\Core

Type: REG_DWORD

Name: EnforceChannelBinding

Value: 0 (Decimal)

 

Note By
default, the EnforceChannelBinding
 value does not exist on the Gateway server. You must create
this value.

 

Device
Redirection & Printing

 

 

 

 

Title

KB Name

Installable

Prereq

Comments

Remote Desktop Easy Print
runs slowly in Windows Server 2012 R2

KB3073630

Windows8.1-KB3073630-x64.msu

KB2919355

 

Redirected printers go
offline after print spooler is restarted on a Windows Server 2012 R2-based RD
Session Host server

KB3073629

Windows8.1-KB3073629-x64.msu

KB2919355

Windows8.1-KB3073629-x64.msu
not applicable

A Windows Server 2012 R2
server becomes slow and unresponsive if update 2927901 is installed

KB3055615

Windows8.1-KB3055615-v2-x64

KB2919355

 

A network printer is
deleted unexpectedly in Windows

KB2967077

Windows8.1-KB2967077-x64.msu
or – install prereq

KB2975719

Windows8.1-KB2967077-x64.msu
not applicable

Users who have the remote
audio setting enabled cause the RD Session Host servers to freeze
intermittently in Windows Server 2012 R2 or Windows Server 2008 R2 SP1

KB2895698

Install prereq

KB2919355

 

Licensing

 

 

 

 

Title

KB Name

Installable

Prereq

Comments

Licensing report file is
corrupted in Windows Server 2012 R2 RDS environments for large report files

KB3092695

Windows8.1-KB3092695-x64.msu

KB2919355

Windows8.1-KB3092695-x64.msu
not applicable

Users can’t log on to a
Windows Server 2012 R2-based server through remote desktop because of RDSLS
database corruption

KB3084952

Windows8.1-KB3084952-x64.msu

KB2919355

Windows8.1-KB3084952-x64.msu
not applicable

RDS License Manager shows
no issued free or temporary client access licenses in Windows Server 2012 R2

KB3013108

Windows8.1-KB3013108-x64.msu

KB2919355

 

Event 1043 when a RDP
connection uses a Remote Desktop license server that is running non-English
Windows Server 2012 R2

KB2989037

Install prereq

KB2984006

 

Licensing servers become
deadlocked under high load in Windows Server 2012 R2

KB3108326

Windows8.1-KB3108326-x64.msu

KB2919355

 

RemoteApp

 

 

 

 

Title

KB Name

Installable

Prereq

Comments

RemoteApp windows disappear
and screen flickers when you switch between windows in Windows 8.1 or Windows
Server 2012 R2

KB3103000

Windows8.1-KB3103000-v3-x64.msu

KB2919355

 

RemoteApp window is too
large or too small when you use RDP to run a RemoteApp application in Windows
Server 2012 R2

KB3026738

Windows8.1-KB3026738-x64.msu

KB2919355

Windows8.1-KB3026738-x64.msu
not applicable

Updates to improve the
compatibility of Azure RemoteApp in Windows 8.1 or Windows Server 2012 R2

KB2977219

Windows8.1-KB2977219-v2-x64.msu

KB2919355

Windows8.1-KB2977219-v2-x64.msu
not applicable

Reliability improvements
for Remote Desktop Session Host and RemoteApp

KB2959626

Windows8.1-KB2959626-v2-x64.msu

KB2919355

Windows8.1-KB2959626-v2-x64.msu
not applicable

Shortcut menu items flicker
as you move the mouse pointer over them in a RemoteApp in Windows

KB2925336

Windows8-RT-KB2925336-x64.msu

KB2955164 

Windows8-RT-KB2925336-x64.msu
not applicable

Remote
Assistance

 

 

 

 

Title

KB Name

Installable

Prereq

Comments

Remote Assistance connection
to a Windows Direct Access client computer fails 

KB2912883

Install Prereq

KB2919355

 

Remote
Desktop Client

 

 

 

 

Ttitle

KB Name

Installable

Prereq

Comment

Files cannot be copied when
drive redirection is enabled in Windows 8.1 or Windows Server 2012 R2

KB3042841

Windows8.1-KB3042841-x64.msu

KB2919355

Windows8.1-KB3042841-x64.msu
not applicable

The Remote Desktop Active X
control Mstscax.dll leaks thread handles in Windows 8.1 

KB3042836

Windows8.1-KB3042836-v2-x64.msu

KB2919355

Windows8.1-KB3042836-v2-x64.msu
not applicable

Printing preferences window
appears behind a RemoteApp window in Windows 

KB3036965

Windows8.1-KB3036965-x64.msu

KB2919355

Windows8.1-KB3036965-x64.msu
not applicable

 

OK and Cancel buttons are
missing from the Local Devices and Resources dialog box in the Norwegian
language pack

KB3024260

Windows8.1-KB3024260-x64.msu

 

Update for remote
applications and Remote Desktop Easy Print that uses RDP 8.1 client in
Windows 8.1 or Windows 7

KB3005781

KB3000850

Only Windows 8.1

RDP session is unstable
when it uses UDP in Windows 8.1 or Windows Server 2012 R2

KB2989039

Install prereq

KB2984006

 

Windows 8.1 or Windows 7
cannot connect over DirectAccess to a Remote Desktop Session Host server farm

KB2964833

Windows8.1-KB2964833-x64.msu

KB2919355

Windows8.1-KB2964833-x64.msu
not applicable

 

RemoteApp program pop-up
window is hidden in Windows

KB2964832

Windows8.1-KB2964832-x64.msu

KB2919355

Windows8.1-KB2964832-x64.msu
not applicable

 

Ctrl+Alt+Insert Remote
Desktop keyboard shortcut doesn’t work in Windows 8.1 or Windows Server 2012
R2

KB2930340

Install prereq

KB2919355

 

Print jobs are lost or an
application crashes in Microsoft Enterprise Desktop Virtualization 2.0 in
Windows

KB2925429

Install prereq

KB2919355

 

Mstsc.exe crashes when you
print a large document from an RDS session

KB2916266

Install prereq

KB2955164

 

Remote
Desktop Connection Broker

 

 

 

 

Title

KB Name

Installable

Prereq

Comment

User connection fails when
many connections are made to Windows Server 2012 R2-based RD Connection
Broker

KB3091411

Windows8.1-KB3091411-v2-x64.msu

KB2919355

Windows8.1-KB3091411-v2-x64.msu
not applicable

Communication issues occur
when Remote Desktop Connection Broker connects to SQL Server in Windows
Server 2012 R2

KB3020474

3020474 + auditpol /set /subcategory:"Filtering Platform
Connection" /success:disable /failure:enable

 

https://gallery.technet.microsoft.com/Add-a-WFP-exception-for-9c719d6a

 

Remote
Desktop Gateway

 

 

 

 

Title

KB Name

Installable

Prereq

Comment

"Your computer can’t
connect to the remote computer" error because RD Gateway service freezes
in Windows Server 2012 R2

KB3042843

Windows8.1-KB3042843-x64.msu

KB2919355

Windows8.1-KB3042843-x64.msu
not applicable

Virtual machines are not
enumerated on a Windows Server 2012 R2-based Hyper-V server that is running
in a VDI deployment

KB3123913

Windows8.1-KB3123913-v2-x64.msu

KB2919355

 

Remote
Desktop Virtualization Host

 

 

 

 

Title

KB Name

Installable

Prereq

Comment

Memory and deadlock issues
for the RD Virtualization Host and RD Connection Broker role services in
Windows 8.1

KB2908810

Only Windows 8.1

Virtual machines are not
enumerated on a Windows Server 2012 R2-based Hyper-V server that is running
in a VDI deployment

KB2908809

Install prereq

KB2903939

 

UPD profiles corrupted when
a network connectivity issue occurs in Windows Server 2012 R2

KB3092688

Windows8.1-KB3092688-v3-x64.msu

KB2919355

 

Remote
Desktop Session Host

 

 

 

 

Title

KB Name

Installable

Prereq

Comment

RDS redirected resources
showing degraded performance in Windows 8.1 or Windows Server 2012 R2

KB3146978

AMD64-all-windows8.1-kb3146978-x64_f26c91b40ce7b6e4ca8935d2958dcb767f1e70db.msu

KB2919355

 

Stop error 0x000000C2 or
0x0000003B when you’re running Remote Desktop Services in Windows Server 2012
R2

KB3127673

Windows8.1-KB3127673-x64.msu

KB2919355

Windows8.1-KB3127673-x64.msu
not applicable

RemoteApp windows disappear
and screen flickers when you switch between windows in Windows 8.1 or Windows
Server 2012 R2

KB3103000

Windows8.1-KB3103000-v3-x64.msu

KB2919355

 

UPD profiles corrupted when
a network connectivity issue occurs in Windows Server 2012 R2

KB3092688

Windows8.1-KB3092688-v3-x64.msu

KB2919355

 

Event 1530 is logged and
ProfSvc leaks paged pool memory and handles in Windows 8.1 or Windows Server
2012 R2

KB3078676

Windows8.1-KB3078676-x64.msu

KB2919355

 

Remote Desktop Easy Print
runs slowly in Windows Server 2012 R2

KB3073630

Windows8.1-KB3073630-x64.msu

KB2919355

To fix this issue, we have
released a hotfix. Even though this issue is observed only in Windows Server
2012 R2, the hotfix also applies to Windows 8.1 and Windows RT 8.1.

 

If you want to disable
the Driver-Requested Archive-optimized XPS output feature, install
this hotfix and create the following registry subkey:

 

HKLM\System\CurrentControlSet\Control\Print\DontUseArchive

To disable this feature,
set the regkey value to 1.

Redirected printers go
offline after print spooler is restarted on a Windows Server 2012 R2-based RD
Session Host server

KB3073629

Windows8.1-KB3073629-x64.msu

KB2919355

Windows8.1-KB3073629-x64.msu
not applicable

Remote
Desktop Web Access

 

 

 

 

Title

KB Name

Installable

Prereq

Comment

Blank page is displayed
when you try to access RemoteApps on a Windows Server 2012 R2-based RD Web
Access server 

KB3069129

Windows8.1-KB3069129-x64.msu

KB2919355

 

The rdgiskdcproxy:i:1
property cannot be set for the remote apps that are hosted by RD Web Access
on Windows Server

KB2957984

Install prereq

KB2975719

 

Reduce Citrix XenApp / XenDesktop 7.x Controller Setup Size

$
0
0

Citrix has done a great job providing stand alone installers for the Virtual Delivery Agents, StoreFront, Studio and Director. But one of the components that is still missing as an stand alone component is the Controller.

In large enterprises it is often necessary to provide minimal installation files because of the amount of data that is distributed and transmitted to the Software Distribution Points. These Distribution Points are often spread all over the world.

In such cases you cannot provide the ISO file with all the installation files, you need to thin it down.

Today I want to show you how to go through the process of throwing away all unnecessary information to reduce the package foot print. It is a very simple process.

Thin the Controller package down

Mount the ISO file of your XenApp or XenDesktop 7.x Installation.

controller_folder

Now we will copy the complete “XenDesktop Setup” folder in the x64 folder. Please always replicate the exact folder structure to your new Controller package folder.

Then start the setup with – for example – the following parameters:

controller_installation_error

You will get an error because files are missing. But the referenced log file will help you a lot. You can find it in “%APPDATA%\Local\Temp”

controller_log_file_location

Let´s see what it got for us…

controller_installation_log_file_missing

We can see from the log file that “D:\Workfolder\x64\Citrix Desktop Delivery Controller\Scout.msi” is missing. And that is everything you need to know. Repeat that prcedure until setup finishes without errors and you´re done.

You need to go through this process until all necessary files are present. The complete list is shown below. I used this package successful in production environments but test these files on you own risk and test, test, test! I´ve also gone through several Citrix Consulting Audits with these packages and non of them was negative.

Final size

In the end you´ll have a package with about 152 MB for the Citrix XenApp / XenDesktop 7.6 Controller. I suggest you use the PSADK and my blog article about it to create a package that will extend the logging of the installer.

File list

Directory: D:\CTRL_76

Support
x64
files.txt
ProductVersion.txt

Directory: D:\CTRL_76\Support

SharedManagementObjects

Directory: D:\CTRL_76\Support\SharedManagementObjects

x64
x86

Directory: D:\CTRL_76\Support\SharedManagementObjects\x64

SharedManagementObjects.msi
SQLSysClrTypes.msi

Directory: D:\CTRL_76\Support\SharedManagementObjects\x86

SharedManagementObjects.msi
SQLSysClrTypes.msi

Directory: D:\CTRL_76\x64

Citrix Desktop Delivery Controller
Citrix Policy
DesktopStudio
Licensing
XenDesktop Setup
MediaId_7C57BFC2-CAA2-4a7f-8A81-4D9DEC545EF4_x64

Directory: D:\CTRL_76\x64\Citrix Desktop Delivery Controller

ADIdentity_PowerShellSnapIn_x64.msi
ADIdentity_Service_x64.msi
Analytics_PowerShellSnapIn_x64.msi
Analytics_Service_x64.msi
Broker_PowerShellSnapIn_x64.msi
Broker_Service_x64.msi
Citrix.Common.Commands.Install_x64.msi
CitrixPrivilegedService_x64.msi
ConfigMgr_WOL_Plugin_x64.msi
ConfigurationLogging_PowerShellSnapIn_x64.msi
ConfigurationLogging_Service_x64.msi
Configuration_PowerShellSnapIn_x64.msi
Configuration_Service_x64.msi
DelegatedAdmin_PowerShellSnapIn_x64.msi
DelegatedAdmin_Service_x64.msi
EnvTest_PowerShellSnapIn_x64.msi
EnvTest_Service_x64.msi
Host_PowerShellSnapIn_x64.msi
Host_Service_x64.msi
MachineCreation_PowerShellSnapIn_x64.msi
MachineCreation_Service_x64.msi
Monitor_PowerShellSnapIn_x64.msi
Monitor_Service_x64.msi
Scout.msi
Storefront_PowerShellSnapIn_x64.msi
Storefront_Service_x64.msi
UserProfileManager_PowerShellSnapIn_x64.msi
XDPoshSnapin_x64.msi

Directory: D:\CTRL_76\x64\Citrix Policy

CitrixGroupPolicyManagement_x64.msi

Directory: D:\CTRL_76\x64\DesktopStudio

DesktopStudio_x64.msi
PVS PowerShell SDK x64.msi
PzAppV_Studio_PowershellSnapin_x64.msi

Directory: D:\CTRL_76\x64\Licensing

CitrixLicensing.exe
CTX_Licensing.msi
LicensingAdmin_PowerShellSnapIn_x64.msi

Directory: D:\CTRL_76\x64\XenDesktop Setup

de
es
fr
ja
resource
zh-cn
AutoSelectHelper.exe
AutoSelectHelper.exe.config
Chrome.dll
Citrix.MetaInstaller.UI.Common.dll
Citrix.MetaInstaller.UI.Common.dll.config
Citrix.MetaInstaller.WizardFramework.dll
Citrix.MetaInstaller.WizardFramework.dll.config
Common.dll
CommonControls.dll
ConfigurationApp.exe
FMAUtils.dll
Interop.NetFwTypeLib.dll
LicServVerify.exe
LSCompCheck.exe
LSCompCheck.exe.config
MetaInstallerCore.dll
MetaInstallerCore.dll.config
Microsoft.Practices.Unity.dll
Microsoft.WindowsAPICodePack.dll
Microsoft.WindowsAPICodePack.Shell.dll
NativeUtilities.dll
UI.dll
UI.dll.config
VerifyVdaMsiInstallStatus.exe
VerifyVdaMsiInstallStatus.exe.config
VersionRepository.dll
WPFToolkit.dll
XenDesktopInstall.exe
XenDesktopInstall.exe.config
XenDesktopPrintServerSetup.exe
XenDesktopPrintServerSetup.exe.config
XenDesktopServerSetup.exe
XenDesktopServerSetup.exe.config
XenDesktopVdaSetup.exe
XenDesktopVdaSetup.exe.config

Directory: D:\CTRL_76\x64\XenDesktop Setup\de

AutoSelectHelper.resources.dll
Citrix.MetaInstaller.WizardFramework.resources.dll
Common.resources.dll
CommonControls.resources.dll
MetaInstallerCore.resources.dll
UI.resources.dll
VerifyVdaMsiInstallStatus.resources.dll
XenDesktopInstall.resources.dll
XenDesktopPrintServerSetup.resources.dll
XenDesktopServerSetup.resources.dll
XenDesktopVdaSetup.resources.dll

Directory: D:\CTRL_76\x64\XenDesktop Setup\es

AutoSelectHelper.resources.dll
Citrix.MetaInstaller.WizardFramework.resources.dll
Common.resources.dll
CommonControls.resources.dll
MetaInstallerCore.resources.dll
UI.resources.dll
VerifyVdaMsiInstallStatus.resources.dll
XenDesktopInstall.resources.dll
XenDesktopPrintServerSetup.resources.dll
XenDesktopServerSetup.resources.dll
XenDesktopVdaSetup.resources.dll

Directory: D:\CTRL_76\x64\XenDesktop Setup\fr

AutoSelectHelper.resources.dll
Citrix.MetaInstaller.WizardFramework.resources.dll
Common.resources.dll
CommonControls.resources.dll
MetaInstallerCore.resources.dll
UI.resources.dll
VerifyVdaMsiInstallStatus.resources.dll
XenDesktopInstall.resources.dll
XenDesktopPrintServerSetup.resources.dll
XenDesktopServerSetup.resources.dll
XenDesktopVdaSetup.resources.dll

Directory: D:\CTRL_76\x64\XenDesktop Setup\ja

AutoSelectHelper.resources.dll
Citrix.MetaInstaller.WizardFramework.resources.dll
Common.resources.dll
CommonControls.resources.dll
MetaInstallerCore.resources.dll
UI.resources.dll
VerifyVdaMsiInstallStatus.resources.dll
XenDesktopInstall.resources.dll
XenDesktopPrintServerSetup.resources.dll
XenDesktopServerSetup.resources.dll
XenDesktopVdaSetup.resources.dll

Directory: D:\CTRL_76\x64\XenDesktop Setup\resource

de
en
es
fr
ja
zh-CN

Directory: D:\CTRL_76\x64\XenDesktop Setup\resource\de

licVerifyUI.dll

Directory: D:\CTRL_76\x64\XenDesktop Setup\resource\en

licVerifyUI.dll

Directory: D:\CTRL_76\x64\XenDesktop Setup\resource\es

licVerifyUI.dll

Directory: D:\CTRL_76\x64\XenDesktop Setup\resource\fr

licVerifyUI.dll

Directory: D:\CTRL_76\x64\XenDesktop Setup\resource\ja

licVerifyUI.dll

Directory: D:\CTRL_76\x64\XenDesktop Setup\resource\zh-CN

licVerifyUI.dll

Directory: D:\CTRL_76\x64\XenDesktop Setup\zh-cn

AutoSelectHelper.resources.dll
Citrix.MetaInstaller.WizardFramework.resources.dll
Common.resources.dll
CommonControls.resources.dll
MetaInstallerCore.resources.dll
UI.resources.dll
VerifyVdaMsiInstallStatus.resources.dll
XenDesktopInstall.resources.dll
XenDesktopPrintServerSetup.resources.dll
XenDesktopServerSetup.resources.dll
XenDesktopVdaSetup.resources.dll

The E2EVC Experience

$
0
0

More then a week went by since E2EVC has taken place for the 30th time and it took me a few more days to sort out all the dead brain cells in order to review this event for myself. This year has been my third time in a row starting from E2EVC Berlin and Lisbon in 2015 and Dublin this year.

e2e_group

 

A few words about what is E2EVC

This event started as Pubforum many years ago and it´s founder Alex (not Justin, not Alice) Cooper has done a great job over the couple of years building this conference to what it is today. Although I heard a few times about PubForum in the past I never managed to get there. When I look back I should have done it earlier.

Although someone might think that it is only about drinking tons of beer it is a pure IT conference with a lot of great speakers from all over the world that share their knowledge with everyone who wants to learn and dig deeper into the topics. It is so special because you have the chance to speak face-to-face to MVPs, CTPs, vExperts and all the other guys you are following on Twitter.

As what I heard there are always round about 150 – 170 people joining the conference.

How to describe what happens with your brain and body

This year´s edition of E2EVC was called EPIC because it was run for 4 days instead of the usual three. And that is really hard, especially if you are as old as me ;-).

For the one´s that join for the first time (maybe in Rome) it makes sense to arrive one day earlier at the venue location because it gives you the chance to chill a little bit in front of the action and it gives you the chance to meet some of the guys that arrive early too.

I for myself always try to arrive one day earlier in order to get the chance to meet some of the folks. It is also a good thing to book the venue hotel as early as possible to prevent being in an hotel somewhere in the outback. It makes things easier if you get drunk at the bar and need to go to your hotel room… and the chances are high that you will get drunk ;-).

Although I do not like beer very much E2EVC is the only time of the year where I drink so much of it that in the end I get used to it ;-). E2EVC attendants have practiced a lot to start drinking beer in the morning until the sun goes down and rises again, without even having stopped drinking.

Prepare to have a minimum of sleep if you join going to the bar or bars in the various cities E2EVC takes place. Respect to all the guys that drink till the morning and present their sessions at 9:30 AM with the rest of the crowd that is sitting in the rooms giving the presenters and sponsors their kudos!!!

A few words to Alex…

Alex we talked about that topic at the bar but I thought I should repeat it at this place… I think we all now how busy you are planing all these events and how hard it is for you during the event to get all the people into the right direction.

If there are people complaining about things that are not running 100% perfect… f… it! I really like the floating agenda and the pre-event tweets and mails that announce agenda finalizations about a 100 times. From the very first event I had the feeling that you are taking care of every person out there that is attending and that you are trying to give everyone his credit in the small amount of time you have. I have huge respect for what you have achieved.

But there´s one thing you screwed up this time: The buses were red, not blue ;-).

About the grandfathers

E2EVC grandfathers guide newbies through the conference. If you are new and you have a question don´t hesitate to ask them, they will be glad to help you. Especially if you pay them with a beer (or two, or three).

sascha_stephane

The sessions

All of the sessions I´ve been to were really great and I learned a lot. Thanks to all the presenters for doing so much for the community for free and thank you for sharing such an impressive amount of knowledge. It will take me a lot of time to go through all of the videos in the next weeks.

Next stop… Rome

The next E2EVC is going to take place in Rome, November 18-20. I booked it and I´m really looking forward to see all of you again. If you want to be part of it check http://www.e2evc.com and book your ticket.

A few impressions

I think pictures speak for themselves…

Some last words

It was a pleasure meeting the “swiss army”, especially Thorsten (and your lovely wife) and Massimo Ferrara (who´s name is pure sex… LoL).

e2e_23

Thank you Frane from Croatia for the beer invite. I´ll contact you if i get the chance to visit Split again.

croatia_connection

 

Thank you Carsten and Sascha for the Dicey Club experience ;-).

I would also like to thank Luke Wignall from Nvidia for taking his time at 2:30 AM to listen to the community.

And many, many thanks to those who attended my session. I hope you enjoyed it.

See you,

Sinisa


E2EVC Rome 2016 – Part 1 (Citrix) – Troubleshoot XenApp With Style

$
0
0

Hi and welcome to this first part about troubleshooting Citrix XenApp. Last november I had the honor to speak at two well known EUC and Citrix events.

First of all at E2EVC in Rome, Italy and the day after at DCUG TecCon in Kassel, Germany. The topic of both sessions was “Troubleshoot XenApp with Style”.

I am writing this blog for all of you that couldn´t attend one of these great conferences. This first part is about the Citrix tools because otherwise it would grow too big if I would integrate all parts. The second part is about some of the Microsoft tools. The third part is about general troubleshooting tools that didn´t fit in the session.

Why Should You Read It?

This post is not about the usual problems you might have with Certificates, Firewalls or similar things where you might be able to find an answer googling around or checking the knowledge base.

It is more about the methodology and the tools to use when you are not able to find anything in the whole world wide web.

What About Existing Troubleshooting Guides?

You can check two good troubleshooting guides from Citrix regarding NetScaler, StoreFront,  XenApp and slow logons following these both links:

Troubleshooting Methodology for NetScaler, StoreFront with XenApp and/or XenDesktop

How to Troubleshoot Slow Logons on XenApp

How To Start?

If you are in charge of your Citrix XenApp environment or if you are a consultant arriving at a customer site for troubleshooting purposes you should ask you and your customer the following questions to get a picture of the problem:

  • What is the problem?
  • Who has the problem?
  • Since when do you have the problem?
  • Can you track down a specific time when the problem happens?
    • Is a specific location affected?
    • Is a specific system affected?
  • During which action does it happen?

There are a lot more questions you could ask to get more details about what is going on but you should start simple.

Questions should lead you as near as possible to the component that is creating problems.

Because Citrix XenApp is complex in it´s nature because of the dependencies to a lot of other infrastructure components you should go on asking about infrastructure details. Ask questions about (not a complete list):

  • Active Directory
    • Site configuration
    • Kerberos settings
    • DNS configuration
    • NTP
  • Network
    • Routes
    • Load Balancing
  • File servers
    • SMB settings
    • Folder redirection
  • Citrix infrastructure components
  • Application deployment and configuration
    • application configuration
  • Group Policies
    • Loopback mode
    • Policies in place
    • WMI filters
  • Hypervisors
  • Operating system
  • other specific configurations
    • hardcoded settings

Things To Do In The Beginning

After you´ve asked all the questions you should be able to get a more precise picture of the problem and after that it is time to check the technological aspects.

Always start simple.

  • Start simple
    • check eventlogs
    • use Steps Recorder (I´ll explain that in the second part of the blog about Microsoft tools)
      • Gather errors and messages
  • Dive deeper
    • use verbose and debug logging
    • gather network traces
  • Gather as much information you can get
  • Identify the issue

Try to get as much information as you can get but always keep an eye on the amount of data you might get during verbose and debug logging.

Keep the amount of data you need to analyze as low as possible.

You should try to reproduce the problem to minimize data. If it is not reproducable you will have to go through a lot of data. It is really no fun to analyze 15 GB of ProcessMonitor data. now let´s dive into the tools.

Citrix Supportability Toolkit

The recent Citrix Supportability Toolkit consists of 51 tools that deal with all kinds of problems regarding Citrix infrastructures. I won´t go through all of these here but I will choose some of them that might be usefull during troubleshooting of your XenApp environment and I will start from simple to complex

Citrix Health Assistant

The Citrix Health Assistant is a very simple tool that you can copy to your VDA and that you run directly. This is how it looks like:

healhassistant.png

And as soon as you click on Start a VDA registration check it will check the VDA software installation, the domain member ship of your machine, the communication with the required ports, the VDA services, the communication with the DDC and if your VDA is synced in time.

healthassistant2.png

Use Citrix Health Assistant for a first quick check of your VDA installation.

Now you have a first impression if your VDA is missbehaving or not.

xdping.exe

This is a more advanced commandline tool that you can run on the VDA and the DDC.

xdping.png

Again you simply copy the binaries to the target system and you´re good to go. You´ll get a lot more information about the specific machine it is run on.

Like:

  • Information and status of Network Interfaces and settings
  • Information on Time synchronization and time check for Kerberos authentication
  • User information for the logged on user including
    • User details
    • Authentication type used
    • Group membership
  • Machine information
  • Environment information
    • Computer name
    • Operating system version
    • Domain
  • Information on Services Windows Communication Foundation Endpoints
  • Windows Firewall configuration and ports
  • Queries local eventlogs for errors
  • Provides client bandwidth and response time

Use xdping.exe to gather additional information about your VDA or Controller.

The information you get will give you a lot more detail then Citrix Health assistant and it might show you the way to a source of a failure.

Is Troubleshooting Really Safe When I Use These Tools?

Both tools run on the same system might deliver different results. Citrix Health Assistant is created intelligently enough to check the Policies hive in the registry for the ListofDDCs value:

healthassistant3

You can check this with ProcessMonitor:

healthassistant4.png

xdping.exe shows the option as not configured and tells us that it is not possible to enumerate the list of DDCs:

xdping3.png

You can check this with ProcessMonitor:

xdping4.png

This might simply be because of the fact that these tools are written by Citrix support guys and they might have started with xdping.exe as 32-bit tool and never checked it again. Although I would expect this error to be observed by a few customers.

Be carefull… Don´t trust anybody. Even not the tools you use…

Let´s check another tool to gather information of a system.

HDX Monitor 3.x

The next great tool to get an idea of your environment and to start digging into the configured options is HDX Monitor. It can be installed directly on one system via msi or you can run an online install through a browser by visiting: https://cis.citrix.com/hdx/download

After the installation you are able to choose your local system or a remote system for analysis.

hdxmonitor1.png

You´ll get an iTunes-style star rating of your system with regards to specific topics.

hdxmonitor2.png

By clicking on the topics you can dive deeper into the settings. For example Network:

hdxmonitor3.png

Or for example VDA settings:

hdxmonitor4.png

Use HDX Monitor to get a quick overview over an environment.

Try a little bit for yourself to get used to the things you can check with this handy tool. That´s enough for the VDA. Now let´s see what you can use to troubleshoot Citrix Receiver.

Citrix Receiver Diagnostics Toolkit

I prefer the Diagnostics Toolkit over How to Enable Logging on Receiver for Windows Using Registry Entries because I had not much luck in my initial tests with Receiver 4.5. The tool is simple to use and only needs to be copied to the VDA or a client with Receiver installed.

Click on Start Tracing and the tool will immediately start collecting data. Now you should reproduce the steps that lead to the problem you have.

receiver

You can configure the tool to check for updates and you can set the location were Receiver diagnostic logs are stored as well as the Trace level and the Log size. If you want you can even configure the Event logs (System and Application) and the amount of days that should be collected.

receiver1.png

If you stop the trace you will find a folder with the Eventlogs, some CDF traces and a PackingList.csv for further analysis.

receiver2.png

The lazy one´s can upload the files to Citrix Inside Services (CIS), were the collected files will be analyzed automatically. In my tests the feedback I got from CIS left room for improvements. Check the logfiles on your own to find specific hints for problems you might have.

receiver3.png

You can dig deeper into the logfiles by using tools like the Configuration Manager Trace Log Tool that you can download here. It will show you very quickly in which lines to look at by marking lines with warnings in yellow and errors in red.

receiver4.png

If you have suggestions for the tool let the creators know. Only by providing feedback they will have the chance to improve it.

receiver6.png

Now let´s have a look at CDF Control that you can use to check the above created traces or to create traces for specific Citrix modules.

CDF Control

CDFControl is an event tracing controller/consumer, geared towards capturing Citrix Diagnostic Facility (CDF) trace messages that are output from the various Citrix tracing providers.

This is an advanced analytics and debugging tool with a lot of options. If you are experienced with troubleshooting tools it will be self explanatory after a few tries.

cdf.png

Before you start to trace have a look at Recommendations for Collecting the CDF Traces

After the trace you are able to filter for Modules, Functions or for example Errors. The next screenshot set to trace Deliver Controller Services shows us very quick that the database server is unavailable. This should tell you to call the database guys and tell your boss you´re not guilty 😉

cdf2.png

CDF Control is an advanced troubleshooting tool with a lot of potential to resolve errors.

If you need to create CDF control traces during startup check the following support article:

How to Collect a Citrix Diagnostic Facility (CDF) Trace at System Startup

Citrix Scout

Citrix Scout doesn´t seem complex from a user´s point of view but it will gather tons of data that might lead you to the root of a problem.

Scout is there on your Delivery Controllers. Use it!

You can add 10 machines (if you haven´t changed it) for data gathering and that makes it perfect to gather data about machines that might behave differently although configured and installed identically.

After you added your machines to trace click on CONTINUE and start the trace.

scou2.png

You are now in charge to reproduce the problem and to keep the amount of data low or you can leave it running and wait for the problem to happen. This depends on the problem you are trying to resolve.

scou3.png

Options you can configure are:

  • Check for updates
  • Report Folder location
  • Eventlogs to collect with the amount of days
  • CDF trace file settings with size and
  • Maximum number of machines to collect data from (this will have huge impact on performance)
  • Proxy Server settings

scou4.png

You´ll get an overview of your site and of every machine you entered for the trace.

scout.png

And you´ll get a folder with a lot of information…

scout5.png

With a lot of logs for Citrix services…

scout6.png

And a lot of Registry entries to look for…

scout7.png

Although this tool creates a lot of data it is perfect to check for differences through machines in your deployment.

Citrix Insight Services (CIS)

The Citrix Call Home feature – you remember that thing that you can enable during installation – if  enabled uploads periodically information about your environment to CIS.

cis.png

After logging in with your Citrix account you get an overview over your uploaded reports and information of your Site. Diagnostic reports will show you isssues you have and will give you hints on how to resolve them.

Although it might not be usefull to report issues like only one DDC in my site (because it is a homelab and small) and additionally lacking the hint of only one StoreFront server or an unclustered Site database it gives you an idea were this is going in the future.

cis1.png

In the lower left corner you will see additional information regarding your environment.

cis2.png

StoreFront Verbose Logging

We have checked the VDAs, Receivers and Controllers and the last thing that you should check for errors is StoreFront.

The first check leads us to the Eventlog:

sf1.png

If you are not able to see errors you should enable verbose logging. This is done via PowerShell:

sf2.png

If you look at the Trace Folder it looks this way during normal operation:

sf3.png

After enabling verbose logging it will contain additional logs:

sf4.png

Don´t try to open the logs with Notepad because it will not show you data that is readable. Use DebugView from Sysinternals instead. It will look more friendly.

sf5.png

You should disable verbose logging when you´re done:

Set-DSTraceLevel –All –TraceLevel Off

And this is it for the first part of the Troubleshooting tools for XenApp series. In the next part we will have a look at Microsoft tools you can use. I hope you found it usefull.

Cheers,

Sinisa

E2EVC Rome 2016 – Part 2 (Microsoft) – Troubleshoot XenApp With Style

$
0
0

Hi and welcome to this second part about troubleshooting Citrix XenApp.

Last november I had the honor to speak at two well known EUC and Citrix events. First of all at E2EVC in Rome, Italy and the day after at DCUG TecCon in Kassel, Germany. The topic of both sessions was “Troubleshoot XenApp with Style”.

I am writing this blog for all of you that couldn´t attend one of these great conferences. The third part will cover general troubleshooting tools that didn´t fit in the session and part 1 and 2 of the blog series.

The first part is about the Citrix tools you can use.

Why Should You Read It?

This post is not about the usual problems you might have with Certificates, Firewalls or similar things where you might be able to find an answer googling around or checking the knowledge base.

It is more about the methodology and the tools to use when you are not able to find anything in the whole world wide web. Check the first part to get an idea of what questions to ask and how to start the troubleshooting process.

Microsoft Tools

Let´s have a look at some useful tools from Microsoft you can (and should) use when troubleshooting Citrix XenApp issues. Some of them need to be used in combination with the Citrix troubleshooting tools because otherwise you won´t have useful results or you might not be able to read and analyze the information, others can be used themselves. Always keep in mind the more information you get from different sources the better you will understand the issue.

Let´s go…

SvcTraceViewer.exe (from Windows 10 SDK)

The Services Trace Viewer is a very handy tool if you need to analyze Citrix StoreFront verbose logs. The general recommendation for the creation of StoreFront verbose logs can be found here. Typically you would zip the files and send the logs to Citrix support if you wouldn´t troubleshoot on your own. But because we are trying to get the issue on our own we need SvcTraceViewer.exe.

In order to get the tool you need to install the Windows 10 SDK. The download link for that is https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk.

The Trace Viewer itself can be found after installation at this location:

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools

Now  you are able to read the logs and you can try to find the issue on your own.

viewer.png

If you need to dig deeper you can open Sysinternals DebugView during tracing to get more information. As I said this is typically asked from Citrix Support to get a better picture of the problem. The moment you start DebugView it will collect debug output from the system it is running on.

Use SVCTraceViewer to check StoreFront Verbose log files.

Steps Recorder

Another simple but very effective tool ist the Steps Recorder. It comes preinstalled in every Windows version and can be found in the start menu. I prefer to use it every time a user needs to explain or clarify an issue. Often users are not able to express perfectly what the problem is and steps recorder gives you the opportunity to get an idea of the problem they might have.

Let the user open Steps Recorder.

steps1.png

By hitting “Start Record” every single click a user does is recorded by a screenshot and the date and time it happens along with the application name the user is acting with. This is perfect to match this data to eventlogs and similar things you might look into in order to resolve an issue.

steps2.png

When the user finishes he simply hits “Stop Record” and he´s able to add some extra comments. In the end he can send it to you for further assistance.

Use Steps Recorder for situations where a user is not able to explain the issue or if you want additional information about the environment.

Process Explorer

This is the second most used tool in troubleshooting scenarios. It is the perfect tool to monitor and watch all of the processes an a Windows system or for a specific user or program.

You can see very clearly what kind of child processes are being created and if you enable the columns with User Name, Process ID and the corresponding command line you have a good overview of what is going on in a session or during interaction with the system.

If you like you can replace the Task Manager an your system with Process Explorer. I really like this feature for my homelab servers or systems in development environments.

sys1.png

If you want to know more about a process you can show additional information like Performance, Performance Graph, GPU Graph, Threads or the Enironment variables. The environment variables tab is sometimes helpfull when troubleshooting scripts that set and use variables and you are unsure if they have the correct value.

sys2.png

Replace Task Manager with Process Explorer to get more information about running processes on your systems.

If you want to replace Task Manager with Process Explorer there is a very simple and effective way using PowerShell:


New-Item -path ‘HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe’
Set-ItemProperty -path ‘HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe’ -name “Debugger” -value “””C:\Program Files\Tools\SysinternalsSuite\procexp.exe”” /ACCEPTEULA”


Process Monitor

Process Monitor is one of the most famous (if not the most most most famous) tools out there. This is really the tool were you should be able to track down most of the issues you can have in a XenApp environment.

You can filter for registry activity, file activity, network activity and process and thread activity.

What I personally like is the ability to show the “relative time” column. Especially when you are analyzing slow logons it shows you the time from the beginning of the trace. That makes it easy to keep track of the time a process needs to run.

Additonally you can show columns like Architecture, Comand Line and User and Session.

If you are searching for files and registry keys that you need to tweak with your UEM solution, this is the tool to go because you will be able to find the files, registry keys and entries you need to set for a specific application.

proc.png

The following example shows you the creation of a shortcut through SelfService.exe from Citrix Receiver.

proc1.png

You should be aware of the fact that ProcMon can use a lot of system resources when it is running and sometimes, when you are trying to analyze timing issues during logon you will see that they are gone during analysis because of Procmon slowing down the system.

This tool can have a massive impact on the performance of the system you are starting it. Therefore don´t let it run without having a look into it, and always have a look at the ammount of data you are gathering.

ProcMon is creating a lot of data…really a lot!

Netstat and TCPView

If you need to check communication from a host to specific systems and ports Netstat is the simple tool you can start from the commandline.

netstat.png

If you also want to know which Process is creating connections from your host to another and the specific port it is using try TCPview from the Sysinternals Suite.

tcp1.png

TCPview will show you the process behind a connection.

BGInfo

I know that this is a no-brainer but it is simple and very effective to get some information from the system you are logging on.  You can specify and extend it with custom PowerShell scripts. The next picture shows you an example where I added Fields for the PowerShell, Citrix Receiver, App-V and Internet Explorer Version.

The integrated PowerShell scripts simply gather the version information from the registry.

bginfo.png

If you are out of budget or need a very simple solution to get the information about the users that are logging on the a system you can create a textfile through BGinfo that documents these logons.

bginfo1.png

The logfile creates entries with a variety of information you can import to Excel to create filters and search for specific users. This is an additional source to gather information to use in combination with other troubleshooting sources.

bginfo2.png

BGinfo – Simple but often effective.

If you want to start BGinfo in every session on a Workstation or Server there is a very simple and effective way using PowerShell:


Set-ItemProperty -path ‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run’ -name “BgInfo” -value  “””C:\Program Files\Tools\SysinternalsSuite\Bginfo.exe”” “”C:\Program Files\Tools\SysinternalsSuite\demolab.bgi”” /TIMER:0 /NOLICPROMPT”


The command tells BGinfo to load a custom bgi file that I created before. The files need to be present on the system. I wouldn´t recommend placing the files on a fileshare because this might have impact on your logon time.

Also take care of the fact that this BGinfo background can grow large depending on the size of the screen and a potential background image you might be using. Such a file can easily grow 3 MB and more and will reside in the user profile.

CMTrace

This tool is part of the System Center Configuration Manager Tools. If you work with Configuration Manager you know how challanging log files can be (Configuration Manager has more then 70 different logs). The cool thing about CMTrace is that it is highlighting lines with errors in red, lines with warnings in yellow. This makes checking logfiles a much more simpler task, because you are quicker reading and searching through them.

cmtrace.png

You can download the System Center 2012 R2 Configuration Manager Toolkit here.

Use CMTrace to quickly find errors and warnings in log files.

rsop.msc

Group Policies or better said the configuration of those often create problems we need to check. In big companies usually more then one team is responsible for Group Policies and other teams might screw your environment without even knowing or noticing it.

In such cases it might be suitable to take a look at the Group Policies that affect a user or a system. The cool thing about rsop.msc is that it will show you the configured settings and the Group Policy name it is comming from.

The user himself can start rsop.msc (if he is able to start a cmd or PowerShell console). This way you could have a quick look shadowing a user and getting some insights into his configuration.

rsop.png

As administrator you get a lot more more information.

rsop1.png

This will help you finding the Group Policy that is changing a specific configured setting as last. But this won´t tell you how many times a setting might have changed before back and forth. This might be something you should additionally consider having a look at. Many policies create many problems

rsop.msc shows you a configured setting and the name of the policy it belongs to and it saved my ass more than once.

UserEnvDebugLogging

Sometimes you need to dive deeper into the logon process of a user. This is the moment you should consider enabling UserEnvDegugLogging on a system.

Be aware of the fact that using ProcessMonitor in combination with UserEnvDebugLogging can have a huge impact on the performance of a system and on the log file UserEnvDebugLogging is creating.

Also be aware of the fact that it won´t solve all of your problems. I had situations were I tried to get a picture of a slow logon but I couldn´t find any information regarding the cause of the issue.

In such a case it makes sense to have a look at Process Monitor that will show you more information.

userenvdebug.png

Enable logging by setting the above Registry Key. Logging will immediately start at the following location…

If we look into it we will see a lot of information in it. I won´t explain it in detail because there are other very good articles out there.

Do not use UserEnvDebugLogging with Process Monitor at the same time.

This is it for the second part about troubleshooting Citrix XenApp. I hope you found something useful for your next issue.

Always remember – it needs a lot of practice and experience to find some of the issues you might run into and you need to decide if it makes sense in means of the time to find the issue and the impact it might have on your business if you are contacting Citrix directly or not.

Cheers,
Sinisa

Step by Step – Install Microsoft RDS Licensing on Windows Server 2016

$
0
0

This blog post is part of a series covering the installation and configuration of Citrix XenApp 7.13 on Windows Server 2016.

This is the manual part were we are doing a next, next, I agree walk-through for all of you that are new to Citrix XenApp or want to see what changed in the installation from previous versions.

Today we are going to install one prerequisite that we need for our Citrix environment – Microsoft Remote Desktop Services Licensing.

In smaller environment I typically tend to install the Microsoft Licensing component on the same server as the Citrix Licensing Server. The bigger the environment the more likely you will have separate systems for infrastructure component installation.

If you want to have an overview of High Availability for RDS deyploments you should check this Technet article. You also find the following statement regarding the other options of fault tollerance you might think about…

There are two deployment configurations that are not supported:

Clustering RD Connection Broker servers on RD Virtualization Host servers.
An active-active RD Connection Broker installation.

To install it you need to switch to the Servermanager and start the Add Roles and Features Wizard. Click NEXT.

2016-10-30-17_48_55-add-roles-and-features-wizard

Choose Role-based or feature-based installation. Click NEXT.

2016-10-30-17_49_05-server-manager

As we are on the server were we want to install RDS Licensing click NEXT.

2016-10-30-17_49_10-add-roles-and-features-wizard

In the next screen scroll down to Remote Desktop Services and place a checkmark left to it. Click NEXT.

2016-10-30-17_49_33-server-manager

In the next screen leave everything untouched. Click NEXT.

2016-10-30-17_49_58-server-manager

NEXT.

2016-10-30-17_50_03-server-manager

Now place a checkmark left to Remote Desktop Services Licensing. Click Add features in the opening window.

2016-10-30-17_50_19-server-manager

In the next screen click NEXT.

2016-10-30-17_50_25-server-manager

Everything we need is now selected and ready for installation. Click INSTALL.

2016-10-30-17_50_33-server-manager

You can watch the progress if you like or grap a cup of coffee ;-). But be quick it won´t take long.

2016-10-30-17_50_38-server-manager

After the installation finishes click CLOSE.

2016-10-30-17_53_09-server-manager

And for today we are finished with this installation-quicky.

The following Windows Roles and Features were installed:

  • DisplayName : Remote Desktop Services
  • DisplayName : Remote Desktop Licensing
  • DisplayName : Remote Differential Compression
  • DisplayName : Remote Server Administration Tools
  • DisplayName : Role Administration Tools
  • DisplayName : Remote Desktop Services Tools
  • DisplayName : Remote Desktop Licensing Diagnoser Tools
  • DisplayName : Remote Desktop Licensing Tools

I hope this blog post helped you a bit. In a later one we will configure RDS Licensing.

Cheers,
Sinisa

 

Step-by-Step – Install Citrix License Server 11.14.0 for 7.13

$
0
0

This is the manual part were we are doing a next, next, I agree walk-through for all of you that are new to Citrix XenApp / XenDesktop or want to see what changed in the installation from previous versions.

You can install Citrix Licensing in two seperate ways and you will see that the installation dialogs and the Control Panel entries will look differently after installation depending on which way you choose.

Prerequisites

Check http://docs.citrix.com/en-us/xenapp-and-xendesktop/7/cds-license-landing-/lic-licensing-prerequisites.html for specific prerequisites.

Installation through the Wizard

Let´s start. Insert the XenApp_and_XenDesktop_7_13.iso in your VM and double click on your DVD drive. Now click on the “Start” button in the XenApp field. There is no huge difference wheter you choose XenApp or XenDesktop, the infrastructure components are the same.

2017-03-04 09_31_15-XenDesktop 7.13

Now choose Citrix License Server on the left lower side in the Extend Deployment area. The installer look changed a little bit from the earlier versions and there is some room on the righht side for more options to come.

2017-03-04 09_34_07-XenApp

Accept the License Agreement and choose NEXT.

2017-03-04 09_34_34-XenDesktop 7.13

If you want you can change the installation directory you can do it here. I will install the License Server in the configured folder.

Always read the small letters in installers and readme´s, it could save your life ;-).

The installer states that you shouldn´t install the License Server and Citrix Director on the same system for scale and performance reasons.

Click NEXT.

2017-03-04 09_34_47-XenDesktop 7.13

In the next step you can change the option to configure the firewall automatically or do it manually later. If you don´t need the settings because you are not using the Windows firewall choose manually, I will choose automatically in my lab.

  • 7279 TCP
  • 27000 TCP
  • 8083 TCP
  • 8082 TCP

2017-03-04 09_34_59-XenDesktop 7.13

Click NEXT.

The next screen shows you a summary of your configured settings.

2017-03-04 09_35_06-XenDesktop 7.13

The installation starts after you click INSTALL.

2017-03-04 09_35_49-XenDesktop 7.13

After some time the installer quits successfully.

You now have a running Citrix License Server. Click FINISH.

Yes, that was hard. You have successfully installed the Citrix Licenser Server. Let´s see how this looks like in Programs and Features.

2017-03-04 09_36_50-Programs and Features

You can see that Citrix XenDesktop 7.13 installed.

What I really don´t like at this place is that we cannot see what excactly is installed. The name of the component simply stated Citrix XenDesktop 7.13 and not Citrix Licensing as I would expect. It would be easier if there was something like “Citrix License Server” or something similar.

Installation with CitrixLicensing.exe

Let´s see how you can get there. Therefore you won´t use the guided installation dialog from the first part instead you will start the Citrix Licensing installer directly from the installation media (x64\Licensing\CitrixLicensing.exe)

2017-03-04 09_43_42-Licensing

You can see a totally different behaviour in the installation dialogs and the Control Panel entry. Let´s move on.

2017-02-23 10_52_15-Citrix Licensing

Agree and click NEXT.

2017-02-23 10_52_22-Citrix Licensing

Choose the install location and click NEXT.

2017-02-23 10_52_29-Citrix Licensing

Configure the ports and if you like let the installer set the Windows Firewall exceptions. NEXT.

2017-02-23 10_53_55-Citrix Licensing

If you like you can configure Citrix Licensing to automatically check for Subscription Renewals. Click INSTALL.

2017-02-23 12_19_50-Citrix Licensing

That´s it. Click on FINISH. If you know check the entry in Control Panel you can see “Citrix Licensing with a product version of 13.0.0.19005.

2017-03-04 09_11_09-Programs and Features

Very confusing isn´t it?

The safest way to check for the really installed version of Citrix Licensing is to check the registry entry for it.

2017-03-04 09_50_00-Registry Editor

Other things to take care of

Because the Citrix Service Provider program requires Customer Experience Improvement Program (CEIP) and Call Home, if you are a Citrix Service Provider, you cannot disable CEIP or Call Home.

That´s it for the manual part of the installation.

Step by Step – Configure Microsoft RDS Licensing on Windows Server 2016

$
0
0

Hi and welcome everybody to the next blog post of a series about installing and configuring Citrix XenApp 7.13 on Windows Server 2016. After the sucessfull installation of the Microsoft Remote Desktop (RDS) Licensing component we now need to configure it.

So today we will configure Microsoft RDS Licensing. The RD Licensing Manager can be started over a Start Menu link or through a link in the Servermanager. It is not necessary to add RDS Licenses if you are in a lab environment because the License Server will issue temporary licenses for 180 days and in most cases this should be sufficient for a few tests or demos.

The first thing you will notice is that the License Server is not activated. You can see that on the red mark left to the server name.

2016-10-30-17_54_47-server-manager

If you right click on the server name you can open the configuration of the server. You can see that the Discovery Scope of the License Server is configured to Domain.

2016-10-30-17_54_56-homewap0002-configuration

To change the scope the user we use to reconfigure this option needs to have Enterprise Admin privileges in Active Directory. Click CONTINUE.

2016-10-30-17_55_08-rd-licensing-manager

In the next screen you can choose The forest. Click OK.

2016-10-30-17_55_17-rd-licensing-manager

Choosing Forest makes this Licensing Server available to multiple domains within the forest. Click OK again to finish the configuration for the scope.

2016-10-30-17_55_27-rd-licensing-manager

In the next step we will add this License Server to the Terminal Server License group. Without this configuration the License Server won´t issue CALs to users and no reporting will be possible. Click ADD TO GROUP.

2016-10-30-17_55_36-rd-licensing-manager

In the next screen click CONTINUE.

2016-10-30-17_55_41-desktop

Click OK in the next screen to finish the configuration.

2016-10-30-17_55_46-desktop

The next screen shows green checkmarks for all configuration items. Click OK.

2016-10-30-17_55_50-desktop

Now right click on the server name again and start the Activate Server Wizard. Click NEXT.

2016-10-30-17_56_47-activate-server-wizard

There are a few options you can choose to activate the license server. I have internet access and therefor I will leave it on Automatic connection (recommended).

2016-10-30-17_56_55-desktop

In the next screen type in your First name, last name, company and Country. Click NEXT.

2016-10-30-17_57_25-rd-licensing-manager

Add further company information. Click NEXT.

2016-10-30-17_57_53-rd-licensing-manager

With the next screen we are ready to activate the license server. Leave the checkmark next to Start Install Licenses Wizard now activated.

2016-10-30-17_58_05-rd-licensing-manager

The Activate Server Wizard opens. Click NEXT.

2016-10-30-17_58_14-desktop

Again we have a few options to choose for a license program. As Microsoft partner we have access to a few licenses. I will leave License Pack (retail Purchase).

2016-10-30-18_04_14-activate-server-wizard

On the next screen we need to type in a License code. Click ADD and NEXT.

 

We´re done with adding Licenses. Click FINISH.

2016-10-30-18_05_23-rd-licensing-manager

Now you should be able to see the newly added Licenses in the RD Licensing Manager.

2016-10-30-18_12_09-rd-licensing-manager

That´s your Microsoft RDS Licensing server on Windows Server 2016.

Cheers,
Sinisa

Viewing all 25 articles
Browse latest View live