Releases: PSAppDeployToolkit/PSAppDeployToolkit
PSAppDeployToolkit 4.1.0-rc1
π₯οΈ What's New in v4.1 (Release Candidate) - 2025-07-08
NOTE: This is currently a release candidate for PSADT 4.1. which has not yet reached final status. While we are confident that it is rock solid, we are still testing it and may make changes before final release. As such, it is not recommended for production use at this time.
π― Major Improvements
-
Up until now, it was not possible to display any user interface when deploying an application as SYSTEM using Intune (or any endpoint management tool) without using ServiceUI. Well, now it IS possible:
- I REPEAT! You no longer need to use ServiceUI, EVER AGAIN! π₯³πππͺ πͺ©π―ββοΈ
- In fact, we strongly advise you stop using it as soon as possible. ServiceUI works by manipulating system security tokens in a way that could allow malicious actors to escalate privileges or bypass security controls.
- We've taken a fresh approach which leverages the Windows security model and separates out user interactions onto a process running in the users' session - we never perform any user interaction or messaging of any kind within the SYSTEM context. This means a more secure and reliable deployment experience.
- We have also removed the requirement for the 'Allow users to view and interact with the program installation' checkbox in Configuration Manager deployments.
-
There is now full feature parity between the Fluent and Classic User Interfaces:
- Deferral Deadline and Countdown Timer on Close Apps Dialog
- Ability to prevent the Restart Dialog from being dismissed once a certain point in the countdown is reached
- Ability to allow users to move dialogs
- Ability to set the initial dialog placement to multiple locations
- PowerShell ISE compatibility
-
Furthermore, the Fluent UI has gained new features:
- Due to the rearchitecture of how we handle user interaction with Dialogs, it is now possible to prompt the user for input using Show-ADTInstallationPrompt's -InputBox parameter
- Support for formattable text (Bold, Italic & Accent) as well as URL hyperlinks in dialog messages
- You can now set the % complete of the progress bar in the Progress Dialog (for example, if you are running a custom script that you want to show incremental progress changes for)
- Ability to set different icons for Light / Dark mode
-
The security rearchitecture required all of our process execution code to be rewritten. This has enabled us to provide a wealth of new capabilities to both Start-ADTProcess and Start-ADTProcessAsUser using the following new parameters:
- -UseUnelevatedToken parameter to force a process run without elevation, for deploying user-context apps with Windows 11 Administrator Protection enabled
- -WaitForChildProcesses parameter to wait for all child processes to end - useful for installers/uninstallers that hand off to another process and exit early
- -KillChildProcessesWithParent parameter to close all started child processes once main process has ended - useful when installers start the application post-install, which is typically undesired when running as system
- -Timeout parameter along with supporting -TimeoutAction and -NoTerminateOnTimeout parameters to control the outcome
- -ExpandEnvironmentVariables parameter to allow variable expansion such as %AppData% when running a process as a user
- -StreamEncoding parameter, useful for apps like Winget that write to the console using UTF8
- -PassThru output now has a new 'interleaved' property that combines stdout/stderr in order
-
It's now possible to set PSADT configuration settings via Group Policy using the included ADMX templates, which will override any settings in the config.psd1 file. This allows you to change, update or enforce settings across an organization.
π οΈ New and Enhanced Functions
- Added functions for managing user / machine environment variables:
- Added functions for managing INI file sections / values:
- Added Start-ADTMsiProcessAsUser for installing / uninstalling user-context MSIs via the System account
- Added -DeferRunInterval switch to Show-ADTInstallationWelcome to limit retry times from Intune
- Added -Path / -LiteralPath support to registry functions
- Added volatile key creation support to Set-ADTRegistryKey
- Added MultiString add / remove support to Set-ADTRegistryKey
- Added -MaximumElapsedTime parameter to Invoke-ADTCommandWithRetries
- Added -SuccessExitCodes and -RebootExitCodes parameters to Uninstall-ADTApplication
π οΈ Other Improvements
- Show-ADTHelpConsole has been given some love and a facelift with High-DPI awareness, resizability, PowerShell 7 compatibility, and extension module display
- Added -NoWait support to Show-ADTDialogBox
- Added process detection code to enable automatic silent deployments when processes aren't running
- Added /Debug switch to Invoke-AppDeployToolkit.exe to show terminal output for debugging purposes
- Added /Core switch to Invoke-AppDeployToolkit.exe to allow PowerShell 7 usage
π οΈ Changes
- Changed default DeferExitCode from 60012 to 1602, since ConfigMgr and Intune recognize this natively as 'User cancelled the installation'
- Changed toolkit to exit with 3010 if a suppressed reboot was encountered without having to use -AllowRebootPassThru. To mask 3010 return codes and exit with 0, you can now add -SuppressRebootPassThru
- Changed default msiexec.exe parameters in interactive mode from /qb-! to /qn
- Changed UI functions to no longer minimize windows by default, -MinimizeWindows can be added to enable this
- Changed the 'Processes to close' in the Invoke-AppDeployToolkit template to the AppProcessesToClose ADTSession parameter, where they can be re-used over Install / Uninstall / Repair
- Changed installation failure to be silent as it was in v3.x; however, you can still uncomment a line to get the full detailed stack trace as used in v4.0.x, or a new minimal example using the Fluent UI
π οΈ Fixes
- Fixed Start-ADTProcessAsUser function to work as expected
- Fixed Block-ADTAppExecution to avoid triggering AV solutions
- Fixed dialogs to show correct deployment type Install / Uninstall / Repair
- Fixed SCCM pending reboot tests within Get-ADTPendingReboot
- Fixed MSI repair to default to 'Reinstall' to avoid forced unavoidable reboots when running msiexec /f against an app that is in-use
- Fixed OOBE detection code to factor in User ESP phase
PSAppDeployToolkit 4.0.6
Version 4.0.6 [2025-02-23]
What's Changed?
- Move session buffer adding/removing back to the Open/Close-ADTSession.
- Update the
-Silent
parameter setup as it should only be forced on when its unbound. - Change "installation" for "deployment" in
Show-ADTInstallationWelcome
. - Replace bad reference to
AppDeployToolkitConfig.xml
. - Remove last remaining reference to
AppDeployToolkitConfig.xml
within comment-based help. - Fix bad cherry pick from 4.1.0 development track.
- Fix missing space within
Set-ADTActiveSetup
preventing PowerShell scripts from firing. - Recompile developmental PSADT.dll file.
- Update markdown help exports.
- Set up proper disposal of the balloon tip by way of an event handler.
- Re-write
Get-ADTApplication
main loop to handle bad uninstall entries without bombing out entirely. - Fix bad parameter set setup in
Invoke-ADTFunctionErrorHandler
. - Make version casting in
Set-ADTActiveSetup
more robust against failures. - Don't fail out on
Get-ADTPendingReboot
's$IsIntuneClientRebootPending
tests if the key doesn't exist. - Amend bad example for
Get-ADTMsiTableProperty
. - Update markdown help export for
Invoke-ADTFunctionErrorHandler
. - Ensure the live documentation follows that of 4.0.x, not develop.
- Fix bad default for
Invoke-ADTFunctionErrorHandler
's-LogMessage
parameter. - Widen out the buttons in
Show-ADTWelcomePromptClassic
as much as possible. - Allow
Open-ADTSession
's unbound arguments setup to accept null/empty values. - Rework
ConvertValuesFromRemainingArguments()
to perform null checking of arguments. - Clean up the comment-based help for
Show-ADTInstallationRestartPrompt
and properly group parameters into parameter sets. - Update markdown help export for
Invoke-ADTFunctionErrorHandler
. - Add some null checking to the parameters passed through to
DeploymentSession
's constructor. - Remove the
Where()
method usage withinInternalDatabase.Init()
. - Use consistent scoping when accessing module's CommandTable in the C# code.
- Don't pre-calculate the LogTimeOffset for CMTrace logging as it'd result in incorrect logging if DST kicks in mid-way through a deployment.
- Remove superfluous whitespace from C# project files.
- Add forced line breaks in comment-based help so the markdown exports look right.
- Fix nameFilterScript reference.
- Replace classic progress dialog's synchronised hashtable for more modern ConcurrentDictionary.
- Minor OCD fix on a variable's casing within
Start-ADTMsiProcess
. - Always print script info properties irrespective of whether we're in Zero-Config MSI mode or not.
- Ensure all null characters are stripped from log messages as they break CMTrace.
- Remove line feeds from logged messages in the exe.
- Don't add classic progress window errors to the SyncHash, better to get them from the SessionStateProxy.
- Rework OneTrace spacing fixes to make replacement text more robust.
- Don't specify default values within
Invoke-AppDeployToolkit.ps1
for-DeploymentType
and-DeployMode
. - Leverage
[PSDefaultValue()]
decorations where it makes sense to do so. - Properly escape slashes in yaml help examples.
- Replace
Get-ChildItem -Path
call withGet-ChildItem -LiteralPath
within module init system to prevent erroneous wildcard characters from a given module path affecting the operation. - Fix bad string formatting for dialog subtitles.
- Fix #1261. PSADT windows can be closed from taskbar.
- Recompile DLL files following recent changes.
- Amend comment-based help for
Block-ADTAppExecution
/Unblock-ADTAppExecution
. - Amend comment-based help links for all functions.
- Fix bad SYSTEM user check within
Set-ADTActiveSetup
. - Don't allow
-WindowStyle
Hidden inSet-ADTActiveSetup
when running scripts for the current user. - Properly handle delimited strings in
Invoke-ServiceUI.ps1
when running frompowershell.exe -File
setup. - Fix bad
$FileCopyError
setup inCopy-ADTFile
. - Tighten up some code in
Invoke-ADTServiceAndDependencyOperation
. - Move service validation for
Start/Stop-ADTServiceAndDependencies
into the scriptblock so ErrorAction works against it as one would expect. - Simplify the relative path cleanup in
New-ADTTemplate
. - Tidy up bad uses of
DeploymentSession.ScriptDirectory
throughout module since it can now be an array. - Fix for CloseProgressDialog being unable to close.
- Rework user ESP phase detection code.
- Changed Copyright date.
- Revamp README.
New Contributors
- @EdijsPerkums made their first contribution in #1322
Full Changelog: 4.0.6...4.0.5
PSAppDeployToolkit 4.0.5
Version 4.0.5 [2025-01-20]
What's Changed?
- Update markdown help exports.
- Remove bad setup in Set-ADTActiveSetup (fixes #1275)
- Correct the setup for
-DeferTimes
by not allowing signed input. - Avoid pipeline delays when calling
Stop-Process
. - Fix
-ForceCountdown
setup to stop it infinitely looping. - Revert accidentally committed test changes.
- Update markdown help export for
Show-ADTInstallationWelcome
. - Refactor the classic dialog's countdown code into something sane and proper.
- Optimise most intellisense warnings from MSVC for DeploymentSession class.
- Optimise parameter processing in DeploymentSession's ctor.
- Simplify WelcomeState setup within
Show-ADTInstallationWelcome
. - Fix bad string table accesses within
Show-ADTWelcomePromptClassic
. - Get module working on Windows again following last commit.
- Rework module init process to support a minimal mode for
New-ADTTemplate
to function. - Don't update the session exit code in
Start-ADTProcess
when the value is specified via-IgnoreExitCodes
. - Use
Get-ADTBoundParametersAndDefaultValues
againstOpen-ADTSession
so it can include default values. - Fix bad process setup in
Test-ADTMutexAvailability
. - Fix bad commentary regarding service deletion via
Test-ADTServiceExists
. - Fix shortcut icon setup.
- Fix shortcut function path extension checks.
- Fix bad character escaping for DeploymentSession.InstallTitle.
- Patch out bad setup in previous commit.
- Escape curly braces in log format lines in case they happen to be present.
- Do better string tests within
Import-ADTConfig
. - Fix bad call to
New-Item
withinNew-ADTShortcut
. - Further refinement to
Get-ADTUniversalDate
setup. - Fix lost
.ToUniversalTime()
method withinGet-ADTUniversalDate
. - Clean up main loop within
Set-ADTItemPermission
. - Restore proper error handling/control within
Convert-ADTNTAccountOrSID
. - Pre-calculate the domain SID in
ConvertTo-ADTNTAccountOrSID
. - Amend comment-based help for
Set-ADTItemPermission
. - Fix bad constructors for ShortcutLnk and ShortcutUrl.
- Repair bad setups in
Get-ADTShortcut
. - Fix printing of logged on session information.
- Fix build system running PSScriptAnalyzer twice on files.
- Fix build system issues from previous commit.
- Initialise the classic UI assets late to allow v3 compatibility mode to work for Server Core.
- Fix CompressLogs setup that wasn't creating directory as required.
- Add
-ErrorAction Ignore
to line in previous commit to make GitHub Actions happy. - Make the module build system throw if there's an installed instance of the module.
- Allow specifying specific ErrorRecord properties to resolve in
Invoke-ADTFunctionErrorHandler
. - Rework build system ScriptAnalyzer setup to properly incorporate all files.
- Revert back to using
Import-LocalizedData
to import the module manifest in the build system. - Fix bad calls to
Get-ADTBoundParametersAndDefaultValues
withinUninstall-ADTApplication
. - Pre-cache regenerated regex in loop within
Uninstall-ADTApplication
. - Optimise call to
Get-ADTApplication
withinStart-ADTMsiProcess
. - Don't use
[System.IO.Path]::GetFileNameWithoutExtension()
withinStart-ADTMsiProcess
as it mucks with log filenames that contain dots. - Amend comment-based help for previous commit.
- Re-write
Send-ADTKeys
. - Fix order in
Export-ADTEnvironmentTableToSessionState
. - Add -Force to the Remove-Item command in Remove-ADTContentFromCache (fixes #1229)
- Correct help example in New-ADTShortcut
- Amend help for
Uninstall-ADTApplication
. - Prevent superfluous IFEO data from affecting the
Block-ADTAppExecution
code. - Rework version checking within
Set-ADTActiveSetup
. - Fix bad
$ActiveSetupFileName
setup withinSet-ADTActiveSetup
. - Fix bad continuance within
Update-ADTGroupPolicy
. - Fix bad enum equality check in
DeploymentSession.Close()
. - Add guard clause preventing classic dialog operation on Server Core environments.
- Make the build system report the full file's name on encoding failure issues.
- Repair nullable issue for
PSADT.Shared.ConvertValuesFromRemainingArguments()
. - Fix bug where blocked executables weren't properly resetting.
- Extend changes from previous commit to the development psm1 file also.
- Wrap module's procedural code in try/catch blocks as it makes the error from
Import-Module
look better. - Perform better null checks when instantiating InstalledApplication objects in
Get-ADTApplication
. - Add
HelpLink
toGet-ADTApplication
output. - Use PowerShell native utilities to amend
Invoke-AppDeployToolkit
content withinNew-ADTTemplate
. - Apply fix from "- Fix bad setup in
New-ADTShortcut
's-Path
ValidateScript decoration." to other shortcut functions also. - Fix bad comment in
Close-ADTProcess
. - Remove unnecessary trim from split stack trace in module init code.
- Explicitly specify the manifest's filename against
Import-LocalizedData
while importing the module. - Ensure
Close-ADTSession
while being ran directly from the command line properly breaks out of the runspace. - Add unbound arguments in
Open-ADTSession
to$PSBoundParameters
for non-[PSADT.Module.DeploymentSession]
session objects. - Only process unbound arguments in
Open-ADTSession
for[PSADT.Module.DeploymentSession]
session objects.
Full Changelog: 4.0.4...4.0.5
PSAppDeployToolkit 4.0.4
Highlights
- Add
Convert-ADTValueType
to provide casted value type conversions without overflow exceptions. - Add
DisableDefaultMsiProcessList
toOpen-ADTSession
to allow disabling the zero-config MSI process list evaluation. - Add
Export-ADTEnvironmentTableToSessionState
to toolkit to allow manual environment table exportation to the provided SessionState object. - Add
Get-ADTPresentationSettingsEnabledUsers
to test whether the user has enabled presentation mode via the mobility settings on the device. - Add
New-ADTExampleFunction
as an example function withinPSAppDeployToolkit.Extensions
. - Add
-SkipUnloadedProfiles
parameter toInvoke-ADTAllUsersRegistryAction
. - Add a copy of the module's public certificate to the module root.
- Add config option to allow sending log files to a subfolder of LogPath.
- Add in process to allow custom variables to be added to a DeploymentSession object.
- Add in some empty files to the Files/SupportFiles folders to stop GitHub upload-artifact from dropping the empty folders.
- Add new function
Get-ADTOperatingSystemInfo
. - Add stronger typing to
Get-ADTUserProfiles
returned object output. - Advise that
-WindowLocation
has no effect forShow-ADTInstallationProgress
with fluent dialogs. - Allow overriding a session's default LogName value.
- Allow specifying a
DeploymentSession
class override againstOpen-ADTSession
. - Allow the
CreateProcessAsUser()
code to work for non-SYSTEM admin users. - Change loading of
PSAppDeployToolkit.Extensions
to wildcard search forPSAppDeployToolkit.*
. - Ensure a failed
Close-ADTSession
operation exits out with an exit code. - Ensure a message dialog from the exe is always topmost.
- Ensure PSADT.Invoke doesn't show any messages if running in NonInteractive/Silent modes.
- Ensure ServiceUI wrapper batch scripts exit with PowerShell's exit code.
- Ensure Show-ADTDialogBox is bypassed in Non-Interactive mode, because it's interactive
- Ensure throws from DeploymentSession's constructor maintain the exception's stack trace that it's rethrowing.
- Fix bad
$StartMode
re-writing withinStart-ADTServiceStartMode
. - Fix bad
_installName
regex setup withinDeploymentSession
's constructor. - Fix bad setup in
DeploymentSession.Close()
stemming from bad auto-completion during "- Initial porting of ADTSession.Close() into C# code.". - Fix bad setup in
New-ADTShortcut
's-Path
ValidateScript decoration. - Fix badly escaped formatting in log compression string.
- Fix IFEO path length constraints potentially effecting BlockExecution functionality.
- Fix recovery scheduled task creation in
Block-ADTAppExecution
. - Get custom scripts working with the exe as the parameter parsing was wrong.
- Have our build system sign our own compiled wpfui DLL files.
- Import our assemblies via the psm1 file so we can load them from UNC paths/mapped network drives if required.
- Improve exception handling within
PSADT.GUI.Explorer.RefreshDesktopAndEnvironmentVariables()
. - Make
Close-ADTSession
throw if it's called without an active session. - Make
DynamicProcessEvaluation = $false
work right forShow-ADTWelcomePromptFluent
. - Make all string comparisons for exe arguments case insensitive
- Make the exe pass through
-NonInteractive
on the powershell.exe command line. - Minor refactor for
Show-ADTWelcomePromptFluent
to optimise out an extraGet-ADTRunningProcesses
call. - Numerous fixes to
Set-ADTActiveSetup
. - Only use the .NET Framework 4.6.2 DLL files with our project.
- Optimise setup in
Get-ADTPEFileArchitecture
to avoid an unnecessary try/catch block. - Provide more/better filtration within
Get-ADTWindowTitle
. - Relax the duplicate assembly checking stringency by allowing existing assemblies if the hashes match the currently importing module's assemblies.
- Remove the
HelpInfoURI
value from the manifest, we don't support this. - Replace bad
Get-CimInstance
calls with the correctInvoke-CimMethod
calls. - Reset
PSModulePath
environment variable in the ext to handle pwsh.exe > exe > powershell.exe invocations. - Resolve
New-ADTTemplate
's-Destination
parameter prior to using it. - Restore lost log message within
Update-ADTDesktop
. - Rework
DeploymentSession
'sRunspaceOrigin
parameter to beNoExitOnClose
, which is what it actually means. - Rework
Open-ADTSession
s$runspaceOrigin
setup so that setups via functions don't exit powershell.exe unless-NonInteractive
is explicitly passed. - Rework arguments setup within
Invoke-ServiceUI.ps1
as you can't pass booleans to SwitchParameter values viapowershell.exe -File <script.ps1>
setups. - Rework DeploymentSession instantiation to not require sending in module internals during construction.
- Rework how we manage caller preference values to make the implementation more robust between modules.
- Rework process closing code when entering the
-PromptToSave
branch. - Rework the architecture setup to always use the x64 ServiceUI executable on any 64-bit target.
- Sub-express
Get-ADTRegistryKey
calls inGet-ADTUserProfiles
to avoid typing errors. - Unseal
PSADT.Module.DeploymentSession]
to allow inheritance for advanced customisations. - Updated wording of Norwegian.
- When compiling configs/string tables, don't erase defined values with null/empties from successive imports.
Full Changelog
- Ensure the build system removes
Invoke-AppDeployToolkit.pdb
from the v3 frontend folder. - Get custom scripts working with the exe as the parameter parsing was wrong.
- Ensure a message dialog from the exe is always topmost.
- Reset
PSModulePath
environment variable in the ext to handle pwsh.exe > exe > powershell.exe invocations. - Fix config/strings path print issues within
DeploymentSession
's constructor. - Ensure Show-ADTDialogBox is bypassed in Non-Interactive mode, because it's interactive
- Make all string comparisons for arguments case insensitive
- Ensure PSADT.Invoke doesn't show any messages if running in NonInteractive/Silent modes.
- Throw a better exception on PowerShell process failure.
- Catch
MessageBox.Show()
exceptions in PSADT.Invoke and swallow them. - Amend check in module initialisation code to prevent localisation issues.
- Extend previous commit to make
Open-ADTSession
's-ScriptDirectory
parameter a string array also. - Allow
Initialize-ADTModule
to accept an array of ScriptDirectory values. - Synchronise changes within
Invoke-AppDeployToolkit.ps1
with the example scripts. - Rework the architecture setup to always use the x64 ServiceUI executable on any 64-bit target.
- Rework arguments setup as you can't pass booleans to SwitchParameter values via
powershell.exe -File <script.ps1>
setups. - Ensure
Invoke-ServiceUI.ps1
stops on a dime if there's an error. - Ensure ServiceUI wrapper batch scripts exit with PowerShell's exit code.
- Fix bad
$StartMode
re-writing withinStart-ADTServiceStartMode
. - Change last remaining
Write-Error
call to a throw on the back of the previous commit. - Relax the duplicate assembly checking stringency by allowing existing assemblies if the hashes match the currently importing module's assemblies.
- Rework module importing to remove remaining
$RequiredModules
from module's global scope. - Relocate a throw in
ImportsFirst.ps1
so that it doesn't break due to $CommandTable substitution which doesn't exist yet. - Optimise function imports to prevent cycling through function names twice.
- Extend previous commit to the unbuilt PSAppDeployToolkit.psm1 file as well.
- Make the build system do $CommandTable translations in
ImportsFirst.ps1
/ImportsLast.ps1
. - Use PowerShell's
Add-Type
for the normal assembly load pathway. - Optimise previous commit by only doing network checks once, and ensure changed code uses our $CommandTable.
- Add check for mapped drive
- Import our assemblies via the psm1 file so we can load them from UNC paths if required.
- Rework module import via manifest check to not be dependent on the assembly.
- Add a bit more modularity to the build system.
- Resolve
New-ADTTemplate
's-Destination
parameter prior to using it. - Set the DefaultUser SID in
Get-ADTUserProfiles
usingWellKnownSidType.NullSid
instead of a string literal. - When compiling configs/string tables, don't erase defined values with null/empties from successive imports.
- Ensure
-Force
is honoured inExit-ADTInvocation
. - Make
Close-ADTSession
throw if it's called without an active session. - Remove leftover markdown help for
Show-ADTBlockedAppDialog
. - Set up proper enums for
DeploymentType
andDeployMode
as well. - Fix module build system following IFEO changes/fixes.
- Minimise amount of
Get-ADTStringTable
calls withinBlock-ADTAppExecution
and add some quote safety. - Amend previous commit to use
conhost.exe --headless
to hide the window. - Fix IFEO path length constraints potentially effecting BlockExecution functionality.
- Fix recovery scheduled task creation in
Block-ADTAppExecution
. - Fix bad SwitchParameter evaluation when constructing a
DeploymentSession
object. - Sub-express
Get-ADTRegistryKey
calls inGet-ADTUserProfiles
to avoid typing errors. - Optimise previous commit to ensure a session is always removed from the buffer during a close failure.
- Ensure a failed
Close-ADTSession
operation exits out with an exit code. - Update markdown help export for
Open-ADTSession
. - Pack
DeploymentSession
's numerous bools into a bitfield. - Change
DeploymentSession.GetDeploymentStatus()
to be a proper enum. - Don't flush the module's callbacks upon module init otherwise it defeats the purpose of the system.
- Allow specifying a
DeploymentSession
class override againstOpen-ADTSession
. - Add better throws to
InternalDatabase
's getters. - Store out the SessionState w...
PSAppDeployToolkit 4.0.3
Bugfix release to address several reported issues, including:
- Add warning to Start-ADTProcessAsUser that the toolkit needs to be running as SYSTEM for it to operate.
- Use a better exception type for native binaries that finish with a bad exit code.
- Amend examples in comment-based help for New-ADTTemplate.
- Amend all comment-based help areas that reference old 3.x variables that don't exist anymore.
- Amend poorly translated French MessageInstallDetail string.
- Update markdown help exports following recent changes.
- Use string.IsNullOrWhiteSpace() everywhere.
- Strongly type the parameters for ConvertTo-ADTNTAccountOrSID.
- Add missing Norwegian translations (AI generated via DeepL, may not be amazing).
- Hook up -NoCountdown for Show-ADTInstallationRestartPromptFluent.
- Add IsIntuneClientRebootPending property to Get-ADTPendingReboot output.
- And logging issue within Start-ADTProcessAsUser.
- Amend the CMTrace log time offsetting to properly factor in negative offsets.
- Remove the PowerShell host version restriction as compatible hosts can have version numbers drastically different the PowerShell version.
- Fix the throw message for Start-ADTMsiProcess's -FilePath parameter.
- Throw in Start-ADTMsiProcess if a ProductCode is used with an Install action.
Rework $msiProduct setup within Start-ADTMsiProcess. - Completely rework log file setup within Start-ADTMsiProcess.
- Resiliency improvements around determining the ProductCode in Start-ADTMsiProcess.
- Remediate minor issues within Invoke-ADTServiceAndDependencyOperation.
- Repairs and immutability improvements to output of Get-ADTPendingReboot.
- Patch bad setup in Show-ADTInstallationWelcome preventing sessionless usage of the function.
Please note that the PSADT documentation is being revised and updated continuously over the coming few days. Please check back for updates.
Full Changelog: 4.0.2...4.0.3
PSAppDeployToolkit 4.0.2
What's Changed
- Patch out null access for
$envLogonServer
withinNew-ADTEnvironmentTable
. - Fix bad setup in
Show-ADTBalloonTip
that was preventingGet-ADTBoundParametersAndDefaultValues
from working right. - Revise
Get-ADTBoundParametersAndDefaultValues
to exclude common parameters by default.
Full Changelog: 4.0.1...4.0.2
PSAppDeployToolkit 4.0.1
What's Changed
- Patch out issue with the v3
Deploy-Application.exe
file. - Fix bad setup producing two executables within the
New-ADTTemplate -Version 3
output via the build system. - Remove sub-expression within
PSAppDeployToolkit.psd1
which was preventing PSGallery publishing.
Full Changelog: 4.0.0...4.0.1
PSAppDeployToolkit 4.0.0
Version 4.0.0 [2024-12-04]
- Digitally signed PowerShell module
- Codebase completely refactored and optimized
- Defensively coded to ensure security and reliability
- Now provides PowerShell 7 and ARM support
- Complete removal of VBScript code from the project
- All C# code is now compiled and digitally signed
- Integrated Zero-Config WIM file support
- Support for overriding config via the registry - ADMX template to follow
- Support for PowerShell standard error handling, such as - ErrorAction, etc.
- **Support for PowerShell standard filtering like Where-Object, etc.
- Strongly typed and defined object types, no more PSCustomObjects, etc.
- Extensions supported as supplemental modules
- Custom action support for extensions on deployment start/finish
- Backwards-compatibility with v3 deployment scripts
- Object-oriented Design encapsulates deployments, facilitating complex scenarios such as parallel operations
- Immutable Command Lookup Table ensures functions cannot be spoofed or overwritten
- PowerShell Strict Mode v3 compliance for code safety
- Performance Optimizations using efficient object types
- CI / CD Build System for code validation and linting, unit and integration testing, documentation generation, and more.
Full Changelog: 3.10.2...4.0.0
PSAppDeployToolkit 3.10.2
Version 3.10.2 [08/13/2024]
- Added support for MARKs in VSCode. #994
- Added Pester Tests for Copy-File, Execute-ProcessAsUser and Set-ActiveSetup
- Fixed an issue with Test-ServiceExists / Get-LoggedOnUser working in a Windows Sandbox. #1031 #1032 #1035
- Fixed an issue with log file rotation and log file permissions when running in user context. #1024 #1029 #1030
- Fixed a number of issues relating to Robocopy in Copy-Files. #868 #1015 #1020 #1021 #1038
- Fixed an issue where the Show-InstallationPrompt dialog would not display when run through MCM / SCCM in interactive mode. #1004 #1016
- Fixed an issue where Execute-ProcessAsUser would throw a terminating error when no user logged on #1027
- Fixed escaping of invalid characters in Block-AppExecution. #1036
- Fixed a number of issues in Set-ActiveSetup / Execute-ProcessAsUser. #1017
- Fixed an issue in French translations. #1019
- Fixed an issue with Get-FileVersion #1007
Full Changelog: 3.10.1...3.10.2
PSAppDeployToolkit 3.10.1
Version 3.10.1 [05/03/2024]
What's Changed
- Added Turkish language support. Fixes #973.
- Added parameter sets to Configure-EdgeExtensions to ensure mandatory parameters are correctly grouped.
- Added missing elements to XML for Finnish language. Fixes #967.
- Added -ExcludeServiceProfiles to Get-UserProfiles, add passthru of Exclude-ServiceProfiles/ExcludeSystemProfiles/ExcludeDefaultUser/ExcludeNTAccount to Copy-FileToUserProfiles & Remove-FileFromUserProfiles.
- Added back the folder structure, changelog, license, and examples to the release zip file.
- Added VLC and WinSCP as new example deployment scripts.
- Added ServiceUI launch helper script and launch testing batch files to examples.
- Added Contributing Guide, Code of Conduct, Security Policy and Support docs.
- Added GitHub form-based Bug Report and Feature Request templates.
- Added RoboCopyParams to Copy-File, which allows full override of Robocopy Parameters. Added /IT /IM to default parameters.
- Changed Welcome Prompt so that the Deferral Time Remaining is now bolded. App Title size was also slightly increased so as to remain more prominent.
- Changed button font so that text wasn't cut off for some localized languages. Fixes #980.
- Changed RunHidden.vbs to get rid of use of ArrayList as it caused problems on some systems.
- Changed Robocopy folder creation code to match native PowerShell Copy-File.
- Changed Execute-ProcessAsUser to include an example for executing the function using "LeastPrivilege".
- Fixed an issue where Execute-ProcessAsUser was not able to execute with RunLevel = 'LeastPrivilege' in some cases.
- Fixed an issue in Execute-ProcessAsUser where the command line for two of the examples was incorrect.
- Fixed an issue with Configure-EdgeExtensions where a new extension would not be added if no extensions were configured previously. Fixes #931 and #984.
- Fixed an issue where Robocopy mode of Copy-File fails to copy files or folders when path begis with "." or "..". Fixes #938.
- Fixed AppDeployToolkitExtensions.ps1 dot-sourcing to where it's always been dot-sourced from.
- Fixed PowerShell v2 and .NET 3.5 Compatibility. Fixes #948.
- Removed check on SecurityHealthSystray. Fixes #941.
- Removed the PDF documentation, the website will be the primary source for this going forward.
- Updated existing example deployment scripts.
- Updated Pull Request template.
- Updated Spanish translations. Fixes #805.
New Contributors
- @Mrman1093 made their first contribution in #927
- @khaffner made their first contribution in #928
Full Changelog: 3.10.0...3.10.1