MSI Parameters Not Working from SCCM

Hello i am trying to deploy MSI with custom parameters. When i run the powershell as a stand alone those parameters work, when i run them from SCCM as an application deployment parameters do not work for some reason. My code is as follows.

Execute-MSI -Action ‘Install’ -Path ‘HPE_RM_x86.msi’ -Parameters '/qn INSTALLDIR=“C:\Program Files\Hewlett-Packard\HP Records Manager” ADDLOCAL=HPTRIM,Client HPTRIMDIR=“C:\HP Records Manager” PRIMARYURL=“ServerName:1137” DEFAULTDBNAME=“DBName” DEFAULTDB=“Name” TRIM_DSK=“1” TRIMREF=“DSK” STARTMENU_FOLDER_ADMIN=“HP Records Manager” AUTOGG=“1” STARTMENU_NAME=“HP Records Manager”'

Any help would be appreciated.

No help??? I am sure some people had the same issues.

We’ll need a bit more information as to what isn’t working exactly if you could please. Are you getting error messages, if so what are those? Have you tried running that syntax against the MSI directly from command line/powershell to see what happens outside of the PSADTK?

Hi Kyle,

The MSI is not taking the parameters. ADDLOCAL=HPTRIM,Client HPTRIMDIR=“C:\HP Records Manager” PRIMARYURL=“ServerName:1137” DEFAULTDBNAME=“DBName” DEFAULTDB=“Name” TRIM_DSK=“1” TRIMREF=“DSK” STARTMENU_FOLDER_ADMIN=“HP Records Manager” AUTOGG=“1” STARTMENU_NAME=“HP Records Manager”

if i run PSAD from the desktop all the parameters work, however if i run the same thing in the content of sccm application push, those parameters are not being applied.

If working elsewhere, then you can attempt to use the -AddParameters option, as it will allow you to pass additional parameters through to the MSI that may be not be native to the toolkit. This may not be exact but would get you close:

-AddParameters "ADDLOCAL=""HPTRIM,Client"" HPTRIMDIR=""C:\HP Records Manager"" PRIMARYURL=""ServerName:1137"" DEFAULTDBNAME=""DBNAME"" TRM_DSK=""1"" TRIMREF=""DSK"" STARTMENU_FOLDER_ADMIN=""HP Records Manager"" AUTOGG=""1"" STARTMENU_NAME=""HP Records Manager"""

Make note of the triple quotes at the end. Give it a try and let us know how it goes.

I will try it and get back to you. Thank you.

Does this look right to you? this is everything after -AddParameters

-AddParameters "ALLUSERS=""1"" "INSTALLDIR=""C:\Program Files\Hewlett-Packard\HP Records Manager"" "ADDLOCAL=""HPTRIM,Client"" HPTRIMDIR=""C:\HP Records Manager"" PRIMARYURL=""ServerName:1137"" DEFAULTDBNAME=""DBNAME"" TRM_DSK=""1"" TRIMREF=""DSK"" STARTMENU_FOLDER_ADMIN=""HP Records Manager"" AUTOGG=""1"" STARTMENU_NAME=""HP Records Manager"""


I get this error message when running with a code above.

You had a could of extra quotes that shouldn’t have been there, try this:

-AddParameters "ALLUSERS=""1"" INSTALLDIR=""C:\Program Files\Hewlett-Packard\HP Records Manager"" ADDLOCAL=""HPTRIM,Client"" HPTRIMDIR=""C:\HP Records Manager"" PRIMARYURL=""ServerName:1137"" DEFAULTDBNAME=""DBNAME"" TRM_DSK=""1"" TRIMREF=""DSK"" STARTMENU_FOLDER_ADMIN=""HP Records Manager"" AUTOGG=""1"" STARTMENU_NAME=""HP Records Manager"""

it still won’t do it :sob:
I am at a loss, i need to deploy this app, and this hasn’t been working for me for past few weeks…
Anything else i ca do?

Hmm, that’s quite strange. Have you made changes to any of the other PS configuration files, or perhaps the Deploy-Application.exe.config by chance? Can you send paste/send over the entire Deploy-Application.ps1 script that you’re trying to run, omitting any PII/sensitive data of course?

Why not make a MST file with your settings and use that instead?

1 Like

Definitely can try this approach only caveat being that the installer allows for MST files to be passed to it. For sure worth a shot if you can’t get it working otherwise!

No changes to the config file.

