WaaS TS Download

Initial Release of the 1909 TS Collection on 2019.12.02. Several changes from the last time published. This also incorporates the updated Pre-Caching Process for Drivers & Language Packs. I still need to blog the Language Pack process, but time is a luxury I rarely have for blogging. More details about the overall process can be found HERE (the 1809 WaaS Process)

Previous: WaaS TS Collection 2021.09.08 (34746 downloads )
Current: WaaS TS Collection 2024.02.21 (3739 downloads )

Some Changes… the ones I could remember… full change logs are in the download, and it’s rather extensive, so here is a short manual version. If you see the version is newer than what you downloaded, I highly recommend you download and open the readme manual text file, and see if the changes are impactful. Often times, you can easily steal the changes from the zip file and copy the scripts or update your TS steps with the changes.

2024.02.21 – Bug Fixes, missed a lot of references to SMSTS_BUILD that needed to be replaced. Hopefully I got them all. Need to change to WaaS_UpgradeBuild and use the 5 digit build number (22631)

2024.02.14 – Updated for Windows 11 23H2 – No longer uses ReleaseID, but instead uses ‘CurrentBuild’ value. Changes some variables and basically had to touch every script in the process. Check out the Readme for a few more details.

2021.09.08 – Updated to include RSAT reinstall. Requires you create RSAT Package based on this script on GitHub

2021.09.01 – Updated Language Module to include our new process for supporting Language Packs. Requires you build Language Packages and use a Dynamic Variable Step with Details. – Documented at Recast Software – Resource Area

2020.11.26 – Tested with 20H2 and made some changes

  • Legal Text are now controlled via Variables. Check out the Legal Text Modules to set what Legal Text Options including just disabling it.
  • Moved some embedded scripts into the package to reduce TS policy size, expect more of this in the future.
  • The WaaS Baseline for Pre-Assessments that gets leveraged in Pre-Flight, you can now set the name of the Baseline in a variable instead of having to update a script.
  • Set Variables for where all custom logs go. Currently they are set to go to C:\ProgramData\WaaS and the LogFiles will be prefixed with WaaS
  • Future enhancements will continue down this line, allowing downloaders to make changes via variables and not having to update scripts or steps.
    • That said, make sure you look at the variables at the start of the Task Sequences and update accordingly.

2020.10.27 – Updated with minor fixes and changes.


  • New Requirements: CM2002
  • Updated Check Readiness Feature to leverage new items in 2002 [MS Docs]
  • Updated Splash Screen Code to fix “1909 bug” [SMSAgent Blog]
  • Added ability to Use Drivers (HP & Dell) from internet instead of DP [Blog Post]
  • Created Variables for Legal Text Scripts, makes it easier for you to add add your custom text.


  • Completely modified Export Method. The Export Method first Creates Copies of all of the Required Task Sequences (Appends the Date to the Name), to generate new package IDs, then updates the Copies to use the copied versions of the Modules. It then exports the Copies, which allows you to download each “Release” with the ability to import without having to overwrite any previously downloaded ones you have. You can then look through and compare any changes and steal / modify what you want.
  • Removed some Test Steps that were not needed
  • Replaced the Custom Error Dialog Step in the Upgrade TS with a completely re-written one based on PowerShell
  • Modifications to RollbackRecovery Script
Gives Date of Export from GARYTOWN’s Lab, and The last Modified date of the TS that was exported
Packages & OS Media will still prompt to ignore, but all of the Task Sequences will now have new GUIDs and allow you to Create new, instead of Ignore or Overwrite… allowing you to import each release without worrying about loosing any mods you made to a previous import.


  • Lots of changes, so many I honestly don’t recall them all.. but I’ll name a few
    • Changed to 1909 and confirmed it all worked. Yippy!
    • Main Upgrade TS… added folder near start of TS which will only run if.. NOT Deployment_Success or 1909… prevent the TS re-running again on accident if deployed again.. it happens
    • Worked on Replacing the Error handing that Adam Gross blogged about with a completely powershell modular replacement.
    • Added Inventory 2.1 script which records additional items as well as runs SetupDiag and writes to WaaS\SetupDiag\BuildNumber Key
    • More things… but I don’t remember right now…


  • Package Change
    • Tools & Scripts Package
      • RollbackRecovery.ps1
        • Added SetupDiag Tool (Requires Setup Diag in c:\programdata\WaaS, which would be added during PreCache)
        • Added Repair for CMClient if WMI issue
        • Added additional Logging for the above mentioned items.


  • CompatScan TS Change
    • Changed Behavior to Skip running the TS the machine was already on 1809. (Adding Group w/ Condition)
    • Changed Steps that called powershell.exe to use full path.
    • Added Steps to Cleanup Registry Keys that MIGHT have been created on Previous runs
    • Added section for Logging on Failure
    • Added SetupDiag on Failure (Embedded PS Script)
    • Changed Reporting Script (Process CompatScan Results) into an embedded Script
    • Changed “Copy Logs to Server” Script to be embedded and modifed Script.
  • Upgrade TS Change
    • Changed Steps that called powershell.exe to use full path.
    • Added section for Logging on Failure
    • Added SetupDiag Always Runs (Embedded PS Script)
    • Changed “Copy Logs to Server” Script to be embedded and modifed Script.
