Most of what I use Start-ADTProcessAsUser for is for cleaning up user-context installs (usually so they can be replaced with the system / enterprise managed version), or for a few other user-session-specific actions. The big caveat is that it only affects the currently logged-on user (a good thing, and by design).
For example, my PSADT workflow for VS Code looks like this:
If a user is logged on:
- Prompt for close/defer if VS Code is running.
- Remove the user-context install (if detected).
- Install/update the system-context (machine-wide) version.
If no user is logged on:
- It won’t remove any per-user installs (no interactive user to target), but it will still install/update the system-context app.
Also worth calling out: in Intune, the detection script is what determines whether the PSADT app runs in the first place. In my environment, if a user is logged on, detection is able to account for user-context installs and trigger an update when they’re out of date, so the user gets the expected close/defer flow and everything stays consistent.
One nuance that helps here: the user-context apps I do centrally manage at scale are mostly AppX/MSIX family apps (MSIX/AppX/MSIXBundle/AppXBundle, etc.). Those are supported via my PSADT extensions and are straightforward to manage centrally from system context, while still living in user-context land and supporting auto-update behavior. So user-context installs aren’t inherently a problem... it depends on the installer type and how you design detection + remediation.
In my environment, most endpoints are single-user, so I’m not trying to sweep multiple profiles. On shared/multi-user devices we avoid per-user EXE installs and stick to system-context installs.
For Winget it may work in your case if you’re okay treating it as per-user app management and you ensure it runs as the interactive user. I don’t use winget for centralized management because I need more control and better coverage for edge cases (and some other security related reasons), but it might be sufficient depending on your requirements. Then as you said, centrally manage the system-context version with PSADT separately.
One thing I didn't mention, is that between different app versions, editions, system vs user context, etc... you can end up with multiple different versions and editions installed simultaneously... which also need factored in to your workflow (some of what I meant by better control and coverage of edge cases). Many apps are like this, and is why many 3rd party solutions don't cut it, unless you're greenfield (not really ever the case) and/or eveyrthing can be kept 100% consistent globally across the entire fleet (rare).