<img src="https://secure.leadforensics.com/51024.png" style="display:none;">
Skip to main content

«  View All Posts

Taking full advantage of PSAppDeployToolkit 4.x: Beyond a simple wrapper

September 4th, 2025

3 min read

By Bob Kelly

Taking full advantage of PSAppDeployToolkit 4.x: Beyond a simple wrapper
6:33

Many organizations use the PSAppDeployToolkit (PSADT) as a wrapper to standardize deployments, create consistency in branding, and provide a predictable user experience. And while that's a perfectly valid use case, it only scratches the surface of what it is capable of doing.

When used to its full potential, PSADT helps simplify complex customization needs that often arise during enterprise application packaging. Rather than writing one-off scripts or embedding logic into fragile repackaged setups, it provides a structured, supported framework for executing tasks in a maintainable way.

In this article, I’ll highlight some of the most common customization requests we see and how PSADT provides simple, often built-in ways to address them.

Customization examples and toolkit-based solutions

Below are real-world customization needs I've discussed with customers, and how the PSADT compares to repackaging in its ability to address them effectively. At the bottom, you'll find some notable enhancements to PSADT 4.1 that you should consider. 

Customization Supported via Repackaging Supported via PSADT Notes
Scheduled Task Creation No Yes Use schtasks.exe via Start-ADTProcess, with uninstall logic scripted.
Permission Changes (Files/Folders/Registry) Yes* Yes Use Set-ADTItemPermission. More reliable than MSI tables.
Kill Process Before Install/Uninstall No Yes Use CloseProcesses in Show-InstallationWelcome, or Stop-Process.
Remove Files and Folders Yes Yes Use Remove-ADTFile, Remove-ADTFolder. Better than capturing deletions.
Register/Unregister DLLs or OCXs Yes Yes Use Register-ADTDll, Unregister-ADTDll, or Start-ADTProcess with RegSvr32.exe.
Start/Stop Services No Yes Use Stop-ADTServiceAndDependencies, Start-ADTServiceAndDependencies.
Driver Installation No Yes Use Start-ADTProcess with dpinst.exe or pnputil.exe. Not recommended inside MSI.
Environment Variable Changes Yes Yes Set registry values for HKLM\SYSTEM\... or HKCU\Environment.
Certificate Management No Yes Use Import-Certificate or Remove-Item. Not recommended, but possible.
Active Setup Key Handling Yes* Yes Use Set-ADTActiveSetup with disable/purge as needed.
INI File Edits No Yes Use Set-ADTIniValue. Avoid capturing changes to existing INI files.
Registry Edits Yes Yes Use Set-ADTRegistryKey, Remove-Item, Set-Item.
ODBC Configurations No Yes Use registry edits or external scripts.
Real-Time Install Decisions (e.g., process detection) No Yes Use Get-Process, condition logic in script.
Language-Based Installation Logic No Yes Use $currentLanguage variable for conditional logic.
Hosts File Updates No Yes Edit using PowerShell; not recommended for packaging.
Firewall Rule Add/Remove Yes* Not natively Use PowerShell scripts; App Readiness offers built-in support.
Very Large Package Handling No Yes Host MSI externally, bypassing internal CAB limits.
Group Policy-Based Configuration No Yes PSADT 4.1 can deploy ADMX/ADML policies to override toolkit behavior centrally. 
System context UI without ServiceUI n/a Yes  In PSADT 4.1, UI dialogs now run securely in session, even when deployed as SYSTEM—no ServiceUI needed.
Process control (timeout, child process cleanup) n/a Yes In PSADT 4.1, you may use parameters like -WaitForChildProcesses, -KillChildProcessesWithParent, -Timeout, etc.

*These items are not typically handled when repackaging, but App Readiness provides specialized support for these customizations.

Why this matters

Most of these scenarios don’t justify the overhead or fragility of repackaging. Leveraging PSADT gives you the structure and logic support needed to manage them cleanly, outside of the MSI layer. The result? Faster delivery, more reliable installs, and easier maintenance.

While much of this could technically be accomplished by authoring a Windows Installer setup with custom actions, doing so is both more complex and significantly harder to maintain. Whereas PSADT provides built-in functions that reduce the amount of scripting required and, more importantly, give you a path to reuse.

With traditional repackaging, each new application version requires a full uninstall before upgrade, meaning all custom actions must be rebuilt and revalidated with every release. By contrast, it lets you define conditional logic—“if application is 'My Tough Application', then do these things”—that stays in place across versions. As long as the command-line installation remains stable (which it typically does), your wrapper script remains valid and low-maintenance.

If you’re using it just for branding and user prompts, consider taking it further. The built-in functions cover most enterprise customization scenarios—and in many cases, they’re easier to use and maintain than a repackage or hand-coded script.

Finally, PSAppDeployToolkit continues to evolve in compelling ways. Recent 4.x releases bring meaningful enhancements that align closely with our customization framework. V4 introduced a modern Fluent UI, full PowerShell 7 and ARM support, WIM handling, and extended backwards compatibility. Version 4.1 removes the need for the legacy ServiceUI, adds advanced process control parameters (like -WaitForChildProcesses and -KillChildProcessesWithParent), and now supports management via Group Policy with ADMX templates, environment variable and INI manipulation, and enhanced UI interactivity. These upgrades make it even easier to maintain reusable, sophisticated deployments that scale over time.

Templates out of control?

Occasionally, I hear concern about managing PSADT wrappers for a large portfolio of packages. What they often fail to realize is that you don't need individual scripts but can rather manage any and all application customizations in a single template. By wrapping all setups with a common PSADT template, you have a single place to insert any customizations with a simple condition (for example, if the application name is "Adobe Reader," then add these Adobe Reader customizations). 

image-png-Apr-07-2025-07-21-33-0470-PM

For more packaging recommendations, check out our App Readiness documentation.

PSAppDeployToolkit - Endpoint Code

As the founder of AppDeploy.com, I can’t help but smile when I see "AppDeploy" bolded in the PowerShell App Deployment Toolkit name. While they didn’t run it by me, I’m glad to see the legacy of packaging-focused community contributions live on in new tools like it.

Bob Kelly

Bob is Chief Product Officer at Juriba. He is a frequent speaker at IT Pro events and is the author of multiple books on desktop and application management. He is a three-time Microsoft MVP and the founder of the AppDeploy/ITNinja communities. With a rich background in product management, he has spearheaded several market-leading IT professional solutions, driving innovation in the Windows app management space.