;)

Cloud adoption is on the rise as businesses today face market and supply chain disruptions unlike any they’ve faced in the past and turn to the cloud for the scale, flexibility, and security they need to keep up.
Quisitive will…
We meet you where you are on your cloud journey. Even on-premises workloads can benefit by extending capabilities using Azure services.
With the Azure Hybrid Benefit, you can use an existing Windows Server or SQL Server license to save on virtual machines in Azure SQL Servers.
Contact us to learn more about cost savings opportunities when you migrate Windows and SQL Servers to Azure.
Your ideal cloud infrastructure should earn your trust with resilience, scalability, and cost efficiency. Migrate SQL Servers to Azure SQL servers or migrate Windows Servers to Azure to realize the benefits of the cloud.
Receive up to 478% 3-Year ROI when you migrate from Windows and SQL Servers to Azure.
Accelerate the modernization of your infrastructure and applications with the power of cloud computing on Azure’s scalable and resilient platform.
Use a combination of cloud and on-premises services where needed to maximize agility and value.
Take advantage of multi-layered security across physical data centers, infrastructure, and operations, as well as Disaster Recovery.
About Quisitive
Quisitive is a premier, global Microsoft Partner that harnesses the Microsoft cloud platform and complementary technologies, including custom solutions and first-party offerings, to generate transformational impact for enterprise customers. Quisitive has consistently been recognized as a leading Microsoft Partner with 16 Specializations and all 6 Solution Partner Designations. Quisitive’s Microsoft awards include the 2023 US Partner of the Year Winner for Health and Life Sciences, 2023 US Partner of the Year Winner for Solutions Assessment and 2023 US Partner of the Year Finalist for the Industrial and Manufacturing vertical.


When Microsoft made the Upgrade Readiness solution freely available to anyone back in the Spring of 2017 it was a major step forward in the monumental task of upgrading Windows 7 and Windows 8.1 computers to Windows 10 and keeping up with Windows 10 Feature Updates. The solution made compatibility assessment 10 times easier.
Enter January 2020 and the free Upgrade Readiness is gone, replaced by the Desktop Analytics that’s only available with Microsoft Endpoint Configuration Manager. There’s noting wrong with Desktop Analytics, but if you happen to be in a situation where you can’t use it then your compatibility assessment just got harder.
The best workaround it to use the Windows Setup engine in Compatibility Scan mode, consolidate and analyze the results. This isn’t new, but MVP Rob Marshal posted some updated guidance on the solution over at Win7 to Win10 IPU – With ConfigMgr but without Desktop Analytics.
This post is really about reminding you that if you know how things work in the back end you can reverse engineer them for your own benefit.
Who doesn’t get to use Desktop Analytics? Organizations that don’t have a recent version of ConfigMgr / SCCM / MEMCM / MECM deployed (v1902 or newer is required). You may be stuck on an old version or a non-Current Branch version/edition. You may not have ConfigMgr at all.
Remember, to use Windows Setup Compatibility Scan
- You can use any deployment method
- an old version of ConfigMgr
- a competitor to ConfigMgr like Altiris, LANDesk, etc.,
- A pseudo deployment tool like PowerShell remoting, remote WMI, GPO Startup/Shutdown Scripts, GPO created Scheduled Tasks, PSEXEC, etc… anything that can run an executable on a remote computer in admin context. ConfigMgr just wraps up the process into a nice GUI, but it runs setup.exe just like everyone else.
- When running Windows Setup Compatibility Scan, be very aware of the LAN/WAN/Internet traffic it will generate… you can saturate a network link pretty easy if you haven’t planned well
If you find yourself in this boat, I highly recommend reading though a few ConfigMgr blog posts about Windows Setup Compatibility Scan. They should give you everything you need to create a solution that works in your non-Micosoft Endpoint Management centric environment.
Here are some good articles to start with…
- Windows 10 Pre-Upgrade Validation using SETUP.EXE
- How the settings in ConfigMgr translate to the command line of the Windows 10 upgrade
- Specify additional command-line options to Setup during a Windows 10 upgrade
- Windows 10 Compatibility Check using SCCM and Report
- pay attention to the location of setup.exe… in this scenario we do NOT copy the 4GB+ install media content to the local computer, potentially saving many GB of network traffic
- IPU & Offline Dynamic Updates
- this article has good info on network traffic management
- Enabling Dynamic Updates and Servicing Drivers from Microsoft Update during a Windows 10 In-Place Upgrade Task Sequence in ConfigMgr
- more info on network traffic management
- Automatically Capture Hard Blocker
- Win7 to Win10 IPU – With ConfigMgr but without Desktop Analytics
Have fun scanning the castle!
I’ve recently been doing some testing between the different Windows 10 releases, and wanted to quick way to be able to install new VMs without maintaining a bunch of different VM templates, or using MDT. To do this I made a ISO image that installs the base Windows 10 image without any manual interaction required. This post will go over the steps you can use to make your own Windows 10 Zero-Touch ISO.
Prerequisites
Before you begin, you must have a Windows 10 ISO. If you don’t have one, you can use the Windows Media Creation Tool to create one from any licensed installation of Windows 10.
You will also need to install the Windows Assessment and Deployment Kit (ADK). When installing the ADK you only need to install the Deployment Tools feature.

