How To On Deploying Windows 10 Anniversary Update
I've seen a post or two about deploying the 1607 anniversary update so I thought I'd share how I do it.
1. Create a bootable USB from the link below or use your own media
--- https://www.microsoft.com/en-us/software-download/windows10/.
2. Copy the contents of the USB or DVD to a network share your users have access to.
3. Use PDQ Deploy to Robocopy the installation files to a temp directory on the target
4. Use PDQ Deploy to run setup.exe (with the appropriate switches) on the targets
I use inventory to filter out the versions of Windows I want to target.
Here is the PDQ Deploy job I created for your reference.
<AdminArsenal.Export Code="PDQDeploy" Name="PDQ Deploy" Version="11.2.0.0" MinimumVersion="10.0">
<Package>
<PackageDefinition name="Definition">
<CopyMode>Default</CopyMode>
<InventoryScanProfileId value="null" />
<RunAs value="null" />
<ScanAfterDeployment value="null" />
<Steps type="list">
<CommandStep>
<Command>mkdir C:\DCMITFiles\logs
<Files></Files>
<SuccessCodes>0,1,3</SuccessCodes>
<RunAs value="null" />
<Conditions type="list">
<PackageStepCondition>
<Architecture>Both</Architecture>
<Version>Windows10</Version>
<TypeName>OperatingSystem</TypeName>
</PackageStepCondition>
<PackageStepCondition>
<IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
<TypeName>LoggedOnUser</TypeName>
</PackageStepCondition>
<PackageStepCondition>
<CompanyName></CompanyName>
<Description></Description>
<Directory>C:\DCMITFiles\TempInstallFiles\AnniversaryUpdate-1607</Directory>
<FileConditionMode>DoesNotExist</FileConditionMode>
<Filename>setup.exe</Filename>
<FileVersion></FileVersion>
<FileVersionCompare>NoMatch</FileVersionCompare>
<IncludeSubDirectories value="false" />
<MatchToAlternateVariable value="false" />
<ProductName></ProductName>
<ProductVersion></ProductVersion>
<ProductVersionCompare>NoMatch</ProductVersionCompare>
<TypeName>File</TypeName>
</PackageStepCondition>
</Conditions>
<ErrorMode>StopDeploymentFail</ErrorMode>
<IsEnabled value="true" />
<Title>Copy Install Files</Title>
<TypeName>Command</TypeName>
</CommandStep>
<CommandStep>
<Command>cd\
<Files></Files>
<SuccessCodes>0</SuccessCodes>
<RunAs value="null" />
<Conditions type="list">
<PackageStepCondition>
<Architecture>Both</Architecture>
<Version>All</Version>
<TypeName>OperatingSystem</TypeName>
</PackageStepCondition>
<PackageStepCondition>
<IsUserLoggedOn>NoLoggedOnUser</IsUserLoggedOn>
<TypeName>LoggedOnUser</TypeName>
</PackageStepCondition>
</Conditions>
<ErrorMode>StopDeploymentFail</ErrorMode>
<IsEnabled value="true" />
<Title>Install Anniversay Update</Title>
<TypeName>Command</TypeName>
</CommandStep>
</Steps>
<Timeout value="60" />
<UseCustomTimeout value="true" />
<RetryQueueSettings name="RetryQueueSettings">
<IsInherited value="false" />
<IsRetryEnabled value="false" />
<RetryMaxTries value="144" />
</RetryQueueSettings>
</PackageDefinition>
<Description></Description>
<FolderId value="1" />
<Name>Windows 10 Anniversary Update -1607</Name>
<Path>Packages\Windows 10 Anniversary Update -1607</Path>
<Version></Version>
<PackageDisplaySettings name="DisplaySettings">
<DisplayType>Normal</DisplayType>
<IconKey></IconKey>
<SortOrder value="170" />
</PackageDisplaySettings>
</Package>
</AdminArsenal.Export>
Comments
Thanks for this nice write-up. I've been struggling with how best to handle version upgrades to Win10 myself. I now have quite a number of machines that are on 1511 and earlier and no longer getting updates. WSUS doesn't provide enough control. This updates are so disruptive to end-users that I have to do them in the middle of the night. I think using PDQ and the approach you outline is better. I have tested this approach, and it does work. There are a few things I'm bumping into, though.
First of all, I found I have to uninstall Symantec Endpoint Security. Seems to interfere with the upgrade process, and I have a new version to deploy, anyway. Of course, there are a couple of reboots involved with the uninstall/reinstall.
I have to get the content to the machines. My organization has lots of small offices without local deployment points, and many people connect either over slow WAN links or VPN. I use a Robocopy script to separately seed the content to the machines. This worked well when I did the version upgrade from Office 365 2013 to 2016. I seeded the content to the machines first. My Robocopy script uses some switches to ensure the package trickles to the machines without consuming excessive bandwidth and bringing the WAN to its knees. I also use restartable mode so that the script can resume where it left off (even in the middle of a large file). The switches I use are: /E /ZB /r:1 /w:1 /IPG:200.
My only remaining problem is that while my setup.exe command line is very similar to yours, one thing I've noticed in my testing is that items the user pinned to the start menu seem to be lost, and the start menu is filled with the canned Microsoft modern apps. I think Windows Update/WSUS have preserved the items pinned and the general look and feel of Windows. Am I missing something? Is there a way to preserve the customizations to the user's Start Menu?