question

AndrewsDumith-2072 avatar image
0 Votes"
AndrewsDumith-2072 asked AndrewsDumith-2072 edited

Unattended deployment

With the help of several collaborators, I could put together a process that automates -in unattended mode- the updating of a group of solutions.

I leave the script to serve for others.

If there is anything to improve, let me know to include it.

Have a nice day and happy holidays.

P.D. :
1.- ONLY run for 32bits
2.- Must to be run as admisnistrator
3.- ONLY run for localhost


 ########## Setup Variables for Script ##########
 #ProcessName:  Apps to close 
 #AppstoRemove: Apps to uninstall
 #WorkingDir:   Working directory
 #Computers:    Workstations targets
 #Transcript:   Progress report
 $ProcessName = @(
 'OUTLOOK.EXE'
 'WINWORD.EXE'
 'ACROBAT.EXE'
 )
 $AppstoRemove =  @(
 'iManage Share Plug-in for iManage Work (x86)'
 'iManage Work FileSite (x86)'
 'Workshare Professional'
 'Drafting Assistant'
 'Westlaw Solutions'
 'Microsoft Office Professional Plus 2016'
 )
 $WorkingDir = "\\tkdata\apps\IManage (DMS)\Work 10\"
 #$Computers = Get-Content "\\tkdata\apps\IManage (DMS)\Work 10\InstallList.txt"
 $Computers = @('localhost')
 $Transcript = "\\tkdata\apps\IManage (DMS)\Work 10\transcript.txt"
    
 ########## Start Logging ##########
 Start-Transcript -path $Transcript -Append 
    
 ########## Clossing Apps ##########
 Write-Host "Closing Apps"
 ForEach ($Process in $ProcessName) 
 {
    $ReturnVal = taskkill /im $Process /t /f
    if ($ReturnVal) {
        Write-Host "Process: $Process terminated successfully"
    }
 }
    
 ########## Removing Apps ##########
 Write-Host "Removing Apps"
 foreach ($App in $AppstoRemove) 
  {
     $RegApp = Get-Itemproperty 'HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' |
         Select-Object DisplayName, DisplayVersion, UninstallString, PSChildName |
         Where-Object { $_.DisplayName -match "^*$App*"}
     if($RegApp) {
         if($RegApp.Uninstallstring -match '^msiexec')
         {
              $UninstallString = "$($RegApp.UninstallString -replace '/I', '/X' ) /qn /passive /norestart"
         } else {
              $UninstallString = $RegApp.UninstallString
         }
         $RegApp.UninstallString
         $pos = $UninstallString.tolower().IndexOf('.exe')
         $exe =  $UninstallString.Substring(0,$pos + 4)
         $args = $UninstallString.Substring($pos + 4).trim()
         $exe,$args = ($RegApp.UninstallString).split(' ')
         $args -replace '/I','/X'
         Start-Process $Exe -ArgumentList "$args" -NoNewWindow -Wait
     } else {
         "We did not find $App"
     }
 }
    
 ########## Install Apps ##########
 try 
   {
    #### Starting installation ####
    Write-Host "Starting installation"
    New-Item -ItemType directory -Path "\\$Computers\c$\temp\Office2019"
    Copy-Item "\\tkdata\apps\Microsoft\Office Pro Plus 2019 x86-x64\*" "\\$Computers\c$\temp\Office2019" -Recurse
    Write-Host "Installing: Office Pro Plus 2019"
    $ReturnVal=Invoke-Command -ScriptBlock {Start-Process -WorkingDirectory "c:\temp\Office2019\" -FilePath "c:\temp\Office2019\Install-32.bat" -Wait -Verb RunAs}
    Write-Host $ReturnVal
       
    Write-Host "Installing: West Law Drafting Assistant"
    New-Item -ItemType directory -Path "\\$Computers\c$\temp\WLDA"
    Copy-Item "\\tkdata\apps\ThomsonReuters (West Law Drafting Assistant)\*" "\\$Computers\c$\temp\WLDA" -Recurse
    $ReturnVal=Invoke-Command -ScriptBlock {Start-Process -WorkingDirectory "c:\temp\WLDA\" -FilePath "c:\temp\WLDA\trdt.exe" -ArgumentList "/passive" -Wait -Verb RunAs}
    Write-Host $ReturnVal
        
    Write-Host "Installing: Windows Webview 2 Runtine"
    New-Item -ItemType directory -Path "\\$Computers\c$\temp\WWV2"
    Copy-Item "\\tkdata\apps\Microsoft\MicrosoftEdgeWebView2RuntimeInstallerX86.exe" "\\$Computers\c$\temp\WWV2" -Recurse
    $ReturnVal=Invoke-Command -ScriptBlock {Start-Process -WorkingDirectory "c:\temp\WWV2\" -FilePath "c:\temp\WWV2\MicrosoftEdgeWebView2RuntimeInstallerX86.exe" -ArgumentList "/silent /install" -Wait -Verb RunAs}
    Write-Host $ReturnVal
          
    Write-Host "Installing: I-Manage 10"
    New-Item -ItemType directory -Path "\\$Computers\c$\temp\IManage10"
    Copy-Item "\\tkdata\apps\IManage (DMS)\Work 10\iManage Work Desktop for Windows 10.6.0.66 (x86 Office)\*" "\\$Computers\c$\temp\IManage10" -Recurse   
    $ReturnVal=Invoke-Command -ScriptBlock {Start-Process -WorkingDirectory "c:\temp\IManage10\" -FilePath "c:\temp\IManage10\InstalliManage-32.bat" -Wait -Verb RunAs}
    Write-Host $ReturnVal
          
    Write-Host "Installing: WorkShare Professional"
    New-Item -ItemType directory -Path "\\$Computers\c$\temp\WSP"
    Copy-Item "\\tkdata\apps\Workshare\Workshare Professional 10.11.21502.0 Full Install (32-bit)\*" "\\$Computers\c$\temp\WSP" -Recurse
    $ReturnVal=Invoke-Command -ScriptBlock {Start-Process -WorkingDirectory "c:\temp\WSP\" -FilePath "c:\temp\WSP\InstallWSP-32.bat" -ArgumentList "/qn /norestart" -Wait -Verb RunAs}
    Write-Host $ReturnVal
    }
 catch [System.Exception]
    {
      Write-Output $_ 
      return '$ReturnValue'
     }
    
 Stop-Transcript
    
 ########## Wait 2 Minutes ##########
 Start-Sleep -Seconds 120
    
 ########## Get Installed Software ##########
    
 Write-Host "Checking for Installed Software"
    
 $Result32 = Invoke-Command -ScriptBlock {Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* -Exclude RunspaceId,PSShowComputerName } | 
 Select-Object PSComputerName, DisplayName, Publisher, InstallDate | Sort-Object DisplayName
    
 $Result64 = Invoke-Command -ScriptBlock {Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* -Exclude RunspaceId,PSShowComputerName } | 
 Select-Object PSComputerName, DisplayName, Publisher, InstallDate | SSort-Object DisplayName
    
 $Result1 = $Result64 + $Result32
 $Result2 = $Result1 | Where-Object {$_.DisplayName -like 'Microsoft Office Professional Plus 2019' -or $_.DisplayName -like 'TR Drafting Tools*' -or $_.DisplayName -like 'Microsoft Edge WebView*' -or $_.DisplayName -like 'iManage*' -or $_.DisplayName -like 'WorkShare*'}
 $FinalResults = $Result2 |  Export-Csv "$WorkingDir\FinalResults.csv" -NoTypeInformation -Append
    
 ########## Remove temporary files and folder on each PC ##########
 Write-Host "Removing Temporary files"
 $RemovalPath = "\\$Computers\c$\temp\"
 Get-ChildItem  -Path $RemovalPath -Recurse  | Remove-Item -Force -Recurse
 Remove-Item $RemovalPath -Force -Recurse
    
 Write-Host "Process Completed"
 Write-Host "Restaring WorkStation"
 Restart-Computer
windows-server-powershell
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

0 Answers