<#
.SYNOPSIS
This script performs the installation or uninstallation of an application(s).
# LICENSE #
PowerShell App Deployment Toolkit - Provides a set of functions to perform common application deployment tasks on Windows.
Copyright © 2017 - Sean Lillis, Dan Cunningham, Muhammad Mashwani, Aman Motazedian.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this program. If not, see http://www.gnu.org/licenses/.
.DESCRIPTION
The script is provided as a template to perform an install or uninstall of an application(s).
The script either performs an “Install” deployment type or an “Uninstall” deployment type.
The install deployment type is broken down into 3 main sections/phases: Pre-Install, Install, and Post-Install.
The script dot-sources the AppDeployToolkitMain.ps1 script which contains the logic and functions required to install or uninstall an application.
.PARAMETER DeploymentType
The type of deployment to perform. Default is: Install.
.PARAMETER DeployMode
Specifies whether the installation should be run in Interactive, Silent, or NonInteractive mode. Default is: Interactive. Options: Interactive = Shows dialogs, Silent = No dialogs, NonInteractive = Very silent, i.e. no blocking apps. NonInteractive mode is automatically set if it is detected that the process is not user interactive.
.PARAMETER AllowRebootPassThru
Allows the 3010 return code (requires restart) to be passed back to the parent process (e.g. SCCM) if detected from an installation. If 3010 is passed back to SCCM, a reboot prompt will be triggered.
.PARAMETER TerminalServerMode
Changes to “user install mode” and back to “user execute mode” for installing/uninstalling applications for Remote Destkop Session Hosts/Citrix servers.
.PARAMETER DisableLogging
Disables logging to file for the script. Default is: $false.
.EXAMPLE
powershell.exe -Command “& { & ‘.\Deploy-Application.ps1’ -DeployMode ‘Silent’; Exit $LastExitCode }”
.EXAMPLE
powershell.exe -Command “& { & ‘.\Deploy-Application.ps1’ -AllowRebootPassThru; Exit $LastExitCode }”
.EXAMPLE
powershell.exe -Command “& { & ‘.\Deploy-Application.ps1’ -DeploymentType ‘Uninstall’; Exit $LastExitCode }”
.EXAMPLE
Deploy-Application.exe -DeploymentType “Install” -DeployMode “Silent”
.NOTES
Toolkit Exit Code Ranges:
60000 - 68999: Reserved for built-in exit codes in Deploy-Application.ps1, Deploy-Application.exe, and AppDeployToolkitMain.ps1
69000 - 69999: Recommended for user customized exit codes in Deploy-Application.ps1
70000 - 79999: Recommended for user customized exit codes in AppDeployToolkitExtensions.ps1
.LINK
http://psappdeploytoolkit.com
#>
[CmdletBinding()]
Param (
[Parameter(Mandatory=$false)]
[ValidateSet(‘Install’,‘Uninstall’)]
[string]$DeploymentType = ‘Install’,
[Parameter(Mandatory=$false)]
[ValidateSet(‘Interactive’,‘Silent’,‘NonInteractive’)]
[string]$DeployMode = ‘Interactive’,
[Parameter(Mandatory=$false)]
[switch]$AllowRebootPassThru = $false,
[Parameter(Mandatory=$false)]
[switch]$TerminalServerMode = $false,
[Parameter(Mandatory=$false)]
[switch]$DisableLogging = $false
)