Prep the ISO Files
Since we want this to be Zero-Touch, there are a few things you need to do to prevent the “Press any key to boot from CD or DVD” prompt.
- Extract the contents of your ISO. In the examples used below I extracted mine to E:Win10_ISO.
- Delete the file .bootbootfix.bin (This will prevent the prompt when booting using BIOS.)
- In the folder .efimicrosoftboot rename the following files (This will prevent the boot prompt on UEFI systems)
- bin –> efisys_prompt.bin
- bin –> efisys.bin
- The next step only applies if you used the Media Creation Tool. If you used and ISO image you can skip to the next section.
- In the folder .sources rename the file install.esd –> install.wim
Script It
$ISO = "E:Windows.iso" $FolderPath = "E:Win10_ISO" # Get current drive letters $drives = (Get-Volume).DriveLetter # Mount the ISO image $image = Mount-DiskImage -ImagePath $ISO -PassThru # Get the new drive letter $drive = (Get-Volume | ?{$drives -notcontains $_.DriveLetter -and $_.DriveLetter -ne $null}).DriveLetter # Create destination folder if it doesn't exist If (!(test-path $FolderPath)){ New-Item -type directory -Path $FolderPath} # Copy the ISO files Get-ChildItem -Path "$($drive):" | %{ Copy-Item -Path $_.FullName -Destination $FolderPath -recurse -Force} # dismount the ISO $image | Dismount-DiskImage # Delete the bootfix.bin Remove-Item (Join-Path $FolderPath "bootbootfix.bin") -Force # Rename the efisys files Rename-Item (Join-Path $FolderPath "efimicrosoftbootefisys.bin") "efisys_prompt.bin" Rename-Item (Join-Path $FolderPath "efimicrosoftbootefisys_noprompt.bin") "efisys.bin" # Rename install.esd to install.wim If (Test-Path $(Join-Path $FolderPath "sourceinstall.esd")){ Rename-Item $(Join-Path $FolderPath "sourceinstall.esd") "install.wim" }
Create Autounattend.xml
The Autounattend.xml is used to answer all the questions that you are asked during the installation process. I have uploaded a sample file to my Gist profile that you can download, to get started pretty quick and easily. This Autounattend.xml has been tested on version 1511, 1607, and 1709, using x64 architecture.
- Download the Autounattend.xml and open in your preferred text editor
- The DiskConfiguration section sets the partitions. This file will create a 100 MB EFI partition, a 4 GB recovery volume, and assign the rest of the disk space to the OS partition. You should not need to make any changes here.
- Update the sections SetupUILanguage, InputLocale, SystemLocale, UILanguage, and UserLocale to your required language and location.
- In the UserAccounts section you can set the password for the administrator account.
- Update the AutoLogon section with the same password as the UserAccounts
- Make note of the SkipMachineOOBE and SkipUserOOBE. These are set to true to allow you to bypass the initial setup screens after Windows is installed. These should only be used for testing purposes. If you are creating a production image be sure to remove these two sections.
- ComputerName is set to * to generate a random name.
- Update the RegisteredOwner and RegisteredOrganization to your organization.
- Place the xml in the top level of the folder you extracted the ISO to.
If you want to do any customization beyond what is covered above you can use the Windows System Image Manager that was included with the Windows ADK you installed earlier.
Script It
$FolderPath = "E:Win10_ISO" [string]$password = Read-Host -Prompt "Enter the admin password to use" [string]$ComputerName = Read-Host -Prompt "Enter the computer name use '*' to randomly generate it" [string]$RegisteredOwner = Read-Host -Prompt "Enter the Registered Owner" [string]$RegisteredOrganization = Read-Host -Prompt "Enter the Registered Organization" $AutounattendXML = $(Join-Path $FolderPath "Autounattend.xml") # Download the sample Autounattend.xml $Uri = "https://gist.githubusercontent.com/mdowst/e81cc0608a0c554d8c3381ebc7b6e15e/raw/dc55c6c1eef66fc0c4db0652ce8300e9ff507e0f/Autounattend.xml" Invoke-WebRequest -Uri $Uri -OutFile $AutounattendXML # load the Autounattend.xml [xml]$Autounattend = Get-Content $AutounattendXML # Update the values ($Autounattend.unattend.settings | ?{$_.pass -eq 'oobeSystem'}).component.AutoLogon.Password.Value = $password ($Autounattend.unattend.settings | ?{$_.pass -eq 'oobeSystem'}).component.UserAccounts.AdministratorPassword.Value = $password ($Autounattend.unattend.settings | ?{$_.pass -eq 'specialize'}).component.ComputerName = $ComputerName ($Autounattend.unattend.settings | ?{$_.pass -eq 'specialize'}).component.RegisteredOwner = $RegisteredOwner ($Autounattend.unattend.settings | ?{$_.pass -eq 'specialize'}).component.RegisteredOrganization = $RegisteredOrganization # Save the updated XML file $Autounattend.Save($AutounattendXML)
Create the ISO
- Go to Start > Windows Kits > Deployment and Imaging Tools Environment
- Run the command below to generate your ISO.
oscdimg.exe -m -o -u2 -udfver102 -bootdata:2#p0,e,bE:Win10_ISObootetfsboot.com#pEF,e,bE:Win10_ISOefimicrosoftbootefisys.bin E:Win10_ISO E:Win10Ent1607x64.iso
That’s it! Your ISO is now ready to use.
Script It!
# Create the ISO image $DevToolsDirectory = "C:Program Files (x86)Windows Kits10Assessment and Deployment KitDeployment Tools" $FolderPath = "E:Win10_ISO" $ISO = 'E:Win10_ISO.iso' $command = $(Join-Path $DevToolsDirectory 'amd64Oscdimgoscdimg.exe') $arguments = '-m','-o','-u2','-udfver102',"-bootdata:2#p0,e,b$(Join-Path $FolderPath 'bootetfsboot.com')#pEF,e,b$(Join-Path $FolderPath 'efimicrosoftbootefisys.bin')",$FolderPath,$ISO & $command $arguments
Bonus Script: Create Virtual Machine
The script below can be used to create a Hyper-V Virtual Machine, mount your newly created ISO, and starts the VM, so the Windows 10 installation begins.
# Create new VM and install OS $VM = 'blog01' $ISO = "E:Win10Entx64.iso" $Path = "E:Virtual Machines" $SwitchName = 'External NIC' New-VM –Name $VM –NewVHDPath (Join-Path $Path "$VM$VM.vhdx") -NewVHDSizeBytes 40GB -SwitchName $SwitchName -Path $Path -Generation 2 Set-VMMemory -VMName $VM -DynamicMemoryEnabled $true -MinimumBytes 512MB -MaximumBytes 2048MB -Buffer 20 -StartupBytes 1024MB Add-VMDvdDrive -VMName $VM -Path $ISO Set-VMFirmware -VMName $VM -BootOrder $(Get-VMDvdDrive -VMName $VM),$(Get-VMHardDiskDrive -VMName $VM) Start-VM $VM vmconnect localhost $VM
All script from this post can also be find on my Gist page.