Aldin

//Aldin
Aldin

Forum Replies Created

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • Aldin
    Participant
    Post count: 12

    Here is the complete script…
    As I’ve said. I had a 100% success rate. I’ve uninstalled Project on all targeted machines.

    <#
    .SYNOPSIS
    This script performs the installation or uninstallation of an application(s).
    .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 = ‘Microsoft’
    [string]$appName = ‘Project’
    [string]$appVersion = ‘[ALL]’
    [string]$appArch = ”
    [string]$appLang = ‘EN’
    [string]$appRevision = ’01’
    [string]$appScriptVersion = ‘1.0.0’
    [string]$appScriptDate = ’30/05/2016′
    [string]$appScriptAuthor = ‘Aldin T.’
    ##*===============================================
    ## Variables: Install Titles (Only set here to override defaults set by the toolkit)
    [string]$installName = ‘Microsoft Project Uninstall’
    [string]$installTitle = ‘Microsoft Project Uninstall’

    ##* Do not modify section below
    #region DoNotModify

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

    ## Variables: Script
    [string]$deployAppScriptFriendlyName = ‘Deploy Application’
    [version]$deployAppScriptVersion = [version]’3.6.8′
    [string]$deployAppScriptDate = ’02/06/2016′
    [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 Progress Message (with the default message)
    Show-InstallationProgress

    ##*===============================================
    ##* 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 $_ } }
    }

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

    ## 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 ‘WINPROJ’ -Silent

    #Check installed version
    $ProjPro2003 = (Get-InstalledApplication -Name “Microsoft Office Project Professional 2003”).ProductCode
    $ProjStd2003 = (Get-InstalledApplication -Name “Microsoft Office Project Standard 2003”).ProductCode
    $ProjPro2007 = (Get-InstalledApplication -Name “Microsoft Office Project Professional 2007”).ProductCode
    $ProjStd2007 = (Get-InstalledApplication -Name “Microsoft Office Project Standard 2007”).ProductCode

    $ProjStd2010 = Get-InstalledApplication -Name “Microsoft Project Standard 2010” -Exact
    $ProjPro2010 = Get-InstalledApplication -Name “Microsoft Project Professional 2010” -Exact
    $ProjStd2013 = Get-InstalledApplication -Name “Microsoft Project Standard 2013” -Exact
    $ProjPro2013 = Get-InstalledApplication -Name “Microsoft Project Professional 2013” -Exact

    #Create XML file depending on installed version
    If ($ProjStd2013 -or $ProjStd2010) {

    #Create XML file for Project Standard:
    New-Item -Path “$env:TEMP\” -Name ProjSilentUninstallConfig.xml -ItemType “file” -Force -Value `
    ‘<Configuration Product=”PrjStd”>
    <Logging Type=”standard” Path=”C:\LogFiles” Template=”Microsoft Office Project Uninstal.txt” />
    <Display Level=”none” CompletionNotice=”no” SuppressModal=”yes” AcceptEula=”yes” />
    <Setting Id=”SETUP_REBOOT” Value=”NEVER” />
    </Configuration>

    }

    If ($ProjPro2013 -or $ProjPro2010) {

    #Create XML file for Project Professional:
    New-Item -Path “$env:TEMP\” -Name ProjSilentUninstallConfig.xml -ItemType “file” -Force -Value `
    ‘<Configuration Product=”PrjPro”>
    <Logging Type=”standard” Path=”C:\LogFiles” Template=”Microsoft Office Project Uninstal.txt” />
    <Display Level=”none” CompletionNotice=”no” SuppressModal=”yes” AcceptEula=”yes” />
    <Setting Id=”SETUP_REBOOT” Value=”NEVER” />
    </Configuration>

    }

    $ConfigXML = ‘”‘ + “$env:TEMP” + “\ProjSilentUninstallConfig.xml” + ‘”‘

    ##*===============================================
    ##* 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
    }

    #Project 2003
    If ($ProjPro2003){
    $PrKey = $ProjPro2003.trim()
    Execute-MSI -Action ‘Uninstall’ -Path $PrKey
    }
    If ($ProjStd2003){
    $PrKey = $ProjStd2003.trim()
    Execute-MSI -Action ‘Uninstall’ -Path $PrKey
    }

    #Project 2007
    If ($ProjPro2007){
    $PrKey = $ProjPro2007.trim()
    Execute-MSI -Action ‘Uninstall’ -Path $PrKey
    }
    If ($ProjStd2007){
    $PrKey = $ProjStd2007.trim()
    Execute-MSI -Action ‘Uninstall’ -Path $PrKey
    }

    #Project 2010
    If ($ProjStd2010 -ne $Null){
    $TestSetupPath = Test-Path -Path “C:\Program Files\Common Files\Microsoft Shared\OFFICE14\Office Setup Controller\setup.exe”
    If ($TestSetupPath -eq $True) {
    Execute-Process -Path ‘C:\Program Files\Common Files\Microsoft Shared\OFFICE14\Office Setup Controller\setup.exe’ -Parameters “/uninstall PrjStd /config $ConfigXML”
    } else {
    Execute-Process -Path ‘C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\Office Setup Controller\setup.exe’ -Parameters “/uninstall PrjStd /config $ConfigXML”
    }
    }

    If ($ProjPro2010 -ne $Null){
    $TestSetupPath = Test-Path -Path “C:\Program Files\Common Files\Microsoft Shared\OFFICE14\Office Setup Controller\setup.exe”
    If ($TestSetupPath -eq $True) {
    Execute-Process -Path ‘C:\Program Files\Common Files\Microsoft Shared\OFFICE14\Office Setup Controller\setup.exe’ -Parameters “/uninstall PrjPro /config $ConfigXML”
    } else {
    Execute-Process -Path ‘C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\Office Setup Controller\setup.exe’ -Parameters “/uninstall PrjPro /config $ConfigXML”
    }
    }

    #Project 2013
    If ($ProjStd2013 -ne $Null){
    $TestSetupPath = Test-Path -Path “C:\Program Files\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe”
    If ($TestSetupPath -eq $True) {
    Execute-Process -Path ‘C:\Program Files\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe’ -Parameters “/uninstall PrjStd /config $ConfigXML”
    } else {
    Execute-Process -Path ‘C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe’ -Parameters “/uninstall PrjStd /config $ConfigXML”
    }
    }

    If ($ProjPro2013 -ne $Null){
    $TestSetupPath = Test-Path -Path “C:\Program Files\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe”
    If ($TestSetupPath -eq $True) {
    Execute-Process -Path ‘C:\Program Files\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe’ -Parameters “/uninstall PrjPro /config $ConfigXML”
    } else {
    Execute-Process -Path ‘C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe’ -Parameters “/uninstall PrjPro /config $ConfigXML”
    }
    }

    ##*===============================================
    ##* POST-UNINSTALLATION
    ##*===============================================
    [string]$installPhase = ‘Post-Uninstallation’

    #cleanup temp files for good housekeeping
    Remove-File -Path $ConfigXML
    }

    ##*===============================================
    ##* 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
    }

  • Aldin
    Participant
    Post count: 12

    Yeah that should work as well I guess.
    Best practice is still using setup.exe and the config.xml files
    https://technet.microsoft.com/nl-nl/library/cc178956.aspx#BKMK_uninstall

    • This reply was modified 11 months ago by  Aldin.
  • Aldin
    Participant
    Post count: 12

    If you can’t figure it out i can share my script.
    I hate doing it on this forum because it messes the script up.

  • Aldin
    Participant
    Post count: 12

    Well I actually happen to have an uninstall script for all Ms Project versions from 2003 until 2013.
    We didn’t have 2016 back then, but it shouldn’t be that hard to append to the script.

    I’ve successfully uninstalled approx. 350 Microsoft Projects.
    For your information, there are other ways to accomplish this as well. Like for instance using the Offscrub.vbs files (which I use for my Office upgrades).
    But I seriously had a 100% success rate with my script which basically does a clean uninstall like you would do manually.

    To answer your question…
    Project 2003 and Project 2007 (all versions) have a Product Code that can be used with msiexec to uninstall it.
    So what I did is get the Product Code like this:
    $ProjPro2003 = (Get-InstalledApplication -Name “Microsoft Office Project Professional 2003”).ProductCode
    $ProjStd2003 = (Get-InstalledApplication -Name “Microsoft Office Project Standard 2003”).ProductCode
    $ProjPro2007 = (Get-InstalledApplication -Name “Microsoft Office Project Professional 2007”).ProductCode
    $ProjStd2007 = (Get-InstalledApplication -Name “Microsoft Office Project Standard 2007”).ProductCode

    Then with some if statements (if installed) uninstalled it with:
    Execute-MSI -Action ‘Uninstall’ -Path $ProductKey

    For Project 2010 and Project 2013 I userd the XML files like for Visio.
    Procuct Code for Microsoft Project Standard 2010 and 2013: ProjStd
    Procuct Code for Microsoft Project Professional 2010 and 2013: ProjPro

  • Aldin
    Participant
    Post count: 12

    This is how I did it once for Google Earth for all existing AND FUTURE users:

    $RegPath = ‘HKCU\SOFTWARE\Google\Google Earth Pro’
    $ADataValueHEX = ‘00,00,00,00,00,01,00,10,00,00,00,01,00,00,00,01,10,00,00,01,00,00,00,01,00,00,00,01,00,04,00,34,8c,c7,73,37,28,9c,e2,0e,7d,b7,0c,ec,40,d9,fd,27,52,b0,76,11,33,e4,22,e3,ea,1b,d1,86,37,54,5a,6c,af,bd,51,bb,0d,4c,d9,ca,ec,e4,6b,c5,f9,02,ef,21,61,a1,06,17,3c,d9,58,44’
    $ADataHexified = $ADataValueHEX.Split(‘,’) | % { ‘0x$_’}
    $ADataValueBinary = ([byte[]]$ADataHexified)

    # Add registry values for ALL existing and future users
    [scriptblock]$HKCURegistrySettings = {
    Set-RegistryKey -Key $RegPath -Name ‘AData’-Value $ADataValueBinary -Type Binary -SID $UserProfile.SID
    }
    Invoke-HKCURegistrySettingsForAllUsers -RegistrySettings $HKCURegistrySettings

    • This reply was modified 1 year, 3 months ago by  Aldin. Reason: The formatting was screwed again by the forum
  • Aldin
    Participant
    Post count: 12

    This is my script that I use to upgrade any previous Office version to Office 365 ProPlus 2016 CLick to Run.

    We have PC’s with Office 2007, 2010 and 2013.
    As we are planning to upgrade all of them to the latest version I’ve created this script that will do just that.
    I used a couple of snippets from the example script as it contained some useful stuff.
    I’ve also made interactive so our users receive an informational message of what’s going to happen.

    The script first scans for installed Office version and removes them before installing new version.
    I use these Offscrub files:

    OffScrub03.vbs
    OffScrub07.vbs
    OffScrub10.vbs
    OffScrub_O15msi.vbs
    OffScrubc2r.vbs

    For your reference, here is the folder structure of the PsAppDeploykit working directory:
    [IMG]http://i66.tinypic.com/23r0310.png[/IMG]

    I’ve deployed it via SCCM 2012:
    Installation program: Deploy-Application.exe -DeploymentType Install -DeployMode Interactive

    For the “interactive” part don’t forget to change the “User Experience” to:

    As the formatting will probably be screwed when I post the script here, I’m sharing the complete working directory with you (except the Office source files).
    -> All Offscrub files as well as my XML files that I’ve used.
    https://drive.google.com/open?id=0B1RmM7netsG3ZlRMUVdfd2d5UWs

    If you don’t want to download the source files, I’ve posted the script also on the Technet forums:
    https://social.technet.microsoft.com/Forums/office/en-US/aa81d5a8-779a-482c-9c02-e187ab5d635f/office-2010-x64-x86-removal?forum=officesetupdeploy#32c80aac-09e7-42bd-b373-712f1aa47807

    • This reply was modified 1 year, 3 months ago by  Aldin.
  • Aldin
    Participant
    Post count: 12

    Here is the link for MS Projct: https://drive.google.com/open?id=1u0hXcYepvD6qxcazyDkJ3CBj7iU4yWmL
    It’s only until Project 2013 as we didn’t have 2016 back then.

    As for that error you’re getting for Visio.
    The error basically means: You are trying to do something (method) with a value, but the value doesn’t exist.
    The method in that error is .trim
    Basically, this part is blank, so you can’t trim it: (VisPro2016.UninstallString -split (“”))

    did you change line 305?
    It should be this:
    $params = (($VisPro2016.UninstallString -split ('"'))[2]).trim() + " /config $ConfigXML_Pro"

    In order to troubleshoot this, do the following:
    1. Open Powershell ISE as admin
    2. Open file: \AppDeployToolkit\AppDeployToolkitMain.ps1
    3. Run that file. This will load all functions from PsADT
    4. Open Deploy-Application.ps1 and troubleshot step by step

    In your case, execute line 175, which is this:
    $VisPro2016 = Get-InstalledApplication -Name "Microsoft Visio Professional 2016" -Exact | where {$_.UninstallSubkey -eq "Office16.VISPRO"}

    See if that returns any value because this is where it goes wrong.

  • Aldin
    Participant
    Post count: 12

    Hi Anwer,

    I did not include it because we didn’t have Office 2016 MSI in our environment at the time.
    I did include in the file so others can just edit the script a little to include it.
    It shouldn’t be that hard.

  • Aldin
    Participant
    Post count: 12

    Strange.
    I remember testing it with “Microsoft Visio Standard 2016” and “Microsoft Visio Professional 2016” back then.
    It worked without problems.

    Does it work when you run the uninstall string from CMD manually?

    I suggest you do the following to troubleshoot:
    In Powershell ISE Open
    \AppDeployToolkit\AppDeployToolkitMain.ps1
    Deploy-Application.ps1

    Run AppDeployToolkitMain.ps1 from within ISE in order to load all functions, like it would if deployed via SCCM.
    That way you can use all the cmdlets and functions from the toolkit.

    I typed a lot more steps but this freaking forum doesn’t let me post it. It says it’s forbidden.
    Probably because I included some cmdlets

  • Aldin
    Participant
    Post count: 12

    Hi,

    I’m sorry I just saw this message.
    Can you share your XML file with me?
    Also what version of ODT (Office Deployment Tool) are you using?

    I honestly didn’t have any similar issues.
    I’ve upgraded office on 800+ devices successfully without any major issues.

    • This reply was modified 6 months, 2 weeks ago by  Aldin.
Viewing 10 posts - 1 through 10 (of 10 total)