Upload from CMSource
This commit is contained in:
441
BPC STARS/Firefox Portable/PS_Deployment/Deploy-Application.ps1
Normal file
441
BPC STARS/Firefox Portable/PS_Deployment/Deploy-Application.ps1
Normal file
@@ -0,0 +1,441 @@
|
||||
<#
|
||||
.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 (C) 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', 'Repair')]
|
||||
[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 = 'NCHRI BioPathology Center'
|
||||
[string]$appName = 'BPC Stars'
|
||||
[string]$appVersion = ''
|
||||
[string]$appArch = ''
|
||||
[string]$appLang = 'EN'
|
||||
[string]$appRevision = '01'
|
||||
[string]$appScriptVersion = '1.0.0'
|
||||
[string]$appScriptDate = '04/02/2021'
|
||||
[string]$appScriptAuthor = 'John Palmer'
|
||||
##*===============================================
|
||||
## 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.3'
|
||||
[string]$deployAppScriptDate = '30/09/2020'
|
||||
[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' -and $deploymentType -ine 'Repair')
|
||||
{
|
||||
##*===============================================
|
||||
##* 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
|
||||
|
||||
$ProcessActive = Get-Process FirefoxPOrtable -ErrorAction SilentlyContinue
|
||||
|
||||
if ($ProcessActive -eq $null)
|
||||
{
|
||||
Write-Log "BPC Stars is not currently running, continuing with the installation."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Log "BPC Stars is currently running, prompting the user to close the application before continuing."
|
||||
Show-InstallationWelcome -CloseApps 'FirefoxPOrtable,firefox' -AllowDefer -DeferTimes 3 -CheckDiskSpace -PersistPrompt
|
||||
}
|
||||
|
||||
## Show Progress Message (with the default message)
|
||||
#Show-InstallationProgress
|
||||
|
||||
## <Perform Pre-Installation tasks here>
|
||||
|
||||
## Remove any of the old BPC Stars Shortcuts from the Public Desktop ##
|
||||
|
||||
$OldProdLnk = Test-Path "C:\Users\Public\Desktop\STARS PROD.lnk"
|
||||
$OldUAT2lnk = Test-Path "C:\Users\Public\Desktop\STARS UAT2.lnk"
|
||||
$OldUAT1lnk = Test-Path "C:\Users\Public\Desktop\STARS UAT1.lnk"
|
||||
$OldBreaKFix = Test-Path "C:\Users\Public\Desktop\Breakfix.lnk"
|
||||
$OldTraining = Test-Path "C:\Users\Public\Desktop\STARS_Training Portable.lnk"
|
||||
$OldProdPort = Test-Path "C:\Users\Public\Desktop\STARS PROD Portable.lnk"
|
||||
|
||||
If ($OldProdLnk -eq "True")
|
||||
{
|
||||
Write-Log "Removing Stars Prod Public Desktop Shortcut."
|
||||
Remove-File -Path "C:\Users\Public\Desktop\STARS PROD.lnk" -Recurse
|
||||
|
||||
}
|
||||
|
||||
|
||||
If ($OldUAT2lnk -eq "True")
|
||||
{
|
||||
Write-Log "Removing Stars UAT2 Public Desktop Shortcut."
|
||||
Remove-File -Path "C:\Users\Public\Desktop\STARS UAT2.lnk" -Recurse
|
||||
}
|
||||
|
||||
|
||||
|
||||
If ($OldUAT1lnk -eq "True")
|
||||
{
|
||||
|
||||
Write-Log "Removing Stars UAT1 Public Desktop Shortcut."
|
||||
Remove-File -Path "C:\Users\Public\Desktop\STARS UAT1.lnk" -Recurse
|
||||
}
|
||||
|
||||
|
||||
|
||||
If ($OldBreaKFix -eq "True")
|
||||
{
|
||||
Write-Log "Removing Stars UAT1 Public Desktop Shortcut."
|
||||
Remove-File -Path "C:\Users\Public\Desktop\STARS UAT1.lnk" -Recurse
|
||||
}
|
||||
|
||||
If ($OldTraining -eq "True")
|
||||
{
|
||||
Write-Log "Removing Stars UAT1 Public Desktop Shortcut."
|
||||
Remove-File -Path "C:\Users\Public\Desktop\STARS_Training Portable.lnk" -Recurse
|
||||
}
|
||||
|
||||
if ($OldProdPort -eq "True")
|
||||
{
|
||||
Write-Log "Removing Stars UAT1 Public Desktop Shortcut."
|
||||
Remove-File -Path "C:\Users\Public\Desktop\STARS PROD Portable.lnk" -Recurse
|
||||
|
||||
}
|
||||
|
||||
|
||||
## Remove any of the old BPC Stars Shortcuts from the Users Desktop ##
|
||||
|
||||
$Users = Get-ChildItem -Path "C:\Users"
|
||||
|
||||
foreach ($user in $Users)
|
||||
{
|
||||
Remove-Item -Path "C:\Users\$user\Desktop\STARS PROD.lnk" -Recurse
|
||||
Remove-Item -Path "C:\Users\$user\Desktop\STARS UAT2.lnk" -Recurse
|
||||
Remove-Item -Path "C:\Users\$user\Desktop\STARS UAT1.lnk" -Recurse
|
||||
Remove-Item -Path "C:\Users\$user\Desktop\Breakfix.lnk" -Recurse
|
||||
Remove-Item -Path "C:\Users\$user\Desktop\STARS_Training Portable.lnk" -Recurse
|
||||
Remove-Item -Path "C:\Users\$user\Desktop\STARS PROD Portable.lnk" -Recurse
|
||||
|
||||
}
|
||||
|
||||
## Remove the previous BCP Stars Install ##
|
||||
|
||||
$OldStars = Test-Path "C:\Program Files (x86)\STARS\"
|
||||
|
||||
If ($OldStars -eq "True")
|
||||
{
|
||||
Write-Log "A version of BPC Stars is already installed, removing it and replacing it with the latest."
|
||||
Remove-File -Path "C:\Program Files (x86)\STARS\" -Recurse
|
||||
|
||||
}
|
||||
|
||||
##*===============================================
|
||||
##* 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>
|
||||
|
||||
New-Folder -Path "C:\Program Files (x86)\STARS\FireFoxPortable"
|
||||
|
||||
Copy-Item -Path "$dirFiles\FireFox Portable 75\*" -Destination "C:\Program Files (x86)\STARS\FireFoxPortable" -Recurse
|
||||
|
||||
|
||||
## Copy the Icons to the Public Desktop ##
|
||||
|
||||
Write-Log "Copy the new shortcuts to the Public Desktop"
|
||||
|
||||
Copy-Item -Path "C:\Program Files (x86)\STARS\FireFoxPortable\*.lnk" -Destination "C:\Users\Public\Desktop"
|
||||
|
||||
Refresh-Desktop
|
||||
|
||||
|
||||
##*===============================================
|
||||
##* POST-INSTALLATION
|
||||
##*===============================================
|
||||
[string]$installPhase = 'Post-Installation'
|
||||
|
||||
## <Perform Post-Installation tasks here>
|
||||
|
||||
|
||||
<# Legacy Block, unnecessary complication.
|
||||
|
||||
## Create a custom registry entry so that the application can be detected from SCCM ##
|
||||
|
||||
$HKLMCustomApp = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\BPC STARS"
|
||||
|
||||
New-Item -Path $HKLMCustomApp
|
||||
|
||||
Set-ItemProperty -Path $HKLMCustomApp -Name DisplayName "BPC STARS (Only Uninstall from Software Center)"
|
||||
Set-ItemProperty -Path $HKLMCustomApp -Name DisplayIcon "C:\Program Files (x86)\STARS\FireFoxPortable 75\firefox_0000.ico"
|
||||
Set-ItemProperty -Path $HKLMCustomApp -Name UninstallString "C:\Program Files (x86\STARS\FireFoxPortable 75\firefoxportable.exe"
|
||||
Set-ItemProperty -Path $HKLMCustomApp -Name DisplayVersion "75.0"
|
||||
Set-ItemProperty -Path $HKLMCustomApp -Name Publisher "NCHRI Biopathology Center"
|
||||
|
||||
$Name = "NoModify"
|
||||
$value = "1"
|
||||
|
||||
|
||||
IF (!(Test-Path $HKLMCustomApp))
|
||||
{
|
||||
|
||||
New-Item -Path $HKLMCustomApp -Force | Out-Null
|
||||
|
||||
New-ItemProperty -Path $HKLMCustomApp -Name $name -Value $value -PropertyType DWORD -Force | Out-Null
|
||||
}
|
||||
|
||||
ELSE
|
||||
{
|
||||
|
||||
New-ItemProperty -Path $HKLMCustomApp -Name $name -Value $value -PropertyType DWORD -Force | Out-Null
|
||||
}
|
||||
|
||||
#>
|
||||
|
||||
## Set the Permissions on the Firefox Portable folder. ##
|
||||
|
||||
CACLS "C:\Program Files (x86)\STARS\FireFoxPortable" /e /t /p Users:f
|
||||
|
||||
|
||||
## Display a message at the end of the install
|
||||
If (-not $useDefaultMsi)
|
||||
{
|
||||
#Show-InstallationPrompt -Message 'You can customize text to appear at the end of an install or remove it completely for unattended installations.' -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 'FirefoxPortable' -CloseAppsCountdown 60
|
||||
|
||||
## Show Progress Message (with the default message)
|
||||
Show-InstallationProgress
|
||||
|
||||
## <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>
|
||||
|
||||
## Removes FireFox Portable ##
|
||||
|
||||
Remove-File -Path "C:\Program Files (x86)\STARS\" -Recurse
|
||||
|
||||
|
||||
##*===============================================
|
||||
##* POST-UNINSTALLATION
|
||||
##*===============================================
|
||||
[string]$installPhase = 'Post-Uninstallation'
|
||||
|
||||
## <Perform Post-Uninstallation tasks here>
|
||||
|
||||
# Remove the Shortcuts ##
|
||||
|
||||
## Remove any of the old BPC Stars Shortcuts from the Public Desktop ##
|
||||
|
||||
$ProdLnk = Test-Path "C:\Users\Public\Desktop\STARS PROD.lnk"
|
||||
$Training = Test-Path "C:\Users\Public\Desktop\STARS Training.lnk"
|
||||
|
||||
If ($ProdLnk -eq "True")
|
||||
{
|
||||
|
||||
Remove-Item -Path "C:\Users\Public\Desktop\STARS PROD.lnk" -Recurse
|
||||
|
||||
}
|
||||
|
||||
If ($Training -eq "True")
|
||||
{
|
||||
|
||||
Remove-Item -Path "C:\Users\Public\Desktop\STARS Training.lnk" -Recurse
|
||||
}
|
||||
|
||||
|
||||
## Remove any of the old BPC Stars Shortcuts from the Users Desktop ##
|
||||
|
||||
$ProdLnkUser = Test-Path "$env:userprofile\Desktop\STARS PROD.lnk"
|
||||
$TraningUser = Test-Path "$env:userprofile\Desktop\STARS Training.lnk"
|
||||
|
||||
|
||||
If ($ProdLnkUser -eq "True")
|
||||
{
|
||||
|
||||
Remove-File -Path "$env:userprofile\Desktop\STARS PROD.lnk" -Recurse
|
||||
|
||||
}
|
||||
|
||||
If ($TrainingUser -eq "True")
|
||||
{
|
||||
|
||||
Remove-File -Path "$env:userprofile\Desktop\STARS Training.lnk" -Recurse
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
ElseIf ($deploymentType -ieq 'Repair')
|
||||
{
|
||||
##*===============================================
|
||||
##* PRE-REPAIR
|
||||
##*===============================================
|
||||
[string]$installPhase = 'Pre-Repair'
|
||||
|
||||
## Show Progress Message (with the default message)
|
||||
Show-InstallationProgress
|
||||
|
||||
## <Perform Pre-Repair tasks here>
|
||||
|
||||
##*===============================================
|
||||
##* REPAIR
|
||||
##*===============================================
|
||||
[string]$installPhase = 'Repair'
|
||||
|
||||
## Handle Zero-Config MSI Repairs
|
||||
If ($useDefaultMsi)
|
||||
{
|
||||
[hashtable]$ExecuteDefaultMSISplat = @{ Action = 'Repair'; Path = $defaultMsiFile; }; If ($defaultMstFile) { $ExecuteDefaultMSISplat.Add('Transform', $defaultMstFile) }
|
||||
Execute-MSI @ExecuteDefaultMSISplat
|
||||
}
|
||||
# <Perform Repair tasks here>
|
||||
|
||||
##*===============================================
|
||||
##* POST-REPAIR
|
||||
##*===============================================
|
||||
[string]$installPhase = 'Post-Repair'
|
||||
|
||||
## <Perform Post-Repair 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
|
||||
}
|
||||
Reference in New Issue
Block a user