VMware Horizon Community
cbaptiste
Hot Shot
Hot Shot

Successfully Deployed Windows 10 1803

Has anyone successfully deployed 1803 linked clones in their environment. I have been having some serious login time issues and performance with 1803. Stuck on "Please wait for the user profile service." My expected logon time supposed to be 22-24 seconds using UEM when preparing the image but now in the middle of deployment I am getting 2 minutes logon time. I also have some RDS farms, Windows 2016, using the same UEM policies and they are login users in 15-20 seconds.

0 Kudos
19 Replies
ashsevenuk80
Enthusiast
Enthusiast

Hi cbaptiste,

I had very similar issues.

have you tried using VMware OS Optimization Tool ?

Also worth enabling "Vmware Horizon View Logon Monitor" the logs are stored in the user profile.

Regards

Arshad

Please mark this answer as 'helpful' or 'correct' if you think your question has been answered correctly.

0 Kudos
mchadwick19
Hot Shot
Hot Shot

Windows 10 SAC has become a crapshoot for VDI. We use 1803 and get roughly 1m30s to 2m using UEM and AppVolumes Writables (which I want to get rid of). I've optimized this image using vFeller's blog, Citrix tools, OSOT, and following VMware's standard for building an image, but it just seems to be the way Windows operates and it looks like it's primarily the "System" AppX packages causing it.

If you enable your AppReadiness logs you will probably see most of the time being consumed there. This is part of the shell load time that you would see in the logon monitor logs. It's atrocious. And you can't disable this service because then there's a good chance the start menu won't load.

I'm in the process now of building an LTSC image for the interim while we investigate building a custom wim that rips some of the crap out. It's tough to do since MSFT built in protections against this by building dependencies between the system AppX packages and core system components like .NET.

VDI Engineer VCP-DCV, VCP7-DTM, VCAP7-DTM Design
cbaptiste
Hot Shot
Hot Shot

I do have Logon Monitor enabled. I ran the Optimization tool for Windows 10 using the default template. I noticed some mentioned using the LogVSI to shave an additional 2-5 seconds. I was skeptical since it clearly stated to use it with great caution. I am pulling my hair here. I did everything using the VMware guide. I am going to look at mandatory profile again. I had it in Windows 7 and was hoping to ditch in for Windows 10. I can not think of anything else other than that.

I am also going to take a look at Instant clones as well. My RDS farm is using both instant clones and mandatory profile. I don't believe there are any configurations issues in UEM since the same policies are being used in both RDS and Windows 10.

0 Kudos
VDINinja311
Enthusiast
Enthusiast

We just recently migrated from 1703 to 1803 and we added a good 15+ seconds onto our login times of our non persistent desktops. My guess is Spectre/Meltdown patches that are built into 1803 is to blame.

Each version we have migrated 1511 > 1607 > 1703 > 1803 we have taken a hit on login times.

We are right now testing writable volumes and boy does that add a bunch of time to login as well. We are seeing another 10 seconds easily just adding that one volume in testing.

0 Kudos
cbaptiste
Hot Shot
Hot Shot

Do you mind sharing your current base login time

0 Kudos
VDINinja311
Enthusiast
Enthusiast

Most of our users run 1-2 AppStacks and their logins are probably 60 - 65 seconds now on 1803.

Power users are running 3+ AppStacks and their logins are probably 70 - 80 seconds now on 1803.

0 Kudos
cbaptiste
Hot Shot
Hot Shot

So I managed to work on my mandatory profile and got it working. I get as low as 15 seconds but start menu is broken.

I am setting a custom layout for ends users. Not special. Just the layout in a classic style. Sometimes the layout is just empty without any folders or apps. Sometimes it works fine. Nothing changed. I can see now the "please wait for the user profile service" take less than a second but the "preparing your desktop" is long. I am sure it is because of the start menu. I am not personalizing the menu with UEM so I know it is not broken because UEM is doing something.

Stay tuned.

Mandatory profile guides

Create mandatory user profiles (Windows 10) | Microsoft Docs

Creating a mandatory profile on Windows 10 1803 – JAMES-RANKIN.COM

0 Kudos
BenFB
Virtuoso
Virtuoso

0 Kudos
cbaptiste
Hot Shot
Hot Shot

Update: So I went back to using local profile. I did manage to get both the mandatory profile and start menu working. However, I noticed I got better login time using the local profile after using this script. It cleans up all the bloat in the default profile and speed things up a bit. Reducing the size of my default profile from 250MB to under 5MB. Reduced my login time from 2:15 to just 15 seconds.

takeown /f c:\users\default\appdata\local\Microsoft\WindowsApps /r /a /d Y

icacls c:\users\default\appdata\local\Microsoft\WindowsApps /grant Administrators:F /T /C /L

get-childitem C:\Users\Default\AppData\LocalLow -force | foreach ($_) {remove-item $_.fullname -force -recurse -confirm:$false}

get-childitem C:\Users\Default\AppData\Local\Microsoft\Windows -exclude “Shell”,”WinX” -Force | foreach ($_) {remove-item $_.fullname -force -recurse -confirm:$false}

get-childitem C:\Users\Default\AppData\Local\Microsoft -exclude “Windows” -Force | foreach ($_) {remove-item $_.fullname -force -recurse -confirm:$false}

get-childitem C:\Users\Default\AppData\Local -exclude “Microsoft” -Force | foreach ($_) {remove-item $_.fullname -force -recurse -confirm:$false}

get-childitem C:\Users\Default\AppData\Roaming\Microsoft\Windows -exclude “Start Menu”,”SendTo” -Force | foreach ($_) {remove-item $_.fullname -force -recurse -confirm:$false}

