1569947843 w10 1909 1 story

Windows 10 September 2019 Upgrade

Upgrade Win 10 to September 2019 (1909)


This agent procedure will upgrade Windows 10 to Build 1909.
This will perform an entire Operating System upgrade, it is recommended to perform a backup and/or system restore point before proceeding with the OS upgrade.
The workstation will be restarted as part of the procedure.
The whole process takes between 45 minutes and 2 hours until the workstation can be used again.
It is recommended to have at least 30GB free on the endpoint before running the procedure, otherwise the procedure could fail without giving any error message.
This listing does not require to upload any files. It will download a file directly form Microsoft to perform the upgrade.

There are two checks in the scripts to verify disk space as well as ensuring windows has been activating as these are requirements for the Microsoft tool to run properly.

  • Name: Douglas Sanchez
  • Company: Kaseya
  • Website: http://www.kaseya.com
  • Contact Developer
  • Summary
  • Windows 10 September 2019 Upgrade
  • Version:
  • Released on January 13th, 2020
  • Reviews
    Gravatar for Jim Considine
    by Jim Considine on August 24th, 2020

    The process works great. Easy to deploy to multiple systems over a weekend. Will look to use this to deploy build 2004

    Gravatar for Daniel Valenti
    Daniel Valenti 9 months ago

    Is there any way to prevent the auto reboot? 

    Gravatar for Douglas Sanchez
    Douglas Sanchez 9 months ago

    Yes, you would need to add the "/noreboot" switch on line 16

    Gravatar for Wouter Keizer
    Wouter Keizer 8 months ago

    Hi, im running in to an issue with windows 7 PRO OEM

    OS is activated but check of this script says it is not.

    Therefore upgrade is not starten.

    Any idea what the cause could be?

    Gravatar for Johan
    Johan 8 months ago

    @Wouter Possibly a language thing? Check what language Windows reports the activation status in. Run the PoSH command manually for this. Adapt the script as needed.

    Gravatar for Richard Gericke
    Richard Gericke 8 months ago

    Doesn't work for Enterprise Edition 

    Gravatar for Wouter Keizer
    Wouter Keizer 8 months ago

    Sounds good but im not very good with Powershell or scripting language.

    What command should i run from the script in local PowerShell.

    OS is Dutch by the way.

    Gravatar for Johan
    Johan 8 months ago

    Sorry, I messed up, this script should not mess up with other languages (the 1903 one does). Run this on the target machine, if it returns 1, it should run fine:
    (Get-CimInstance SoftwareLicensingProduct -Filter "Name like 'Windows%'" | where { $_.PartialProductKey }).LicenseStatus

    Gravatar for Martijn Wenke
    Martijn Wenke 8 months ago

    Sometimes the script estimated that there was not enough free space, but there was more that 32 GB. The command '((Get-PSDrive C).Free/1GB)' returned for example 104,748271942139. I changed the Powershell command to fix this issue with a cast to integer: [int]((Get-PSDrive C).Free/1GB). At the same system this command returned 105, so it could continue with the next steps.

    Gravatar for Gertjan
    Gertjan 8 months ago

    Does this script work on NL versions?

    Gravatar for Mag
    Mag 8 months ago

    Guys, im really new on this, its there any ways to check the steps on doing this?


    Gravatar for Phil
    Phil 8 months ago

    I am new to this too.  What do I do with this file/script once I download it?

    Gravatar for Kim
    Kim 8 months ago

    Is there any known fix to get this to work on the enterprise edition of Windows 10?

    Gravatar for Anthony Byrd
    Anthony Byrd 7 months ago

    Running into same problem as @wouter and after trying to run the command you specified it returns that Get-CimInstance is not a recognized internal command. 

    Gravatar for Laurens Driessen
    Laurens Driessen 7 months ago

    Hi there,

    For most VM's and systems the Agent Procedure finished succesfully.

    About the failed ones I got the same issue as @Martijn Wenke:
    "Sometimes the script estimated that there was not enough free space, but there was more that 32 GB."

    The W10 Home (x64 + activated + 1903 build) system which failed has 196GB free disk space. 
    What could cause this and how to fix this? 

    Gravatar for Johan
    Johan 7 months ago

    It's because of regional setting (dot vs comma). Just round down to the GB to avoid this. Replace the first PoSH command in the procedure by this one:
    [math]::Round((Get-PSDrive c | Select-Object -ExpandProperty Free)/1GB,0)

    Gravatar for Laurens Driessen
    Laurens Driessen 7 months ago


    Thank you, that did the trick.

    Gravatar for David Horvath
    David Horvath 7 months ago

    I am trying to run the procedure on a windows 10 VM and I keep getting the error message: Script Summary: Failed Then in step 2(line 3).  I'm guessing this is the same problem that occurred with Martijn Wenke had but, I'm not sure how to resolve this.   Would I just replace 

    ((Get-PSDrive C).Free/1GB)


     [int]((Get-PSDrive C).Free/1GB)

    Thanks for any help

    Gravatar for Brian McLaughlin
    Brian McLaughlin 5 months ago

    I'm getting "SUCCESS THEN" returned as the status, but nothing seems running or updating. The status is showing success after only about 5 minutes.

    Any idea what might cause this?

    Gravatar for Chris Amori
    Chris Amori 5 months ago

    Brian, "Success Then" is just a Kaseya response saying it ran the script with no syntax failures.    If the script is not working, it is likely that your machine can't be upgraded for some reason.     My suggestion would be to run the updater manually and see what error is preventing it from installing.

    Gravatar for Chris Amori
    Chris Amori 5 months ago

    BTW, can anyone confirm that the /noreboot actually works?    In my initial testing of the upgrade utility, it would ignore this.

    Gravatar for Brian McLaughlin
    Brian McLaughlin 5 months ago

    No errors when I log in remotely and manually run windows update. I have been doing it this way for a week now on some ~100 computers to get them up to date (mind numbing). Trying to find a way to push this to another 500+ computers so that this isn't a month long project.

    Gravatar for Jonathan
    Jonathan 5 months ago

    Hi Brian. The procedure itself finishes pretty quickly but the actual upgrade takes 45 minutes to multiple hours and will continue well after Kaseya reports the procedure has completed "successfully".    I've relied on a combination of patience (just wait 2 hours after running) and View to check the OS build number.   If the OS build number hasn't' changed after 2 hours, then it probably failed.      We've been able to upgrade 900+ machines using this method with a high success rate. 

    Gravatar for Brian McLaughlin
    Brian McLaughlin 5 months ago

    Thank you for the help guys, I will continue to monitor. If I log in remotely the computers don't seem to be installing anything in the background, or rebooting.

    Didn't see anything failing in the procedures log so maybe it just hasn't had enough time.

    Appreciate the help

    Gravatar for Cees
    Cees 5 months ago

    Hi Brian, maybe u can also use Microsoft SetupDiag to determine what the cause is of the unsuccessful upgrade. https://docs.microsoft.com/en-us/windows/deployment/upgrade/setupdiag

    Gravatar for Rich Tyree
    Rich Tyree 5 months ago

    Agree with @Johnathan comment, i have used an unmodified version, you really should allow the reboots however. I have hit my system in bunches of 50 then wait 15 minutes -  launch the next 50, only so that i am not saturating my known links. this would vary for your use i would assume but the largest i have have deployed in one sitting was about 300 (i had a weekend) and it took 9 hours for the last one to come online.

    I use views with filters for the OS build version, then i can get granular by dropping into the organization.

    I have completed hundreds (if not thousands by now) of updates using this script as well, with very high successes rate, when they did fail, and on review, i had issues on the system. Corrupt installer was number one, less than 30GB free was two and the other was unhealthy disk. none of the failed installs crippled my systems, it just says successful and does not complete.

    for me i run a post cleanup stored procedure though to clear out the leftover files, not just form the update bot overall clean. 

    Hope this was helpful

    Gravatar for Jay Jansen
    Jay Jansen 5 months ago

    A cleaner way to see the windows 10 version is to use a custom column and a script to query the releaseID from the registry that will give you the friendly 1809/1903/1909/etc version. Then you can build views on this (example <1903 on that custom value in the advanced editor)or do exports from manage agents to get a good overview of the current state of a client without having to decipher the build numbers.

    Query example if you want to see the data and adapat to your own script:

    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v releaseid

    Once you have a script then you can just add it to your existing deployment script to be called via executeprocedure and set it to run 2hr from that time or so.

    Gravatar for Andreas Exner
    Andreas Exner 5 months ago

    or with Powershell : Get-ComputerInfo | Select-Object -ExpandProperty Windowsversion

    Gravatar for Andreas Exner
    Andreas Exner 4 months ago

    Douglas? Where exactly did you get the commandline switches from?

    Gravatar for Douglas Sanchez
    Douglas Sanchez 4 months ago

    @Andreas I believe this is the article I used, it's been a little while though: 

    Gravatar for Douglas Sanchez
    Douglas Sanchez 4 months ago

    Another useful link I had regarding logs during the upgrade: https://support.microsoft.com/en-us/help/928901/log-files-that-are-created-when-you-upgrade-to-a-new-version-of-window 

    Gravatar for Andreas Exner
    Andreas Exner 4 months ago

    Here are the command line switches I found out.

    Gravatar for Dmitrij Kondrasov
    Dmitrij Kondrasov 4 months ago

    Is it upgrading to 1909 version or latest?

    Ex. now latest 2004. is it upgrade 1909 or 2004?

    Gravatar for Eric Peacock
    Eric Peacock 4 months ago

    @Dmitrij Kondrasov, this procedure downloads the file:
    https://download.microsoft.com/download/9/b/f/9bf08afb-bfd8-488a-9ce6-90134cea4d8f/Windows10Upgrade9252.exe  I just downloaded and ran this on my 1909 computer and it says "Thank you for installing the latest Windows", with no option to upgrade.

    Then I went to this page: https://www.microsoft.com/en-us/software-download/windows10 and downloaded the upgrade assistant from there. The download URL is different:  https://download.microsoft.com/download/8/3/c/83c39dca-2d27-4c24-b98b-0a4d6d921c80/Windows10Upgrade9252.exe

    Same .exe filename, but different URL paths.

    It looks like this procedure links to the 1909 upgrade assistant only.

    Gravatar for Dmitrij Kondrasov
    Dmitrij Kondrasov 4 months ago

    Just checked. This procedure upgrading to latest build. For now it 2004.