One of the common issues I’ve continuously come across while preparing Windows 10 and Windows 2016 above operating systems for virtual desktops or remote desktop services is when sysprep fails due to an installed application linked to a user account. I ran encountered this issue again last month with the application Notepad++ when preparing a Windows 11 Enterprise Multi-Session virtual machine for an Azure Virtual Desktop deployment. There are plenty of different PowerShell cmdlets that can be run in an attempt to fix the issue, but I find some of them result with rendering the virtual machine in a state that I would no longer be confident in deploying so I wanted to some of the steps I use for personal reference and to help anyone who may encounter a similar issue.
Problem
You attempt to run sysprep after finishing the preparation of a master image:
Sysprep immediately fails with the error:
Sysprep was not able to validate your Windows installation.
Review the log file at
%WINDIR%\System32\Sysprep\Panther\setupact.log for
details. After resolving the issue, use Sysprep to validate your installation again.
Opening the setupact.log will reveal the following line:
Error SYSPRP Package NotepadPlusPlus_1.0.0.0_neutral__7njy0v32s6xk6 was installed for a user, but not provisioned for all users. This package will not function properly in the sysprep image.
Opening the setuperr.log will reveal the following lines:
2023-05-05 07:20:10, Error SYSPRP BCD: BiUpdateEfiEntry failed c000000d
2023-05-05 07:20:10, Error SYSPRP BCD: BiExportBcdObjects failed c000000d
2023-05-05 07:20:10, Error SYSPRP BCD: BiExportStoreAlterationsToEfi failed c000000d
2023-05-05 07:20:10, Error SYSPRP BCD: Failed to export alterations to firmware. Status: c000000d
2023-07-07 19:51:46, Error SYSPRP Package NotepadPlusPlus_1.0.0.0_neutral__7njy0v32s6xk6 was installed for a user, but not provisioned for all users. This package will not function properly in the sysprep image.
2023-07-07 19:51:46, Error SYSPRP Failed to remove apps for the current user: 0x80073cf2.
2023-07-07 19:51:46, Error SYSPRP Exit code of RemoveAllApps thread was 0x3cf2.
2023-07-07 19:51:46, Error SYSPRP ActionPlatform::LaunchModule: Failure occurred while executing 'SysprepGeneralizeValidate' from C:\Windows\System32\AppxSysprep.dll; dwRet = 0x3cf2
2023-07-07 19:51:46, Error SYSPRP SysprepSession::Validate: Error in validating actions from C:\Windows\System32\Sysprep\ActionFiles\Generalize.xml; dwRet = 0x3cf2
2023-07-07 19:51:46, Error SYSPRP RunPlatformActions:Failed while validating Sysprep session actions; dwRet = 0x3cf2
2023-07-07 19:51:46, Error [0x0f0070] SYSPRP RunDlls:An error occurred while running registry sysprep DLLs, halting sysprep execution. dwRet = 0x3cf2
2023-07-07 19:51:46, Error [0x0f00d8] SYSPRP WinMain:Hit failure while pre-validate sysprep generalize internal providers; hr = 0x80073cf2
Proceeding to uninstall Notepad++ from the image will allow sysprep to run and complete successfully but this means the deployed virtual desktops would need the application installed manually.
Solution
The first step to take for resolving this issue is to restore the virtual machine from a snapshot that had not failed on a sysprep because the sysprep process removes packages from the operating system and there will be times when:
- After fixing the Notepad++ application, sysprep would fail and error out on other native Microsoft applications
- You would notice that Notepad is no longer available on the virtual machine
- Other odd errors would occur
It is better to troubleshoot and perform sysprep on a machine that has no experienced a half executed but failed sysprep.
Once a fresh snapshot is restored, we can now work on determining which accounts Notepad++ is linked to. This can reviewed by starting PowerShell and executing the following cmdlet:
Get-AppxPackage -AllUser | Format-List -Property PackageFullName,PackageUserInformation
The cmdlet above will list all packages installed and this example coincidentally places the Notepad++ package at the end of the output:
If the package in question starts with a letter earlier than M (for Microsoft) and results in being nested within the long output, we can use the following cmdlet to filter the PackageFullName to what is being searched for:
Get-AppxPackage -AllUser | Where-Object {$_.PackageFullName -like "NotepadPlusPlus*"} | Format-List -Property PackageFullName,PackageUserInformation
With the package located identify which accounts are listed to have the application installed. The screenshot above only lists one account but if there are more, the easiest approach is to delete all the accounts and their profiles. If there is only one account listed and it is the built-in administrator account, you won’t be able to delete it because the following error will be displayed when you try to do so:
The following error occurred while attempting to delete the user admin:
Cannot perform this operation on built-in accounts.
To get around this, log in as the account with Notepad++ install linked to, launch PowerShell and execute the following cmdlet:
Remove-AppxPackage -Package <packagefullname>
The following is the cmdlet that is used to remove Notepad++ from the account:
Remove-AppxPackage -Package NotepadPlusPlus_1.0.0.0_neutral__7njy0v32s6xk6
You should no longer find the Notepad++ when executing the following cmdlet:
Get-AppxPackage -AllUser | Where-Object {$_.PackageFullName -like "NotepadPlusPlus*"} | Format-List -Property PackageFullName,PackageUserInformation
Running sysprep should now complete so the virtual machine can be captured to an image for session host deployments.
4 comments:
So you mean .we wouldn't be able to use notepad++ also. Please respond ASAP. We're building an image and we struck at this error
This is the correct fix, thank you!
This is the correct fix, thank you!
This article is a gem! I appreciate the detailed research you put into it. It’s refreshing to see such thoroughness!
Post a Comment