[CmdletBinding()]
Param (
[Parameter(Mandatory = $false)]
[ValidateSet('Install', 'Uninstall', 'Repair')]
[String]$DeploymentType = 'Install',
[Parameter(Mandatory = $false)]
[ValidateSet('Interactive', 'Silent', 'NonInteractive')]
[String]$DeployMode = 'Silent',
[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 = 'Autodesk'
[String]$appName = 'AutoCAD'
[String]$appVersion = '2023.1.5'
[String]$appArch = ''
[String]$appLang = 'EN'
[String]$appRevision = '01'
[String]$appScriptVersion = '1.0.0'
[String]$appScriptDate = '08/20/2024'
[String]$appScriptAuthor = 'Michael Blakeslee'
##*===============================================
## 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.9.3'
[String]$deployAppScriptDate = '02/05/2023'
[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
## Show Progress Message (with the default message)
Show-InstallationProgress
## <Perform Pre-Installation tasks here>
$WimFile = Get-ChildItem -Path "$dirFiles" -FIlter "*.wim" | Select-Object -First 1
If ($WimFile) {
Mount-ADTWimFile -Path $WimFile.FullName
Get-ChildItem -Path $dirFiles -Include "*.manifest" -Recurse | Get-Content -TotalCount 1 | Out-Null
# New-wimfile
##*===============================================
##* 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>
Mount-WIMFile
Execute-Process -Path "$dirFiles\AutoCAD 2023.1.5\image\Installer.exe" -Parameters "-i deploy --offline_mode -q -o `"$dirFiles\AutoCAD 2023.1.5\image\Collection.xml`" --installer_version `"2.7.0.10`"" -wait
Dismount-WIMFile
##*===============================================
##* POST-INSTALLATION
##*===============================================
[String]$installPhase = 'Post-Installation'
## <Perform Post-Installation tasks here>
## Display a message at the end of the install
If (-not $useDefaultMsi) {
Show-InstallationPrompt -Message 'Installation complete.' -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)
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>
Mount-WIMFile
Execute-Process -Path "$dirFiles\AutoCAD 2023.1.5\image\Installer.exe" -Parameters "-i uninstall -q --manifest `"$dirFiles\AutoCAD 2023.1.5\image\ACD_2023_en-US\setup.xml`"" -IgnoreExitCode “1603” -PassThru -wait
Dismount-WIMFile
#cleanup folders
$path = "C:\Program Files\Autodesk\AutoCAD 2023\acad.exe"
If(!(test-path $path))
{
Remove-Item -Path "C:\Program Files\Autodesk\AutoCAD 2023" -Recurse -Force
}
##*===============================================
##* POST-UNINSTALLATION
##*===============================================
[String]$installPhase = 'Post-Uninstallation'
## <Perform Post-Uninstallation tasks here>
}
ElseIf ($deploymentType -ieq 'Repair') {
##*===============================================
##* PRE-REPAIR
##*===============================================
[String]$installPhase = 'Pre-Repair'
## 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)
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
}3 views