Create a web 301 redirect service with Microsoft Azure Functions


I ran into a nice issue, and I suppose more people could run into the same issue. Lets first start with laying out the issue:

  • We are moving to a new web solution where only one domain ( is supported unless you move all of the domains.
  • The new web solution provider does not support htaccess or 301 redirects from other domains (as an example then the root domain (
  • Our DNS provider can do a lot but they cannot add URL redirectors.
  • We don’t have a spare web server somewhere where we can add an htaccess file and I’m sure not want to pay for it.
  • There are “free” services on the web which allows you to redirect your domains to the root domain, but these free services will display adds or you need to add a link to the redirect service.

Ok, you can have your remarks on above point, but hey that’s just the way it is 🙂

Read more

Good old DSA.MSC on Windows Server 2016

A couple years back, one of our colleagues made a post about ‘Good old DSA.msc on Server 2012‘.

With more and more implementations of Windows Server 2016, we noticed that we still want our “good old DSA”.
For this reason, we have made a quick update on this post but now how to enable DSA.msc on Windows Server 2016.

Read more

LoadGen 5.0 will bring you a new product! ‘LoadGen Functional | Automated Testing’ of the user interface

Besides my daily job as CTO of PepperByte, I’m also working as CTO for our sister companies LoadGen and BlueParq (a really cool PowerShell tool where you can create PowerShell scripts visually). With LoadGen we are developing several software products which can measure the real user experience on Citrix, Microsoft Remote Desktop, VMware Horizon and Windows Fat Clients.

Because we want to release our software in short cycles there is a lot of pressure on our testers. Two years ago we decided to build our own functional test software, which allows us to add a functional test as the last step in our Build Automation process (Visual Studio Team Services but works on Jenkins and other Build Automation tools too). The result is a lot of extra spare time as we are running this tests, automatically at night, so our test team can focus on specific test-tasks. Besides that our developers directly see if a build is successful instead of waiting for the test team. We have decided to bring this product to market in our upcoming LoadGen 5.0 release which will be released in February this year. In this blog post, I will take you on a trip through this new product called LoadGen Functional | Automated Testing.

LoadGen Functional | Automated Testing tools

So when you buy LoadGen Functional | Automated Testing you will receive the following tools:

  1. The Studio, in which you can create your functional tests.
  2. The Recorder (part of the Studio) which let you record, build, replay and debug your functionals tests.
  3. The Launcher, it’s pretty much all in the name, but the Launcher can be integrated into your build automation process to run your functional test unattended.

Test repository, projects, testcases, testblocks, testactions, and reports

We think a logical approach in your functional test will help you setup your functional test or migrate from another functional test tool (like Ranorex) extremely. That’s why we came up with the following architecture of LoadGen Functional | Automated Testing:

  1. Test repository: LoadGen Functional | Automated Testing comes with a database (SQLite) which you can use as a repository for all of your functional tests. The repository stores pretty much anything you build within LoadGen Functional | Automated Testing.
  2. Test projects: holds your functional test, you can define multiple projects and run each on different Launchers to speed up the process.
  3. Testcases: the testcase will guide you through the steps (testblocks) of your functional test. You can think of a test case as a set of step-by-step instructions to verify if something behaves as it is required to behave. For example, create a testcase ‘Microsoft Word’ and add the testblocks as described in the next item as the steps to reach your goal.
  4. Testblocks: are the logical steps within a testcase and will hold your individual testactions. As an example, we use the testcase in my previous item:
    1. Microsoft Word (which holds the following testblocks):
      1. Start Microsoft Word,
      2. Create a new document,
      3. Type your text,
      4. Save the document,
      5. Close Microsoft Word,
  1. Testactions: withing the LoadGen Functional | Automated Testing Recorder we deliver you a Toolbox with the following actions for you to use. With these actions, you can build your functional test very fast. For example, Check if a specific file exists, after you have saved your Word document.


The most important item in the testactions are the validations. These validations validate a specific condition. We support the following validations:

  1. Caption of foreground window: like Notepad or a part of the captions like Word – Document.
  2. Control in foreground window: some applications like Chrome, SAP, and Java exposes their controls to the Operating System, even Microsoft Edge and Internet Explorer are exposing the controls, so this will definitely help you in web testing your business application from a user perspective. So with this validation, you can check if the control you are looking for is:
    1. …is found: if not you can add specific actions in this case, for example, restart the application.
    2. …is found and the property is matched: in this case, the control is found and the property matches, as an example you are looking for a specific checkbox where this checkbox state is checked.
      1. …is found but the property doesn’t match: in this case, the control is found but the property doesn’t matches, as an example you are looking for a specific checkbox where this checkbox state should be checked but the checkbox is unchecked. In this particular case, you can directly add a call to action (click mouse left on the control).

  1. Image: a very, very fast way to find a specific image within the whole or specific area in the desktop. In the case, you can’t validate on a control just use this validation.
  2. Single pixel: the same as an image but on a specific pixel somewhere in the whole or specific area desktop.


In this example, I will use the checkout page of,

Step 1

In this step, I will create a testcase named Microsoft Edge, with a testblock named Start Microsoft Edge. Within this testblock I will start the application Microsoft Edge and browse to my checkout page:

When I open the Start application action you can see that we just call a process:

After this action is called I have added a validation which will wait for the existence of the Next button:

Step 2

In my next step I will add the testcase named Add Company information which consists of three testblocks: Add company, Add firstname and Add lastname. Within Add company, I will validate on the checkbox Click here if you are a business, if found I want to click it:

After clicking the checkbox an extra field will be displayed where I can add the company name, so again I will add a validation which will check if the Company textbox exists:

The last step is to send the Company name to the control, I have used a variable to store my company name. My testblock looks like this:

The last steps are adding the same routine for adding the first and last name. Of course, I can group multiple actions within one testblock, but I use different testblocks so I have a more transparent report when I run my functional test.

Step 3

So now we are ready to run the functional test. I press play in the Studio and it will nicely run my different testcases, this will result in the following overview which can easily be exported to DocX or PDF:


Yes, one of the big issues in functional GUI testing is the constant change of the visual aspects of the application. Of course, we run into this issue as well, but because of the easy and intuitive way LoadGen Functional | Automated Testing works we can anticipate on changes very fast.


With the upcoming release we will first support Windows Fat Clients, in the 5.1 release, we will also support Citrix, Microsoft Remote Desktop, and VMware Horizon environments! We will release LoadGen Functional | Automated Testing in February 2018, if you are interested just contact me.




Windows 10: after sleep or hibernation no Wifi connection possible and AP list is empty

I have a Dell Precision laptop with a Killer Wifi network module installed in it. But since I have received the laptop I have issues after starting up the laptop out of Hibernation or Sleeping state. I suspect it has something to do with the combination driver of the Wifi device, Windows 10 and even BitLocker. One of the most annoying issues when starting up the laptop is the fact that the laptop will not reconnect to the known Wifi Access Points, the list of Wifi networks is empty.

No network connection whatsoever, Network Troubleshooting doesn’t find any issues and the only remedy is restarting the laptop…

Read more

C# Console application – remember users previous input (use up and down arrow keys)

Who’s using console applications these days? Well I’m, console applications are very convenient for testing or performing repetitive actions quickly.

One downside of the Console within the .Net Framework is the lack of remembering the (previous) user input. Just like cmd or PowerShell I want to use the arrow keys for scrolling through your previous inputted items.

Read more

Mac PowerShell Core: After upgrading you receive the message powershell: command not found

After installing (via PowerShell Alpha 9 to the latest version RC you receive the message powershell: command not found.
Read more

AzureRM (NetCore): how to remove multiple users from Azure AD

When removing a directory (tenant) from Azure AD it’s necessary to clean the directory before it’s even possible to remove it.

Removing multiple users from the portal is a time consuming business: only batches of 7 users a time are supported. So removing them via PowerShell is the way to go. As I was performing this task in the evening and didn’t have my Windows laptop at hand I used my Mac.

First of all be sure you have your PowerShell Core updated on the Mac (install the pkg from Nuget or use brew cask install powershell).

Read more

Introducing SFGuru Explorer 1.2!

Since the initial community release of SFGuru Explorer for Citrix ShareFile on 25-10-2014 we (Daniel Nikolic / Rink Spies) have been busy developing the application. Every time when we detect repeating, or labor intensive tasks within our ShareFile support team we try to improve the job by integrating an optimized task in SFGuru Explorer. Currently we have lots of ideas and beta versions which we need to do some further testing on, but before releasing these features we want to be 100% sure everything runs stable. While all the coding and testing needs to be done in our spare time it could take some time before we can release all new features.

Meanwhile we made some great improvements, which have been fully tested. Improvements of which we are proud 🙂 We decided to add all the tested features to a interim release, which will be released as SFGuru Explorer version 1.2!

So lets’s start with the new features we added:

Read more

Demystifying the ShareFile StorageZone Controller Passphrase

While setting up the first ShareFile StorageZone Controller you need to enter a Passphrase. The Passphrase will be used to protect your file encryption key (SCKeys.txt) which is located in the CIFS root folder. Without the Passphrase you won’t be able to add additional StorageZone Controllers, reinstall or recover the current StorageZone or create configuration backups. A running StorageZone controller will still work fine, but you can’t make any changes. I can’t stress out the importance of this passphrase!

Be sure to archive the ShareFile Passphrase and encryption key (SCKeys.txt) in a secure location 🙂 !

Of course you will archive the ShareFile Passphrase and encryption key (SCKeys.txt) in a secure location, but in case the ShareFile Passphrase gets lost Citrix won’t be able to help. According to the eDocs and ShareFile support the Storage Zone should be considered as lost.

Citrix support won’t be able to recover your Passphrase!

Read more