Update 2019.12.02 – Minor updates to the TS and Scripts. Variables changed for 1909 and confirmed fine. – Check out more info HERE
OK, because I don’t have time to explain everything right now, but I know some people are eager to play with what they saw at MMS… here is the download.
For Documentation & Requirements, please continue to monitor the “WaaS” Page which I will continue to update with links as I blog each module.
19 Task Sequences, Several packages and a baseline.. it’s here…
WaaS TS Collection 2021.09.08 (53654 downloads )I’ll be slowly posting information about this, which a deeper dive about the task sequences and how they work.
What’s included: These TSs & Required Content (Minus the Upgrade Media)
- Pre-Cache Compat Scan TS: This is the TS that you’d run first to get the content downloaded, and pull back information about the Compatibility Scan.
- In Place Upgrade TS: This TS runs the actual Upgrade. It also adds several nested TSs to do various tasks, including setup Rollback & OS Uninstall protections.
- OS Uninstall TS: This TS allows you to go back to previous version of Windows 10. It requires that you have done pre-work in the down level OS to make this work, which is already built into the OS Upgrade TS I’m supplying.. Blog: WaaS IPU – OSUninstall Module
- DeBug Mode TS: This is used for troubleshooting your Task Sequences… Blog: Building a Better Debug Task Sequence
- Pre-Assessment & PreFlight Baseline & CIs… Blog: WaaS PreAssessment & PreFlight using Config Items
Major Changes from the last WaaS Task sequences I’ve posted
- No longer using “SetOSDInfo” Script, now just writing information to the registry along the way, which then gets grabbed by hardware inventory. I’ll try to blog this as well eventually.
- Heavy use of Sub Task Sequences
- Rollback Recovery / OS Uninstall
- Splash Screen and other End User Experience enhancements.
- Baseline Cab to import (Required for the PreFlight)
- PRE-REQS: CM 1902 Client on Machine running IPU
Update 2019.05.30 – Changes to the Download due to Export Automation Process.
When you download the ZIP File, you’ll extract it and you’ll see the contents like so:
Then you’ll drill down to get each TS you want to import:
Same for Packages. The Packages are now separate and contain the content needed. Task Sequences are exported with no Content. (because who wants to download the 4GB Upgrade package, right?)
Ok, I’m sure you’ll have a lot of questions.. however I’ll try to answer them when I get time. I’ll be slowly working on detailed information to blog about the process and task sequences, just might be awhile.
For more info, look at the ReadMe.txt inside of the Zip File.
YouTube Demo Videos:
- PreFlight Failure of Execution Rule (Low Disk Space)
https://youtu.be/dnetAf0VLmA
Time: 7:23 - PreFlight Failure of “Internal Hard Blocker”, then Retry and Full Upgrade Process
https://youtu.be/IpYqcGhwr-k
Time: 1:24:05 - OS Uninstall Process
https://youtu.be/hM_CsKUiZVQ
Time: 17:32
OverView:
So, now that all makes sense. Here is a list of the Nested Task Sequences called during the upgrade process.
- Splash Screen – Blogged: Windows Splash Screen for the Task Sequence Progress
- PreFlights. – Blogged: WaaS PreAssessment & PreFlight using Config Items
- Execution and Internal Hard Blocker check
- CleanUp – Blogged: Clean Up Storage Pre Upgrade
- Triggered if less than 20GB free then runs random tasks to free up space
- Lock Screen Pre: Windows 10 Lock Screen
- Recovery Rollback Pre: WaaS IPU – Rollback Recovery Module
- OS Uninstall Pre: WaaS IPU – OSUninstall Module
- Driver Variables: WaaS IPU – Rollback Recovery Module
- Download Driver Package
- Pre Upgrade
- Post Upgrade
- Post Upgrade Build #
- Win 10 Customizations
- Lots of tweaks and mods to brand your machine
- Lock Screen Post
- OS Uninstall Post
- Recovery Rollback Post
- Legal Text
So that’s a VERY HIGH Level of the WaaS IPU Task Sequence and all the Nested Task Sequences called during the process.
How hard to get setup and running:
Posted on GARYTOWN.COM
Sweet, thank you! Looking forward to testing and implementing this!! 🙂
This is an *INCREDIBLE* set of powerful TS/imaging templates. Thank you for sharing these. They have been immensely helpful!
Wheeeeee!!! I’ve been looking forward to this Gary. I don’t get to go to MMS but I try to follow along as much as possible. 🙂
Good Stuff, I love it….
For the PostUpgrade 1809, do you have specific fixes for 1803? Just curious since that’s what we are going to right now.
Sorry, I haven’t done any testing at all with 1803. Pretty sure the ones I’ve got for 1809 will be need for 1803 as well, if you’re coming from 1709.
Is anyone else having issues importing this task sequence? I keep getting a ‘Failed to validate property PackageID.’ I think it has to do with the ‘OSD Module Windows 10 Driver Variables’ but I am not sure. Everything prior to the TS package imports successfully. Currently on CM1806.
You need CM1902.
Thanks Gary this is great!
One thing I seem to have stumbled upon is since you have the “Free Disk Space Check” step in the PreFlights Module your “Storage Cleanup” Module will never actually run…since the users are asked to cleanup the drive before the TS has a chance to clean anything up.
I moved the “OSD Module for W10 IUP – CleanUp” to be right before the “OSD Module for W10 IPU – PreFlights” step.
Please let me know if there is any reason I *shouldn’t* do that…or if im missing something!
Thanks again, and great job!
I’ll look closer at this again soon. I know I had some logic associated with it, but I need to take another look an evaluate if it was purposeful, an oversight, or was planning on revisiting when I had time.
I’ve updated the TS today (Available for Download Now) to resolve that oversight, and include minor “repairs” if the TS had previous failures. Thanks for reminding me to loop back around to this.
Thanks! Trying to avoid having to re-download…i’ve already “personalized” a good chunk of this…do you keep a detailed changelog anywhere?
The Change Log is in the download itself. There is also a summary on the WaaS page.
Go ahead and download and look through the logs / readme files in the zip file.
Link to download TS above doesn’t seem to work. Is there another location?
Try Now, I was testing out a different WordPress Download Manager today, looks like it conflicted with the original one.
Hey Gary,
Thanks so much for all this content, incredibly informative and inspiring to do better things! I’ve downloaded to have a play and one thing i noticed was when running the pre-cache compat scan TS, if there’s less than 20 GB free the TS just bombed out and i had to look through the SMSTS.log. The “Failure – Capture Failed Step Variables” set’s FailedStepName to %_SMSTSLastActionName% so i had expected “Check Readiness” to appear as the registry value, but it literally just stated %_SMSTSLastActionName% so i ended up just looking through the SMSTS.log. Is that meant to be the case?
Cheers!
Matt, as we discussed via Email, it was not having the 1902 Client on the Machine. Just Leaving the Comment in case someone else sees similar behavior, reminder to check client version.
Is it primarily the ‘Run PowerShell Script’ tasks that have a script entered directly on the task that require 1902 or are there other tasks/scripts that require 1902 as well? I have a client that is very interested in using this solution but they’re still on 1810 (recent upgrade in a CAS environment) at the moment. I thought about attempting to get it working with 1810, but I wasn’t sure if it was worth my time. Thanks for the awesome work!
No, the steps that rely on 1902, besides run powershell, is the steps for creating the error notification. 1902 clients require different input from 1810. It’s a simple change. Check out Adam Gross website, building a better task sequence, he explains the changes there.
Hi, Did you ever get it working? I’m in the same boat and I don’t know if we will be upgrading to 1902 anytime soon.
I’ll also add that I realize the Configuration Baseline is looking for the 1902 client. So I didn’t know if I could just remove that CI from the baseline and modify the PowerShell tasks for now.
I was getting a invalid package error while trying to deploy the 1809 upgrade task sequence. I had all the child TSs deployed as well as all the content. It turned out that even though the child TSs were deployed and the Id’s were correct to my site ,I still needed to reset them all by manually selecting them in the task editor. Once I did that it deployed with no issue.
Hey Gary,
Great fun working through the wealth of stuff you have in here. I’ve started to have a look at your Pre-Flight checks, as one of things I like is the “soft blocker” to prompt Laptop users to plug into AC power and restart the TS. This works fine, but it doesn’t restart the awesome Splash Screen and instead takes you back to the “traditional” TS dialogue which i’d like to avoid. Is that a known issue??
Also, the Splash screen would only show “Hi Team Member” for me so if anyone wants to use the logged on users name then you can replace the following (found in the “Create-FullScreenBackground-Variable.ps1” and “Create-FullScreenBackground.ps1″ scripts;
{
$PrincipalContext = [System.DirectoryServices.AccountManagement.PrincipalContext]::new([System.DirectoryServices.AccountManagement.ContextType]::Domain, [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain())
$GivenName = ([System.DirectoryServices.AccountManagement.Principal]::FindByIdentity($PrincipalContext,[System.DirectoryServices.AccountManagement.IdentityType]::SamAccountName,[Environment]::UserName)).GivenName
$PrincipalContext.Dispose()
}
#### with this;
{
#Get logged on User
$Loggedon = Get-WmiObject -ComputerName $env:COMPUTERNAME -Class Win32_Computersystem | Select-Object UserName
#Split User and Domain
$Domain,$User = $Loggedon.Username.split(‘\’,2)
#Write-Host $Domain
#Write-Host $User
#Look up SamAccountName using LDAP query
$search = [adsisearcher]”(&(ObjectCategory=Person)(ObjectClass=User)(samaccountname=$user))”
$users = $search.FindAll()
foreach($user in $users) {
$GivenName = $user.Properties[‘DisplayName’]
}
}
Cheers!
Matt
Hey Matt, I also noticed that and made a change in my prod, but haven’t updated my lab with that change yet. Thanks for the note. Thanks for posting the code too. I kept ours more “generic”. People can get upset about seeing their name flash full size on the screen like that. I’ve heard it all… so we keep it generic.
I just the 2 Splash Screen steps (Set Deployment Screen and OSD Module – Splash Screen) right after the PreFlights TS step. I named it “Splash Screen After Retry” and set a task sequence variable “PreFlightRetry equals “True” This forces the splash screen OSD Module to run again, but only if there was a preflightretry.
The reason it only shows “Hi Team Member” is because the script was looking at AD for the name of the account and since in the TS its running as system it defaults to the local value set in the script instead of whatever AD gives it.
After thinking about it and showing it to one of my PMs, we felt more comfortable with a “generic” hello…there seems to still be some worry about AI knowing all too much about you or something…lol
Is there a tiny bit of work for this to operate with win10-1903?
Yes, you’d have to swap out the Variables that say 1809, and then do your testing. It should work fine though. I have done no testing with 1903, but will probably a lot with 1909 once that is released this fall.
Suggestion for the “Delete OneDrive Link in Start menu” step in the Win10 Customizations TS:
In your powershell command, it was only deleting the icon of the last profile in the users folder. We have a lot of machines with several user profiles, So I changed that step to run the following script so it deletes the onedrive link for all user profiles:
$paths = Get-ChildItem -Directory -Force c:\users | Select-Object $_.Name
ForEach ($path in $paths) {
$File = “C:\users\$path\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk”
If (Test-Path $file )
{
Remove-Item -Path $file -Force -Verbose -ErrorAction SilentlyContinue
}
}
Can we use this for Production as is and remove what we do not need
is there anything proprietary that you or your organization use in these which we should be aware of before importing or using it in production environment
You can, highly recommend you run a lot of tests first. You probably don’t need everything, and you’ll have to replace quite a bit of references to “GARYTOWN”. I don’t have a completely list, I just say” Make sure you read through the scripts and don’t trust what you download on the internet”.
Gary,
This is an incredible resource you’ve put together. Even for those of us who don’t want to implement it specifically, it provides snippets & guidance to tackling WaaS in OSD.
Bless you for providing this for free. You’re awesome.
This might be a silly question but it should hopefully be easy to answer.
Is this OK to run when coming from Windows 7 to get to Windows 10 1809?
Yes, but you’ll need to make some modifications to the Pre-Assessment Rules which block anything from upgrading that isn’t already on Windows 10. But yes, this should work fine, just do a bunch of testing.
Hi Gary,
Assuming the answer is yes, but will this IPU work with clients running 1906 as well? Have you tested that at all?
Yes
Great workGary! I am in the process of testing with Windows 10 (works great) and now Windows 7 (will let you know). Has anyone created any reports that pick-up the registry keys?
just a heads up – discovered the hard way that you need powershell 5.1 on the clients for this to work!
Hi Gary, my Windows 7 testing had some issues that were a show stopper for me. Some of the Pre-flight powershell scripts are using ps5, so they will not work on a Windows 7 client. I am not sure that the logic being used can be modified for .net 4.5. I am looking for a different solution for our Windows 7 upgrades, most of these systems are being replaced anyway so it is not a problem for us. Still hoping that someone has reports for the registry keys that are being created. Thanks for sharing this great method, I am sure we will be using it for some time to come.
I’m having an issue when the preflight script runs:
Exception calling “ParseExact” with “3” argument(s): “String was not recognized as a valid DateTime.” &
At xxx\PreFlight-WaaSBaseline.ps1:76 char:1
i’m suspecting because the output of the line 71 is empty, is there a workaround?
Hey Gary, thanks for the amazing work. Is the OSD Library package missing? I had to disable that group in the win10 customization Child TS. Looks like this is for some Kiosk or something. not sure.
Thanks Again,
Alan
Yes, it’s missing, but I should have removed it before exporting, just didn’t notice. Its for something completely different that I was playing around with for Recast Software. Just delete those steps.
Many of the steps in the customization module are for OSD only and won’t make sense in the context of IPU.
Hello, Gary,
Things went smooth with Pre-Cache, but I got hit with this error on the Upgrade.
Upon digging:
.. cmcache\1w’
Command line for extension .exe is “%1” %*
Set command line: Run command line
Working dir ‘C:\WINDOWS\ccmcache\1w’
Executing command line: Run command line with options (0, 4)
Process completed with exit code 4294967295
=======================
Matched Processes
=======================
Process Not Found: [TSProgressUI.exe]
=======================
Exiting with [-1]
=======================
Command line is being logged (‘OSDDoNotLogCommand’ is not set to ‘True’)
Command line “C:\WINDOWS\ccmcache\1w\ServiceUI.exe” -process:TSProgressUI.exe C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File Show-OSUpgradeBackground-Variable.ps1 returned 4294967295
ReleaseSource() for C:\WINDOWS\ccmcache\1w.
reference count 1 for the source C:\WINDOWS\ccmcache\1w before releasing
Released the resolved source C:\WINDOWS\ccmcache\1w
The query of WMI: select __relpath from win32_process where caption = ‘explorer.exe’
give me correct result.
What am I missing? The package is distributed correctly. Cache file confirmed on the client. TS Notification is not Suppressed.
Using parts of your TS and its really awesome!
What are your thoughts about pending reboots prior to the task sequence running? By pending reboots, I mean component based servicing, pending windows updates, or pending file name operations.
As of right now, I’m preventing the task sequence from running until all conditions are met – using Onevinn’s TSLaunch. We’re not prompting users to schedule the upgrade unless they don’t have pending reboots but that’s turning out to be a poor choice.
Pending Reboot… We currently only record that there is a pending reboot, we have not prevented upgrades if it was pending reboot. We discussed having the TS check for Pending Reboot (which is already does) but then reboot the machine instead of just record the pending reboot. We landed on just ignoring pending reboot, as we haven’t confirmed it actually being an issue.
Good to know it hasn’t been an issue for your deployments.
I ended up settling on rebooting prior to the upgrade if pending reboots are detected. I don’t have evidence that this is actually necessary, but I figured it couldn’t hurt.
Would you expect either the “OSUpgrade” or the “PreCache” options to work for a machine that’s talking to our CMG?
Our clients are able to receive policies from our MP to talk to the CMG either when outside the network or on VPN. The Web Service is installed on our MP, and all driver packages have been distributed to the CMG. I’ve tried re-distributing one of the drivers I’m testing from home, but keep coming across this error in the ApplyDriverPackage.log:
– Driver package content download process returned an unhandled exit code: -2147221246
Though I’m able to make a connection to the webservice, and it successfully queries all models before coming across the right idenentity. It then attempts to download it, and we’re greeted with this:
– Attempting to download content files for matched driver package: Drivers – Dell Latitude 5401 – Windows 10 x64
– Setting task sequence variable OSDDownloadDownloadPackages to: 00268
– Setting task sequence variable OSDDownloadDestinationLocationType to: Custom ApplyDriverPackage
– Setting task sequence variable OSDDownloadDestinationVariable to: OSDDriverPackage
– Setting task sequence variable OSDDownloadDestinationPath to: %_SMSTSMDataPath%\DriverPackage
– Starting package content download process (FullOS), this might take some time
– Driver package content download process returned an unhandled exit code: -2147221246
– [ApplyDriverPackage]: Apply Driver Package process failed, please refer to previous error or warning messages
We’re experiencing similar things and I’ve seen a few posts that PreCache does not seem to work through the CMG the way we’re doing it.
I haven’t done any testing over CMG, maybe in the future I’ll get around to it. Once I do, I’ll update the post with additional info for CMG.