Try {
## Set the script execution policy for this process
Try { Set-ExecutionPolicy -ExecutionPolicy ‘ByPass’ -Scope ‘Process’ -Force -ErrorAction ‘Stop’ } Catch {}

##*===============================================
##* VARIABLE DECLARATION
##*===============================================
## Variables: Application
[string]$appVendor = 'Hewlett Packard'
[string]$appName = 'HPRM'
[string]$appVersion = '8.3'
[string]$appArch = 'x64'
[string]$appLang = 'EN'
[string]$appRevision = '01'
[string]$appScriptVersion = '1.0.0'
[string]$appScriptDate = '11/11/2019'
[string]$appScriptAuthor = 'Eugene Karazhov'
##*===============================================
## Variables: Install Titles (Only set here to override defaults set by the toolkit)
[string]$installName = ''
[string]$installTitle = ''

##* Do not modify section below
#region DoNotModify

## Variables: Exit Code
[int32]$mainExitCode = 0

## Variables: Script
[string]$deployAppScriptFriendlyName = 'Deploy Application'
[version]$deployAppScriptVersion = [version]'3.8.0'
[string]$deployAppScriptDate = '23/09/2019'
[hashtable]$deployAppScriptParameters = $psBoundParameters

## Variables: Environment
If (Test-Path -LiteralPath 'variable:HostInvocation') { $InvocationInfo = $HostInvocation } Else { $InvocationInfo = $MyInvocation }
[string]$scriptDirectory = Split-Path -Path $InvocationInfo.MyCommand.Definition -Parent

## Dot source the required App Deploy Toolkit Functions
Try {
	[string]$moduleAppDeployToolkitMain = "$scriptDirectory\AppDeployToolkit\AppDeployToolkitMain.ps1"
	If (-not (Test-Path -LiteralPath $moduleAppDeployToolkitMain -PathType 'Leaf')) { Throw "Module does not exist at the specified location [$moduleAppDeployToolkitMain]." }
	If ($DisableLogging) { . $moduleAppDeployToolkitMain -DisableLogging } Else { . $moduleAppDeployToolkitMain }
}
Catch {
	If ($mainExitCode -eq 0){ [int32]$mainExitCode = 60008 }
	Write-Error -Message "Module [$moduleAppDeployToolkitMain] failed to load: `n$($_.Exception.Message)`n `n$($_.InvocationInfo.PositionMessage)" -ErrorAction 'Continue'
	## Exit the script, returning the exit code to SCCM
	If (Test-Path -LiteralPath 'variable:HostInvocation') { $script:ExitCode = $mainExitCode; Exit } Else { Exit $mainExitCode }
}

#endregion
##* Do not modify section above
##*===============================================
##* END VARIABLE DECLARATION
##*===============================================

If ($deploymentType -ine 'Uninstall') {
	##*===============================================
	##* PRE-INSTALLATION
	##*===============================================
	[string]$installPhase = 'Pre-Installation'

	## Show Welcome Message, close Internet Explorer if required, allow up to 3 deferrals, verify there is enough disk space to complete the install, and persist the prompt
	#Show-InstallationWelcome -CloseApps 'iexplore' -AllowDefer -DeferTimes 3 -CheckDiskSpace -PersistPrompt

	## Show Progress Message (with the default message)

	## <Perform Pre-Installation tasks here>


	##*===============================================
	##* INSTALLATION
	##*===============================================
	[string]$installPhase = 'Installation'

	## Handle Zero-Config MSI Installations
	If ($useDefaultMsi) {
		[hashtable]$ExecuteDefaultMSISplat =  @{ Action = 'Install'; Path = $defaultMsiFile }; If ($defaultMstFile) { $ExecuteDefaultMSISplat.Add('Transform', $defaultMstFile) }
		Execute-MSI @ExecuteDefaultMSISplat; If ($defaultMspFiles) { $defaultMspFiles | ForEach-Object { Execute-MSI -Action 'Patch' -Path $_ } }
	}

	## <Perform Installation tasks here>
	Show-InstallationProgress -StatusMessage "Installing HPRM. `n Please Waite..." -TopMost $false
    
    Show-InstallationProgress -StatusMessage "Installing VS2010_Runtimes_x86. `n Please Waite..." -TopMost $false
    Execute-MSI -Action 'Install' -Path 'VS2010_Runtimes_x86.msi' -Parameters '/qn'

    Show-InstallationProgress -StatusMessage "Installing VS2013_Runtimes_x86. `n Please Waite..." -TopMost $false
    Execute-MSI -Action 'Install' -Path 'VS2013_Runtimes_x86.msi' -Parameters '/qn'

    Show-InstallationProgress -StatusMessage "Installing HPRM. `n Please Waite..." -TopMost $false
    Execute-MSI -Action 'Install' -Path 'HPE_RM_x86.msi' -AddParameters "ALLUSERS=""1"" INSTALLDIR=""C:\Program Files\Hewlett-Packard\HP Records Manager"" ADDLOCAL=""HPTRIM,Client"" HPTRIMDIR=""C:\HP Records Manager"" PRIMARYURL=""ServerName:1137"" DEFAULTDBNAME=""DBNAME"" TRM_DSK=""1"" TRIMREF=""DSK"" STARTMENU_FOLDER_ADMIN=""HP Records Manager"" AUTOGG=""1"" STARTMENU_NAME=""HP Records Manager"""



    ##*===============================================
	##* POST-INSTALLATION
	##*===============================================
	[string]$installPhase = 'Post-Installation'

	## <Perform Post-Installation tasks here>

    Copy-File -Path "$dirSupportFiles\Project\*.*" -Destination "$envProgramFilesX86\Hewlett Packard Enterprise\Records Manager"

    Copy-File -Path "$dirSupportFiles\projects.xml" -Destination "$envUserProfile\AppData\Local\Temp"

    Copy-File -Path "$dirSupportFiles\Project\MGM Project Browser - Shortcut.lnk" -Destination "$envCommonDesktop\MGM Project Browser - Shortcut.lnk"

    Remove-File -Path "$envCommonDesktop\HPE RM Queue Processor.lnk"

    Remove-File -Path "$envCommonDesktop\HPE RM Desktop.lnk"


    ## Display a message at the end of the install
	If (-not $useDefaultMsi) { Show-InstallationPrompt -Message 'HPRM Successfully Installed.' -ButtonRightText 'OK' -Icon Information -NoWait }
}
ElseIf ($deploymentType -ieq 'Uninstall')
{
	##*===============================================
	##* PRE-UNINSTALLATION
	##*===============================================
	[string]$installPhase = 'Pre-Uninstallation'

	## Show Welcome Message, close Internet Explorer with a 60 second countdown before automatically closing
	#Show-InstallationWelcome -CloseApps 'iexplore' -CloseAppsCountdown 60

	## Show Progress Message (with the default message)


	## <Perform Pre-Uninstallation tasks here>


	##*===============================================
	##* UNINSTALLATION
	##*===============================================
	[string]$installPhase = 'Uninstallation'

	## Handle Zero-Config MSI Uninstallations
	#If ($useDefaultMsi) {
	#	[hashtable]$ExecuteDefaultMSISplat =  @{ Action = 'Uninstall'; Path = $defaultMsiFile }; If ($defaultMstFile) { $ExecuteDefaultMSISplat.Add('Transform', $defaultMstFile) }
	#	Execute-MSI @ExecuteDefaultMSISplat
	#}

	# <Perform Uninstallation tasks here>
    #Show-InstallationProgress -StatusMessage 'HPRM Uninstallation'
	#Execute-MSI -Action 'Uninstall' -Path '{34A66242-34A2-4049-9808-1A693370FACE}'

	## <Perform Post-Uninstallation tasks here>


}

##*===============================================
##* END SCRIPT BODY
##*===============================================

## Call the Exit-Script function to perform final cleanup operations
Exit-Script -ExitCode $mainExitCode

}
Catch {
[int32]$mainExitCode = 60001
[string]mainErrorMessage = "(Resolve-Error)"
Write-Log -Message $mainErrorMessage -Severity 3 -Source $deployAppScriptFriendlyName
Show-DialogBox -Text $mainErrorMessage -Icon ‘Stop’
Exit-Script -ExitCode $mainExitCode
}