get-childitem C:\Users\Default\AppData\Roaming\Microsoft -exclude “Windows” -Force | foreach ($_) {remove-item $_.fullname -force -recurse -confirm:$false}

get-childitem C:\Users\Default\AppData\Roaming -exclude “Microsoft” -Force | foreach ($_) {remove-item $_.fullname -force -recurse -confirm:$false}

Get-ChildItem c:\users\default -Filter “*.log*” -Force | Remove-Item -Force

Get-ChildItem c:\users\default -Filter “*.blf*” -Force | Remove-Item -Force

Get-ChildItem c:\users\default -Filter “*.REGTRANS-MS” -Force | Remove-Item -Force

https://james-rankin.com/articles/creating-a-custom-default-profile-on-windows-10-v1803/

sjesse
Leadership
Leadership

Did you create your mandatory profile based of the administrator profile, I've seen guides do this, but I've never got it to work. I followed this, but in the step where it had you create a mandatory profile I instead made a new local user and updated the sysprep part to use the new account.

Creating an Optimized Windows Image for a VMware Horizon Virtual Desktop | VMware

0 Kudos
ashsevenuk80
Enthusiast
Enthusiast

that's great new cbaptiste

i'm currently running local profile which is redirected to a file server, configured via UEM

I'm not brilliant with scripts so i wanted to ask, is the .bat file you are using run via scheduled tasks on the master image? pushed at logon? did you need to customise any of it? also, does the .BAT file need to be configured to run as an admin?

can you let me know how you've actually configured deployed the script?

thank you

0 Kudos
cbaptiste
Hot Shot
Hot Shot

My mandatory profile was a copy of default. I believe in Windows 10 you are only allowed to copy the default user profile.

As I said in my previous comment. I ended up going back to using local profile because it was much faster than mandatory. Could not tell why? But using local profile is less headache anyway so it was a win for me.

0 Kudos
cbaptiste
Hot Shot
Hot Shot

You only need to run the script once on your parent image. It's not a bat file, it is powershell. Make sure to run it as administrator.

0 Kudos
stevericks
Contributor
Contributor

I have just started using FSLogix with Windows 10 1803 and it works really well. Logon times less than 20 seconds and Windows 10 runs and acts like its on a normal PC. You can customise your start menu, chose your default browser, run Onedrive on demand and all runs quick(er)

I have stopped using UEM and mandatory profiles on these desktops.

Only problem I have had is FSLogix does not save printer settings, so had to do a GPO to set users default printers.

0 Kudos
mchadwick19
Hot Shot
Hot Shot

Hey - what does your infrastructure look like if you don't mind me asking? Mainly looking at what is your storage set up and CPU types?

VDI Engineer VCP-DCV, VCP7-DTM, VCAP7-DTM Design
0 Kudos
LukaszDziwisz
Hot Shot
Hot Shot

If you don't mind asking what do you mean by local profile?

We are currently using Writable Profile only but I want to go away from it towards UEM and was seeing a lot of troubles with mandatory profiles, so I would appreciate if you could explain what you mean by local profile?

0 Kudos
sjesse
Leadership
Leadership

There are three different types of Windows profiles: local, mandatory, and roaming . Don't do a mandatory profile and your doing a local profile, technically roaming profiles are basically just folder redirection

About User Profiles (Windows) | Microsoft Docs

even VMware doesn't have people do mandatory anymore, as they are more trouble then they are worth.

Creating an Optimized Windows Image for a VMware Horizon Virtual Desktop | VMware

Writeables hurt login times, and there isn't much you can do I think.

LukaszDziwisz
Hot Shot
Hot Shot

Thank you for explanation .That makes sense.

0 Kudos
cbaptiste
Hot Shot
Hot Shot

Okay I am back. Here's the script I promised you but do take a snapshot prior to running it.

In full disclosure it wasn't originally mine. I just modifications to it to work to my liking.

Caution: Use at your own risk. :smileylaugh:

#Remove bloat from the default profile to minimize its size

Get-ChildItem C:\Users\Default\AppData\LocalLow -Force | ForEach ($_) {Remove-Item $_.FullName -Force -Recurse -Confirm:$false}

Get-ChildItem C:\Users\Default\AppData\Local\Microsoft\Windows -Exclude “Shell”,”WinX” -Force | ForEach ($_) {Remove-Item $_.FullName -Force -Recurse -Confirm:$false}

Get-ChildItem C:\Users\Default\AppData\Local\Microsoft -Exclude “Windows” -Force | ForEach ($_) {Remove-Item $_.FullName -Force -Recurse -Confirm:$false}

Get-ChildItem C:\Users\Default\AppData\Local -Exclude “Microsoft”,"Packages" -Force | ForEach ($_) {Remove-Item $_.FullName -Force -Recurse -Confirm:$false}

Get-ChildItem C:\Users\Default\AppData\Roaming\Microsoft\Windows -Exclude “Start Menu”,”SendTo” -Force | ForEach ($_) {Remove-Item $_.FullName -Force -Recurse -Confirm:$false}

Get-ChildItem C:\Users\Default\AppData\Roaming\Microsoft -Exclude “Windows” -Force | ForEach ($_) {Remove-Item $_.FullName -Force -Recurse -Confirm:$false}

Get-ChildItem C:\Users\Default\AppData\Roaming -Exclude “Microsoft” -Force | ForEach ($_) {Remove-Item $_.FullName -Force -Recurse -Confirm:$false}

Get-ChildItem c:\users\default -Filter “*.log*” -Force | Remove-Item -Force

Get-ChildItem c:\users\default -Filter “*.blf*” -Force | Remove-Item -Force

Get-ChildItem c:\users\default -Filter “*.REGTRANS-MS” -Force | Remove-Item -Force

0 Kudos