PowerShell – Working on a template build – rough draft

I am working on updating a process for installing software…I like the audio process for letting me know where in the code I am at in the process.
Rough draft see if I can figure a way to streamline this process.
#################################################################### ## Write-Host "`n" Write-Host " ------------------------------------------------- " -ForegroundColor Cyan Write-Host " | | " -ForegroundColor Cyan Write-Host " | Installer: MSI | " -ForegroundColor Cyan Write-Host " | Application: | " -ForegroundColor Cyan Write-Host " | Version: 1.0 | " -ForegroundColor Cyan Write-Host " | | " -ForegroundColor Cyan Write-Host " | Author: Batman | " -ForegroundColor Cyan Write-Host " | Date Created: 2/9/2025 | " -ForegroundColor Cyan Write-Host " | Date Modified: 2/9/2025 | " -ForegroundColor Cyan Write-Host " | | " -ForegroundColor Cyan Write-Host " ------------------------------------------------- " -ForegroundColor Cyan Write-Host "`n" ## #################################################################### ## currently logged on user $CurrUser = [System.Environment]::GetEnvironmentVariable('username') $SystemName = [Environment]::MachineName ## Audio text to speech Add-Type -AssemblyName System.Speech $Speech = New-Object System.Speech.Synthesis.SpeechSynthesizer $Speech.SelectVoice("Microsoft Hazel Desktop") $Speech.Speak("Hello $($CurrUser) on $($SystemName)") #################################################################### ## $Speech.Speak("Preparing for installation") #################################################################### ## Install Variables $App = "7-Zip" $App1 = "" $App2 = "" $InstallFile = "7z2409-x64.msi" #################################################################### ## Version $CurrVer = "2409" ## Folder Path $folderPath = "C:\Windows\_MECMCache\$($App)\$($CurrVer)" $LogPath = "C:\Logs" $Installedpath32 = "C:\Program Files (x86)\" $Installedpath64 = "C:\Program Files\" #################################################################### #################################################################### ## Define the path to the folder ## Check if the folder exists if (-Not (Test-Path -Path $folderPath)) { # Create the folder if it does not exist New-Item -Path $folderPath -ItemType Directory Write-Output "`n" Write-Output "Folder created at $folderPath" Write-Output "`n" } else { Write-Output "`n" Write-Output "Folder already exists at $folderPath" Write-Output "`n" } ## Check if the Log folder exists if (-Not (Test-Path -Path $LogPath)) { # Create the folder if it does not exist New-Item -Path $LogPath -ItemType Directory Write-Output "`n" Write-Output "Folder created at $LogPath" Write-Output "`n" } else { Write-Output "`n" Write-Output "Folder already exists at $LogPath" Write-Output "`n" } $InstallfilePath = $folderPath + ".\$($Installfile)" $InstalledAppPath32 = "C:\Program Files (x86)\" $InstalledAppPath64 = "C:\Program Files\" [System.Diagnostics.FileVersionInfo]::GetVersionInfo("$($InstalledAppPath)").FileVersion #################################################################### ## Get the date from today minus 30 days $TimeDate = (Get-Date) #################################################################### ## Stopping Service # services to stop $services = @("$($App)", "$($App1)", "$($App2)") foreach ($service in $services) { # Get the service object $svc = Get-Service -Name $service -ErrorAction SilentlyContinue if ($svc -and $svc.Status -eq 'Running') { # Stop the service if it is running Stop-Service -Name $service -Force Write-Output "Stopped service: $service" } else { Write-Output "Service $service is not running or does not exist." } } #################################################################### ## Uninstall $Speech.Speak("Uninstalling") ## Clean up installation version folders $dateTime = (Get-Date).AddDays(-90) $path = "C:\Windows\_MECMCache\$($App)" Get-ChildItem -Path $Path -Recurse -Directory | Where-Object { $_.LastWriteTime -lt $dateTime } | Remove-Item -Recurse #-WhatIf #################################################################### ## $Speech.Speak("Installing") #################################################################### ## $Speech.Speak("Verifying Installation") #################################################################### ## $Speech.Speak("Installation Completed")