<# Author: Gabe Kerntke Date: 02-18-2025 .Synopsis .Modified 2025-02-18 (GabeK) - Original script created 2025-07-01 (GabeK) - Script updated to use version 5.5 and use functions script #> # Variables # $App_Name = "Dell Command" $File_Name_Prefix = "Dell-Command-x64" $File_Name_Extension = "exe" $Install_Parameters = "/s" $EPCache_Folder = "3rd Party Patches\$App_Name" $Version_URL = (Invoke-WebRequest -UseBasicParsing "https://www.dell.com/support/kbdoc/en-us/000177325/dell-command-update").Content | Select-String -Pattern '' -AllMatches | ForEach-Object { $_.Matches } | ForEach-Object { $_.Groups[1].Value } | Select-Object -First 1 $A = $Version_URL.Substring(30) $Online_Version = $A.Substring(0, $A.Length - 10) -replace "[^\d*\.?\d*$/]" , '' -replace "/" , "" $DownloadURL = "https://downloads.dell.com/FOLDER13309588M/1/Dell-Command-Update-Windows-Universal-Application_C8JXV_WIN64_5.5.0_A00.EXE" $File_Name = "$File_Name_Prefix-$Online_Version.$File_Name_Extension" $Manufacturer = (Get-CimInstance Win32_ComputerSystem).Manufacturer # Functions # Function Initialize-Commands { .\dcu-cli.exe /scan .\dcu-cli.exe /applyUpdates -silent $BLinfo = Get-Bitlockervolume If ($blinfo.ProtectionStatus -eq 'On' -and $blinfo.EncryptionPercentage -eq '100') { Manage-bde -Protectors -Disable C: -RebootCount 1 } Restart-Computer -Force } Function Invoke-Commands { If (Test-Path "C:\Program Files\Dell\CommandUpdate\") { Set-Location "C:\Program Files\Dell\CommandUpdate\" Initialize-Commands } ElseIf (Test-Path "C:\Program Files (x86)\Dell\CommandUpdate\") { Set-Location "C:\Program Files (x86)\Dell\CommandUpdate\" Initialize-Commands } Else { Write-Host "Dell Command Update isn't installed, trying running the script again." } } Function Uninstall-App { $Uninstall = Get-WmiObject Win32_Product -filter "name like '$App_Name%'" | ForEach-Object { $_.Uninstall() } $Value = $Uninstall | Select-Object -ExpandProperty ReturnValue If ($Value -eq "0") { Write-Host "$App_Name uninstalled successfully, please rerun script to continue." $BLinfo = Get-Bitlockervolume If ($blinfo.ProtectionStatus -eq 'On' -and $blinfo.EncryptionPercentage -eq '100') { Manage-bde -Protectors -Disable C: -RebootCount 1 } Restart-Computer -Force } Else { Write-Host "Failed to uninstall $App_Name, exiting script" Exit } } Function Install-dot_net { Invoke-WebRequest -UseBasicParsing "https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.17/windowsdesktop-runtime-8.0.17-win-x64.exe" -OutFile "C:\Temp\windowsdesktop-runtime-8.0.17-win-x64.exe" Start-Process "C:\Temp\Script Cache\windowsdesktop-runtime-8.0.17-win-x64.exe" -ArgumentList "/install /quiet /norestart" Start-Sleep 15 Remove-Item "C:\Temp\Script Cache\windowsdesktop-runtime-8.0.17-win-x64.exe" -Force } #Region Script Start If ((Test-Path "C:\Temp\Script Cache") -eq $False) { New-Item -ItemType directory -Path "C:\Temp\Script Cache" } Invoke-WebRequest -UseBasicParsing "https://scripts.gabesville.com/Gabesville/Powershell-Scripts/raw/branch/main/Functions%20Scripts/Functions.ps1" -outfile "C:\Temp\Script Cache\Functions.ps1" . "C:\Temp\Script Cache\Functions.ps1" #Check if device is a dell If ($Manufacturer -eq "Dell Inc.") { #Check to see if program is installed $Applist = Get-Software | Sort-Object -Descending If ($Applist.DisplayName -like "*$App_Name*") { #Get currently installed version $Local_Version = Get-Software | Where-Object { $_.DisplayName -like "*$App_Name*" } | Select-Object -ExpandProperty DisplayVersion #Comparing version already installed to what is online If ($Local_Version -lt $Online_Version) { Close-App Uninstall-App } Else { Invoke-Commands } } Else { Install-dot_net Test-Probe_Online Install-App Invoke-Commands } } Else { Write-Host "Device is not a Dell: $Manufacturer" } #Region End Script