Image of Setup Diag Running post upgrade and capturing data to registry
It still works! And since everything is dynamic, the messages all updated automatically for 1909, only have to change the initial SMSTS_Build variable.
Same Keys created for reporting… expect some changes over the next few months to this as we add more things.
Added SetupDiag results, so now each upgrade you’ll have the setupdiag detailed information for each upgrade, I plan to leverage this information more in the future.

Ok, hope this helps and you find it useful. Please continue to provide feedback.

Quick Update: LEGAL TEXT – Places to update the legal text:

  • TS: LegalText
    • Group: If on Old Build (Failed)
      • Step “Set Legal Notice on Logon to Upgrade Complete”
      • Step “Set Legal Notice on Logon to Default”
  • Files:
    • Scripts and Tools Package
      • Folder: “LegalNoticePostUpgrade”
        • File: SetLegalNoticeText-Default.ps1
        • File: SetLegalNoticeText-OSUpgradeComplete.ps1
      • Folder: OSUninsall
        • File: LegalNotice-OSUninstallDefault.ps1
        • File: LegalNotice-OSUninstallSuccessful.ps1
      • Folder: RecoveryRollback
        • File: LegalNotice-RollBackRecovery.ps1
        • File: LegalNotice-RollBackRecoveryDefault.ps1