What format would i use for MST file? I mean in regards to quotations and all.

ALLUSERS=1 /qn INSTALLDIR="C:\Program Files\Hewlett-Packard\HP Records Manager" ADDLOCAL=HPTRIM,Client HPTRIMDIR="C:\HP Records Manager" PRIMARYURL="server:1137"  DEFAULTDBNAME="PRD" DEFAULTDB="MP" TRIM_DSK="1" TRIMREF="DSK" STARTMENU_FOLDER_ADMIN="HP Records Manager" AUTOGG="1" STARTMENU_NAME="HP Records Manager"

Would this work?

You’d have to create the MST file then call to it during install if you go that route. If you cannot create a MST while doing the install locally, you’d have to have software that is able to create a MST file for you, e.g. Flexara, Pace, etc.

Question though, the directory you reference in the this: “C:\Program Files\Hewlett-Packard\HP Records Manager”, does it exist on the system you are testing already?

I think i see where you are going with this. That directory does not exist. However if i use the same parameters with PDQ everything works. If i use the same parameters from the command prompt they work… so i am at lost why would it now work with PSADTK? I am taking the parameters directly out of their install instructions. they are suggesting it using a batch file though…

I am not entirely sure, but my guess is that the PSADTK is trying to write the log files to a directory that doesn’t exist. You can always test this by creating that directory (empty) and then running the Deploy-Application and seeing if it works. If that works, you’ll have to find a way to pipe the log location to somewhere that already would exist on the machines you’re deploying to. Reading through the documentation for that MSI deployment it does appear there should be a way to do that.

An MST file is not a cleartext file.
I would use InstEd from http://www.instedit.com/ to create the file.
When you do, you don’t need quotation.

1 Like

You could use Master Packager. The free version will let you create a transform (MST)


Once you have created the mst put it in a folder with the MSI.
double click the MST (will open in Master Packager)
top left of master packager second tab along (looks like a grid) - click it.
Find the property table in the list on the left. - click it.
In the right window right click - add row.
Enter your property (must be UPPERCASE)
enter your value.
repeat for all your properties such as ADDLOCAL / INSTALLDIR
Save
To install the MSI with your transform its easy.
MSIEXEC /i “MSINAME” transforms=“MSTNAME.MST” /qn

If you are using PSAPPDTK then just put the MSI and MST in the files folder, no script adjustments will be needed from default.

2 Likes