V4.1.6(test version) -Show-ADTInstallationWelcome not showing in NonInteractive DeployMode

Hi,
I am using 4.1.6, having an issue where Show-ADTInstallationWelcome is not showing in NonInteractive deploy mode. The script seems to skip past it and go right to the install phase.

Here is my code:

    # Default is 'Auto'. Don't hard-code this unless required.
    [Parameter(Mandatory = $false)]
    [ValidateSet('Auto', 'Interactive', 'NonInteractive', 'Silent')]
    [System.String]$DeployMode,
    ##================================================
    ## MARK: Pre-Install
    ##================================================
        $adtSession.InstallPhase = "Pre-$($adtSession.DeploymentType)"

    ## Show Welcome Message, close processes if specified, allow up to 3 deferrals, and persist the prompt.
    $saiwParams = @{
        AllowDefer = $true
        DeferTimes = 3
        CheckDiskSpace = $false
        PersistPrompt = $true
        
    }
    if ($adtSession.AppProcessesToClose.Count -gt 0)
    {
        $saiwParams.Add('CloseProcesses', $adtSession.AppProcessesToClose)
    }
    Show-ADTInstallationWelcome @saiwParams -ForceCloseProcessesCountdown 600 -CustomText

    ## Show Progress Message (with the default message).
    Show-ADTInstallationProgress
    $adtSession.InstallPhase = "Pre-$($adtSession.DeploymentType)"

The only ways that have been able to get Show-ADTInstallationWelcome to appear is:

  1. If I have Dell Command | Update running when I try and run PSADT.
  2. If I change $DeployMode to Interactive. However if I change it to Interactive Invoke-AppDeployToolkit.ps1 fails if a user is not logged in.

I am unable to get my script running in a task sequence without using ServiceUI which I understand shouldn't be needed anymore. Right now I have a step in my task sequence that downloads the PSADT package and then a run command line step that runs Invoke-AppDeployToolkit.exe using ServiceUI.

Who's meant to receive the dialog if no one's logged onto the device? Where is the deployment package running from? Is the device in the OOBE? Is it mid-way through an Autopilot pre-provisioning cycle?

No one is meant to receive the dialog if no one is logged on. There's a 10 minute countdown after which the install should proceed on its own. If no one is logged on the install does not run.

If $DeployMode is set to Interactive:

  1. Logged on user sees dialog.
  2. No logged on user, install does not run.

If $DeployMode is set to NonInteractive:

  1. Logged on user does not see dialog and install proceeds.
  2. No logged on user, install runs.

I want a logged on user to see the welcome dialog so they can choose to defer. If there's no logged on user I want the install to proceed without the need for user interaction.

So, why are you specifying Interactive mode at all? Just specify nothing and it'll default to Auto mode.

Because when I don't specify anything I see this behavior:

  1. Logged on user does not see dialog and install proceeds, no option to defer.
  2. No logged on user, install runs

I can only imagine you've got processes in the AppProcessesToClose array and they're not open. If so, you'll need to add NoProcessDetection = $true into your $adtSession hashtable to disable to automatic silencing under such conditions.

I do have processes in there that need to be closed.

Works under SCCM and Intune = only if the user is logged in - RunAS Admin only from 4.1.6 - try
if ($RunAsActiveUser) {if {Show-ADTInstallationWelcome @saiwParams}}

Sorry, I don't understand what you mean. Could you explain that a bit further please?

I didn't understand you, because you were talking about ServiceUI, which is for Intune and according to PSADT-Team, should no longer be used.

We are not preparing it for Intune (until further notice) - Dell Driver/BIOS Update for Intune (Microsoft)

I have to see if I can build a 4.1.5 for you, since you're only interested in the dialog.
get in touch

I have DCU 5.5.0 in SCCM (silent under user or provisioning mode/staging).
This requires .NET Desktop Runtime x64 8.0.xx Download .NET 8.0 (Linux, macOS, and Windows) | .NET
During the basic installation, I set a few parameters that can only be set via command (not via Reg / in consultation with Dell) = the user can only update drivers (BIOS/firmware) via the admin.
There is a separate package for drivers.
For BIOS & firmware updates, I have a separate settings package where BitLocker is disabled. is

only a partial excerpt below

DCU Primary Package
PSADT 4.0.6
##================================================
## MARK: Variables
##================================================

$adtSession = @{
InstallName = '900100-DCU 5.5.0_x64'
[string]$MyExeFile ='Dell-Command-Update-Windows-Universal-Application_C8JXV_WIN64_5.5.0_A00_01.EXE'
[string]$MyArgumentList='/s /l=C:\Logfiles\Software\900100-DellCommandUpdateUniversalApplication-5.5.0.log'
    
	# x86
    [string]$MyRemovex86='Dell Command | Update'
    #x64
    [string]$MyRemovex64='Dell Command | Update for Windows Universal'
}