42 thoughts on “WaaS TS Download”

  1. First, thanks for the update. This is incredible work and even outside the actual product, the processes and strategies are very enlightening.
    So, color me crazy…there is a new package and reference, OSD Library, but there is not content in the zip for that package. I tried to go through all the pages prior to posting to see if anyone else had run into this with no luck. Is there a separate download for this content?

    • Thanks for catching that. OSD Library is a separate module I’m working on, mostly for demos and blogging of how to dynamically do different settings. I forgot that was referenced. You can feel free to remove those referenced steps in the TS, and I’ll remove it from the export in future uploads.

  2. First, thanks for all your contributions! Quick question, there are packages in the zip and also the packages inside the TS export. With the duplicates, are the versions the same? Should one use the ones imported from the TS’s or overwrite with those from the Packages folder?


    • When I export TS, I only export references, because I don’t want to export the upgrade media and other items. I only then export a few packages that you really need. Honestly, if you already imported the package references with the TS, I’d just crack open the packages and copy the content to your source. no need to re-import the packages.

  3. Gary, you have been such a fantastic source of information as we continually work to improve our SCCM infrastructure. We are a two-person team, 4000 workstations, 6 servers (MP, DP, etc.). No third party plugins. We did the Win10 upgrade compatibility checks in large part by hand. That, along with so many other unnecessarily redundant tasks, have been added to SCCM.

    Happy Holidays to you and yours. Looking forward to more adventures in 2020!

  4. Great work Gary and thank you for helping unravel some of the complexities of upgrading Windows 10!
    Is there any way to keep the previous 1809 TS’s and Packages intact when importing 1909? It seems that 1909 is replacing the existing 1809 TS’s and I wanted to keep the set for both versions. Thanks.

    • At the moment, you’d have to create copies of the ones you want to keep, so they are recreated with new IDs. Then delete the original.
      This will create a lot of work having to relink sub task sequences, but then you can import the new set.

    • The only 3 you need to deploy are:

      Rest of the Task Sequences are sub-task sequences which get called.

      • Sounds good, then I did the right thing. Thank You for the confirmation and quick reply 🙂

        Another question: I am using the Toast Notification posted in your blog, which calls the PSADT APP and the APP calls the Task Sequence. Any known issues with this method? I am currently doing some testings to ensure the method I have mentioned is working.

  5. In my SetupDiag app, it references a source location of \\src\src$\Apps\Micrsoft\SetupDiag\1.5 …I looked through the download 1909 zip file and can’t find this anywhere. Is this something I need to download/distribute separately from your package, or should it have been included upon import?

      • Hi Gary! Curious as to why you have SetupDiag setup as an Application when all the installer is doing is an XCOPY to C:\ProgramData\WaaS\? I assume it has something to do with version check, but thought I’d ask.

        • It was just easy to create an application, then I could blast it out to machines as well. I do like the detection methods to easily replace it with updated versions as new ones come out. Personal preference more than anything.

  6. One question about Create Scheduled Task SetLegalNoticeText-OSUpgrade step. It says in the description that it should self delete after being run. But for me it does not happen. What actually controls the deletion of the task ?

    • There is another scheduled task that gets created that will set the Legal Text back to default. Look in the package location: OSD TS Scripts & Tools\LegalNoticePostUpgrade
      SetLegalNoticeText-Default.ps1 is called by another task to reset things, then it cleans up the other tasks.

  7. Gary, I’m having an issue with the RollbackRecovery.ps1 script. Some piece of this script is running 10 mins after a successful upgrade. The result is if the task sequence is still busy (example: installing applications post upgrade), the task sequence just stops – no error. The system context is logged out and the PC is returned to the login prompt. I can consistently repeat this if I put a 12 min timer as a task after the upgrade.

    The RollbackRecovery.log has the following only:
    —-Starting RollbackRecovery.ps1 Script—
    Waiting 10 minutes to make sure Client becomes active before triggering

    I’ve reviewed the RollbackRecovery.ps1 script to try to determine why this is happening. I see there are two 10 mins timers. The only thing I can see that may be an issue is the following at line 600. It occurs right before the “Waiting 10 minutes…” is logged. And is before the second 10 min timer starts.

    if((Get-WmiObject win32_computersystem).username -eq $null) {Stop-Process -Name winlogon -Force -Verbose}

    Anyone else having this issue? I will try to comment this line out next to see if it helps.

    • I removed line 559 and line 600 from the RollbackRecovery.ps1, which are related to removing the lock screen image. I am no longer having the issue.

      • Thank you for this. I noticed it because I’d come across test systems that were sitting at the “Upgrade Successful” lock screen, but when I’d reboot them the task sequence would resume at the “Upload Inventory” step. We run a good number of steps after the upgrade is complete and I think sometimes they were running long, which led to the RollbackRecovery script getting to line 600 and killing Winlogon, thus killing the task sequence. At least, that’s what it seems like. Would have taken me forever to find on my own.

      • I’ve updated the Scripts and re-uploaded the WaaS download today. Thanks for letting me know this can be an issue.
        I Remarked the Line that has : Stop-Process -Name winlogon -Force -Verbose

  8. Issues importing the task sequence, any other reports of this? Running version 2002.
    Tested downloading and importing on of your older task sequences and didn’t have any issues importing.


  9. Hi Gary

    I can find the source for Windows 10 SetupDiag application in the latest download. Could you please upload a copy thanks.

  10. In testing on the awesome WaaS IPU with 1909 – This may seem trivial but during the IPU, the red background is blurred so the text is unreadable. Can ‘transparency’ be disabled during the TS so users can see the text. I’m sure they would just log in anyway and mess up the process… thanks

  11. Is there any logistical reason you have all the scripts embedded into the task sequence via Run Powershell tasks… You are obviously providing your process for the benefit of others, which is greatly appreciated so dont get me wrong, but it adds complexity where someone could just update a package containing all the scripts while maintaining the base tasksequence… When you export the task sequence now, they have to reimport the entire task sequence to reap the benefits of updates to those task scripts.. Just a thought… Unless I am missing a reason, re. back to my original question. Thanks…

    • Embedded because when I make a change, I don’t have to bump content, I can make a change wait for the policy update and test. In my environment, bumping content can take weeks between change requests, or even in just testing without formal change requests, waiting for a minor package change to go from the CAS to the several primaries, and have the DPs update.. it’s like a 20 minute wait to test a change, vs a minute with embedded script.

      Totally get your point, very valid, but as I’m developing, it’s just easier to embed what I can.

    • Hit me up on Twitter (@gwblok), and I can try to hook you up…
      But you’d probably be better off grabbing the most current one, try running it, and seeing what breaks.
      Then replace the step / variable with the older stuff.

      Or will it not even let you import?

  12. Hi,
    I have an issue on my environment.
    After an upgarde fom 1809 to 1909 or to 2004 or to 20H2, the TS stop after restart (after upgrade OS). When I check the PC,the OS is upgraded but the service SMS Agent host is already disabled SCCM version is 2006.
    Do you have an idea please?

  13. In the new Legal text setup (20201126) there is line in the code of the
    “Detect Current LegalText” Step that needs changed

    Where legal Text Found, its write output says false instead of true.
    Write-Output “Setting LegalText_DefaultIsEnabled to FALSE”
    $tsenv.value(‘LegalText_DefaultIsEnabled’) = “TRUE”

    • Thanks for that, nice catch. The Variable is still correct, so the TS will still function properly, but if you’re reading the logs, it could be confusing. 🙂 I’ve updated my lab, so the next time I do an export, it will be included. Until then, hopefully others see your comment if they get confused.

  14. Importing the task into our lab it worked without issue originally. Unfortunately we didn’t import it to our prod MEM until after the 2103 update and looks like something isn’t allowing it to import. All sub-task sequences import, most packages, but the precache and IPU tasks fail with a generic error (object not set of reference).

    Rolled lab back to 2010 and import/export works fine, unfortunately we can’t do this to prod. Anyone able to reproduce, I’ve had this happen even in the home lab so far.

  15. Hi Garry,

    I’ve tried to run the Splash Screen TS only, on Win 10 1909 to test it (just added additionally as first step – set SplashTheme variable to Upgrade) and it doesn’t show the splash screen, even if I see in the logs “Deployment Screen” step does run successfully . The old version is working for a few seconds only (as you mentioned it above). What would be the troubleshooting steps I can follow? Really need to make it working, the preview version did help me a lot. Much appreciate your effort.

    • Are you still having the problem with the latest WaaS Download? There was a bug over a year ago that broke it on 1909, but it was corrected.

    • I haven’t had any time, and my current role doesn’t touch this area anymore. I would have liked to have developed it more for Windows 11, just don’t have time.


Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.