- Uploaded the files for upgrade to 1909

- HINT: If the upgrade is failing in your environment, please check the process timeout in "Settings / Provisioning / Communication Settings". There is a process timeout that is normally set to 30 minutes. That means, that if a script need more then 30 minutes, it run in a timeout and will stop the execution. Set it to 2 hours and then the upgrade script will run successfully.

- For the 1909 upgrade we need to change the report filters from "equal" to "contains":


Hello Community,

Here is my final article of my mini series covering a strategy for the Windows 10 inplace upgrades. This series contain 3 blog posts:

1.) a precheck to detect upgrade issues or blocker in advance


2.) the preseeding of the binaries so that clients outside your network will smoothly download the gigabytes


3.) the upgrade itself

At this place I want to thank chrpetri for being a great help for developing this strategy and these scripts.

Here you can download the exported script as well as the report and the custom inventory rule.



As dependencies we have some scripts and files. Keyfreeze is used to prevent user interaction on a client on which the upgrade is performed. The script "LaunchKeyFreeze.cmd" only distinguishes between x64 and x86 and executes the correct EXE.

The script "setupcomplete.cmd" writes the string “SUCCESS” to a file. This script is only executed if the setup.exe was successfully.

The script "UpgradeWinX.cmd" contains the command to execute the inplace upgrade and the error handling if something should fail.

This KACE script is based on the same ISO as the PreCheck script. The first three tasks are similar to those in the PreCheck script. Here we check if the system is upgrade-able and if our temporary folders exist. If these are available, we clean the folders.

The only difference here is that we check the language code in the first task. This is important because we need an ISO file that contains the same language as the base image of the operating system. This means that if a client was installed from an English image and German was installed as additional (or even default) language afterwards, we still need the English ISO file for the upgrade. Otherwise the upgrade will fail.

You must change the language code if you have a different language installed on your clients. I have set the Language Code for English (en_US).

You can find the possible language codes here:


Recommendation: If you have several languages in your company, it makes sense to roll out an English basic image on all clients. After the deployment, you can install any language package. You will then only need the English ISO file going forward.

The fourth task in this script is about the upgrade. First, we write the status of the upgrade to a file, which will be checked in the inventory run right after creation.

Then the script "setupcomplete.cmd" is copied. This script is then called by the "setup.exe" as soon as the upgrade was successful. After copying the file, we execute the Keyfreeze. This can be removed if necessary.

As the last step in Verify we run the upgrade script, with the path to the ISO file (can also be local if the files were previously stored) and the path to the log files.

You have to edit the path to the ISO file to your environment similar to the PreCheck script.


If the setup was successful, the log files are collected and uploaded to the SMA. In addition, a restart is initiated to continue the upgrade.

If the setup fails, the log files are also collected and uploaded to the SMA. At the end the Keyfreeze is still terminated, so that an interaction with the client is possible again.

Important: This script must be executed in a task chain. Since the script performs a restart, it would not complete in a normal execution as a script after a successful upgrade. However, the task chain continues to execute the script even after a restart.


In the following window, assign a name for the Task Chain and assign Clients. In addition, you must deselect the MacOSX and Linux operating systems if they are present in your network.


Then you can define a schedule and a new task can be created.


Now we select the Windows 10 Upgrade script. If the script is not in the list, you must activate the imported Windows 10 Upgrade script in our script module.


Finally, save the task chain. Now you can deploy the upgrade.

During the execution of the script we will write several states to a file. The states within the file will be reported to SMA by a custom inventory rule.

The CIR have a different ID in your environment, so you need to edit the filter in the report.

To customize the report, navigate to "Reporting / Reports" and search for "Windows 10 Build 1903 Upgrade Status". Then click the report and navigate to "Filters". In the filter you need to choose the CIR and set the operator to equal and type the states in as values.


The following is an example of this report:


I hope this mini series will help you with your inplace upgrades so that you have time again for the important things in life. If there are any questions or problems, do not hesitate to use the comment function and let me know.


  • the link for the scripts, reports and custom rules doesn't work for me. Any reason why I cant download. - Nigelhassan@plusone.com 4 years ago
    • Had the same issue. Have you set your "Customer Support Validation" E-Mail-Address in your "Settings" Page of your user account? I think this has to be a valid customer support account from QUEST. Best regards, Jens - luedlluedl 4 years ago
    • Good morning.

      we have implemented a new method to download our files. Only customers with an active maintenance on one of our KACE products can download files.

      If you have valid maintenance, then you must accept the terms and conditions field. You must scroll down in this field and at the bottom you have a checkbox to accept it.

      The comment from luedluedl is right, as well. If you are in your settings of your ITNinja profile, you need to validate your "Customer Support Validation" E-Mail address.

      Hope that helps you to download my packages.

      Have a nice day. - sven.hain 4 years ago
  • Thanks guys. I validated my email and now able to download. - Nigelhassan@plusone.com 4 years ago
  • Dear Sven,

    we're currently testing your upgrade mini series including your scripts - thanks a lot for your work. That's what we've been looking for.
    Unfortunately we're receiving an error on the Upgrade-Job, which looks like this:

    Latest Log for WinX 1903 UPGRADE on KMDE4LWX271CN12 [ Show All ]
    Started: 08/27/2019 13:17:20
    Finished: 08/27/2019 13:17:21
    Elapsed Time: 1 second
    Status: 3
    Output Log
    2019-08-27 13:17:21: Run As failed: timeout

    Can you explain why "Run As" does a timeout and what we can do? Thanks a lot for your kind help.

    Best regards, Jens - luedlluedl 4 years ago
    • Hi Jens,

      there can be several issues why the script is not running.

      - Did you check the validation part where we check the language code at the client? Is your language code maybe different to English?
      - Did you modify the link to the extracted Windows 10 1903 ISO file in task 3 of my script?
      - Have authenticated users access to the extracted ISO file?
      - If you run the setup.exe manually on the client, are there any issues that came up in the installer?

      Hope that helps you.

      Best regards

      Sven - sven.hain 4 years ago
  • Hi Sven,

    thanks for your help and sorry for my late reply.
    I've checked the following:

    - Did you check the validation part where we check the language code at the client? Is your language code maybe different to English? -> Changed to German language code 0407
    - Did you modify the link to the extracted Windows 10 1903 ISO file in task 3 of my script? -> Yes
    - Have authenticated users access to the extracted ISO file? -> Yes
    - If you run the setup.exe manually on the client, are there any issues that came up in the installer? -> Launching your script manually on the client with exact the same parameters -> Upgrade works!

    The issue for us is currently: launched "by hand" is ok, but launched by KACE not. The Setup starts and freezes at around 40% every time. No error log is created in directory or uploaded to KACE. Also the keyfreeze.exe is still active.

    Do you have any further idea? Currently we have no further clue what to check.

    Thanks in advance and best regards,
    Jens - luedlluedl 4 years ago
    • Hi Jens,

      that sounds very weird. Can you please send me an Email, that we can take a look to it in a WebEx session? You can find my Email address in my profile.

      Best regards,
      Sven - sven.hain 4 years ago
  • Hi Sven,

    The precheck has worked very well but I am not sure if I am setting up the task chain correctly for the upgrade. Is the upgrade script added once and that makes up the chain or does it need to be added a second time to account for the reboot?

    Jeff - j44miller 4 years ago
    • Hey Jeff,

      thank you for the feedback. It is good to know, that the scripts are working well.

      Regards the task chain, you need only once the upgrade script in the chain. It is not really a chain then but with this feature the script will continuing after the restart.

      Hope that helps you. Have a nice day and later a great weekend.

      Sven - sven.hain 4 years ago
  • Hi,
    I was wondering is there a way to Distribute from the replication points? I would like to reseed from there to local machine. - danielneu24 4 years ago
    • I have this question as well. Best thing I can think of at the moment is trying to get as many systems pre-seeded with a managed file sync and then adding a scripted step that checks for the package locally, downloading it via BITS to the SMA only if the package isn't already there. - Kiyolaka 4 years ago
    • Hi,

      sorry for my delayed answer.

      Yes you can reseed the files from a replication point.

      You just need to search for the ZIP file in your replication path and then you can use this path in the file synchronization to preseed the files to the local machine.

      Second option would be that you create a preseeding script with the zipped ISO file as dependency. You can verify, if the ZIP file is completely synchronized on the client and then you can unpack it. The dependency will synchronize to the replication point and if you let the script run on a client machine it will look in the replication point for the dependency. You can modify my preseeding script, that would be much easier because you do not need to create a completely new script.

      Please be aware that you need to change the path in the Inplace Upgrade Script to have the local path as path for your ISO file.

      Hope that helps you. Have a nice day. - sven.hain 4 years ago
This post is locked
This website uses cookies. By continuing to use this site and/or clicking the "Accept" button you are providing consent Quest Software and its affiliates do NOT sell the Personal Data you provide to us either when you register on our websites or when you do business with us. For more information about our Privacy Policy and our data protection efforts, please visit GDPR-HQ