function Install-ADTDeployment
{
    ##================================================
    ## MARK: Pre-Install
    ##================================================ 


    # Powershell Funktion
    if (Get-Service -Name 'DellClientManagementService' -ErrorAction SilentlyContinue)
        {
        Stop-Service -Name 'DellClientManagementService'
        Write-ADTLogEntry -Message "DellClientManagementService-Dienst wurde gestoppt."
    } else {Write-ADTLogEntry -Message "DellClientManagementService-Dienst ist nicht vorhanden."}
    Start-Sleep -Seconds 10
	
   Uninstall-ADTApplication -Name $MyRemovex86 -ApplicationType 'MSI'
   Uninstall-ADTApplication -Name $MyRemovex64 -ApplicationType 'MSI'

    ##================================================
    ## MARK: Install
    ##================================================
    $adtSession.InstallPhase = $adtSession.DeploymentType

Start-ADTProcess -FilePath $MyExeFile -ArgumentList $MyArgumentList -IgnoreExitCodes 2


#region Parameter: Verwende keine Reg-Werte, dies wird ab der Version 4.9 unterbunden  
$MyCheck=$Null
$MyCheck=test-path 'C:\Program Files\Dell\CommandUpdate'
	
# Settings
   Write-ADTLogEntry "** DCU Settings"
    if ($MyCheck -like $true) 
      {
        
        Write-ADTLogEntry "** Ausführung Setting Manuel"
        $MyParm=' /configure -scheduleManual'
        Write-ADTLogEntry "** File: $MyParm"
        Start-ADTProcess -FilePath 'C:\Program Files\Dell\CommandUpdate\dcu-cli.exe' -ArgumentList  $MyParm
 
        Write-ADTLogEntry "** damit es heruntergeladen wird und der User informiert wird"
        $MyParm=' /configure -scheduleAction=NotifyAvailableUpdates'
        Write-ADTLogEntry "** File: $MyParm"
        Start-ADTProcess -FilePath 'C:\Program Files\Dell\CommandUpdate\dcu-cli.exe' -ArgumentList  $MyParm
             
        Write-ADTLogEntry "** Update auf driver,others,application,utility"
        $MyParm=' /configure -updateType=driver,others,application,utility'
        Write-ADTLogEntry "** File: $MyParm"
        Start-ADTProcess -FilePath  'C:\Program Files\Dell\CommandUpdate\dcu-cli.exe' -ArgumentList  $MyParm

        Write-ADTLogEntry "** keine erweitere Treiberwiederherstellung erlauben"
        $MyParm=' /configure -advancedDriverRestore=disable'
        Write-ADTLogEntry "** File: $MyParm"
        Start-ADTProcess -FilePath  'C:\Program Files\Dell\CommandUpdate\dcu-cli.exe' -ArgumentList  $MyParm

        Write-ADTLogEntry "** Bitlocker automatisch deaktiviert, wenn es nötig ist"
        $MyParm=' /configure -autoSuspendBitLocker=enable'
        Write-ADTLogEntry "** File: $MyParm"
        Start-ADTProcess -FilePath  'C:\Program Files\Dell\CommandUpdate\dcu-cli.exe' -ArgumentList  $MyParm

        Write-ADTLogEntry "** Setting nicht änderbar"
        $MyParm=' /configure -lockSettings=enable'
        Write-ADTLogEntry "** File: $MyParm"
        Start-ADTProcess -FilePath  'C:\Program Files\Dell\CommandUpdate\dcu-cli.exe' -ArgumentList  $MyParm
      }
    #endregion

Run Driver Update SCCM
I only worked out the settings with PSADT 3.8.4

    ##================================================
    ## MARK: Install
    ##================================================
    $adtSession.InstallPhase = $adtSession.DeploymentType

       	# nur Deutsch ohne Vadea
        if ($MyLanguage -like "de-DE"  ) 
          {
            Write-host "nur Deutsch"
            # $MyMessage="Es kann zur Trennung der Netzverbindung führen, bitte sichern sie ihre geöffneten Daten oder schliessen sie die Applikationen"
            $MyMessage="10 Minuten Zeit bevor der Download,Installation startet. Es kann zur Trennung der Netzverbindung (LAN,WI), Monitoranzeige und USB (Tastatur, Mouse) führen, bitte sichern sie ihre geöffneten Daten und schliessen sie die Applikationen. Es ist nicht möglich eine Zeitangabe für den Prozess zu machen."
          }

        # nur French
        if ($MyLanguage -like "fr-Fr" ) 
          {
            Write-host "nur Französisch"
            # $MyMessage="Cela peut entraîner la déconnexion de la connexion réseau, veuillez enregistrer vos données ouvertes ou fermer les applications"
            $MyMessage="Veuillez patienter 10 minutes avant le début du téléchargement et de l'installation. Cela pourrait entraîner la déconnexion de la connexion réseau (LAN, Wi-Fi), de l'écran et des connexions USB (clavier, souris). Veuillez sauvegarder vos données ouvertes et fermer les applications. Il n'est pas possible de spécifier une durée pour le processus."
          }

        Show-DialogBox -Title 'Installation - IT Helpdesk' -Text $MyMessage -Buttons 'OK' -Timeout 600 -Icon Information 

        $MyCheck=$Null
        $MyCheck=test-path 'C:\Program Files\Dell\CommandUpdate'

        if ($MyCheck -like $true) 
          {
            
            Write-Log "** Verzeichnis C:\Program Files\Dell\CommandUpdate vorhanden"
            Set-Location -Path 'C:\Program Files\Dell\CommandUpdate'

            Write-Log "** Push driver,others,application,utility"
            
            # $MyParm='/applyUpdates -outputLog=C:\Logfiles\DellUpdates.log'
            # lt. Dell Oliver Duesterhoeft
            $MyParm='/applyUpdates -forceupdate=enable -outputLog=C:\Logfiles\DellUpdates-Must.log'
            
            Write-Log "** File: $MyParm"
            Execute-Process -Path 'C:\Program Files\Dell\CommandUpdate\dcu-cli.exe' -Parameters $MyParm -IgnoreExitCodes '1,500'

          }

@Blaine_Kehl, please just try what I've suggested as I believe it'll resolve your issue.

Now I misunderstood you. You need something to close this function. DCU doesn't have anything here, so I don't understand it.

Otherwise, you must first explain to me what you want to achieve and if I have time, I will take a look


PSADT 4.1.5
PSADT fixed it, wait until OK or 10 min are finished

function Install-ADTDeployment
{
    [CmdletBinding()]
    param
    (
    )

    ##================================================
    ## MARK: Pre-Install
    ##================================================
    $adtSession.InstallPhase = "Pre-$($adtSession.DeploymentType)"

    ## Show Welcome Message, close processes if specified, allow up to 3 deferrals, verify there is enough disk space to complete the install, and persist the prompt.

    #region siehe Hilfe
    $saiwParams = @{
        AllowDefer = $true
        DeferTimes = 3
        CheckDiskSpace = $true
        PersistPrompt = $true
    }
    if ($adtSession.AppProcessesToClose.Count -gt 0)
    {
        $saiwParams.Add('CloseProcesses', $adtSession.AppProcessesToClose)
    }


    $MyMessages='Test only'

    $MyUser=$RunAsActiveUser.Username
    Write-ADTLogEntry -Message "angemelderter User: $MyUser"
    Write-ADTLogEntry -Message $RunAsActiveUser
    
    Write-ADTLogEntry -Message "==== Check Dialog ==== "
    # if ($RunAsActiveUser) {{Show-ADTInstallationWelcome @saiwParams -CustomText $MyMessages} }
    # Show-ADTInstallationWelcome -CustomText $MyMessages
    
    # PSADT fixed it, wait until OK or 10 min are finished
    # With Dell update nothing needs to be closed
    if ($MyUser) {if (!$adtSession.UseDefaultMsi) {Show-ADTInstallationPrompt -Title 'Installation - IT Helpdesk'  -Message $MyMessages -ButtonRightText 'OK' -Icon Information -Timeout 600} }
    
    # setzt voraus, dass man was schliesst, doch ich sehe hier keinen Sinn
    # assumes that you close something, but I don't see any point here
    # if ($RunAsActiveUser) {{Show-ADTInstallationWelcome} }
    # if ($RunAsActiveUser) {{Show-ADTInstallationWelcome -CustomText $MyMessages } }
    
    Write-ADTLogEntry -Message "==== Check Dialog ==== "
     #endregion

    ## Show Progress Message (with the default message).
    Show-ADTInstallationProgress


    ##================================================
    ## MARK: Install
    ##================================================
    $adtSession.InstallPhase = $adtSession.DeploymentType

    ## Handle Zero-Config MSI installations.
    if ($adtSession.UseDefaultMsi)
    {
        $ExecuteDefaultMSISplat = @{ Action = $adtSession.DeploymentType; FilePath = $adtSession.DefaultMsiFile }
        if ($adtSession.DefaultMstFile)
        {
            $ExecuteDefaultMSISplat.Add('Transforms', $adtSession.DefaultMstFile)
        }
        Start-ADTMsiProcess @ExecuteDefaultMSISplat
        if ($adtSession.DefaultMspFiles)
        {
            $adtSession.DefaultMspFiles | Start-ADTMsiProcess -Action Patch
        }
    }

    ## <Perform Installation tasks here>
    Write-ADTLogEntry -Message "Installation"
    $MyCheck=$Null
    $MyCheck=test-path 'C:\Program Files\Dell\CommandUpdate'

    if ($MyCheck -like $true) 
        {
            Write-ADTLogEntry -Message "** Push driver,others,application,utility"
            $MyParm='/applyUpdates -forceupdate=enable -outputLog=C:\Logfiles\DellUpdates-Test.log'
            Write-ADTLogEntry -Message "==== Check MyParm ==== "
            Write-ADTLogEntry -Message $MyParm
            Write-ADTLogEntry -Message "==== Check MyParm ==== "
            Start-ADTProcess -FilePath 'C:\Program Files\Dell\CommandUpdate\dcu-cli.exe' -ArgumentList $MyParm
        }    

error-free

I need to check if Dell Command Update is running and close it if so, won't NoProcessDetection = $true prevent that from happening?

Thanks! I'll give it a try.