22 settembre 2025 11:21
Come disinstallare con uno script Powershell le versioni di Office 365 di Onenote e tutto il software Dell preinstallate
Oltre a un problema più grave di cui parlerò in un altro post quando (e se) risolto, mi preme chiedere a Dell Technologies: perché, se mi consenti all'atto della configurazione di acquisto di scegliere il sistema operativo (windows, ubuntu, nessuno) non mi lasci anche l'opzione di decidere se voglio o non voglio Office? Non perché non lo voglia usare (in azienda abbiamo tutti una licenza O365) ma perché mi installi 4 versioni localizzate inutili (basterebbe la en-us) e 5 altre di OneNote che non usiamo?!

Inoltre ultimamente, ciliegina sulla torta, sono versioni che NON permettono l'uso di Outlook Classic, quindi comunque devo disinstallare tutto e reinstallare il setup che lo contiene (lo so che è questione di poco tempo e MS lo raserà, ma al momento molti utenti purtroppo me lo chiedono ancora...)
Benedetto #copilot che mi aiuta sempre a generare fantastici script PS di remove di cui sono molto ignorante...
# Record the start time
$startTime = Get-Date
Write-Host "Script started at: $startTime"
# List of partial display names to match
$appsToRemove = @(
"Microsoft 365 - de-de",
"Microsoft 365 - en-us",
"Microsoft 365 - fr-fr",
"Microsoft 365 - it-it",
"Microsoft 365 - nl-nl",
"Microsoft OneNote - de-de",
"Microsoft OneNote - en-us",
"Microsoft OneNote - fr-fr",
"Microsoft OneNote - it-it",
"Microsoft OneNote - nl-nl"
)
# Search registry for uninstall strings
$registryPaths = @(
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
foreach ($appName in $appsToRemove) {
foreach ($path in $registryPaths) {
$app = Get-ItemProperty $path | Where-Object { $_.DisplayName -like "*$appName*" }
if ($app) {
Write-Host "Uninstalling: $($app.DisplayName)"
$uninstallCmd = $app.UninstallString
if ($uninstallCmd) {
# Split command and arguments
$exe = ($uninstallCmd -split '"')[1]
$args = ($uninstallCmd -split '"')[2] + " DisplayLevel=False"
Start-Process -FilePath $exe -ArgumentList $args -Wait
Write-Host "$($app.DisplayName) has been uninstalled.`n"
} else {
Write-Host "No uninstall command found for $($app.DisplayName).`n"
}
}
}
}
# Record the end time
$endTime = Get-Date
Write-Host "Script ended at: $endTime"
# Calculate elapsed time
$elapsed = $endTime - $startTime
Write-Host "Elapsed time: $($elapsed.ToString())"
E già che ci siamo... Sei stufo di tutto quel buzzware di software Dell che non ho mai capito se è più dannoso che utile? Ultimamente ho cominciato a disinstallare TUTTO e reinstallare solo Dell Command Update 5.5 (di default le immagini Windows contengono la 5.4.1).
Anche qui uno script Powershell aiuta a non perdere tempo...
# Percorsi del registro da controllare
$registryPaths = @(
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
# Lista dei nomi esatti delle app da rimuovere
$appsToRemove = @(
"Dell Command | Update",
"Dell Core Services",
"Dell Digital Delivery Services",
"Dell Display Manager",
"Dell Pair",
"Dell Power Manager Service",
"Dell SupportAssist",
"Dell SupportAssist OS Recovery Plugin for Dell Update",
"Dell SupportAssist Remediation",
"Dell Optimizer",
"Dell Trusted Device",
"Dell Command | Update for Windows Universal",
"Dell ControlVault Host Components Installer 64 bit"
)
# Percorso del file di log
$logPath = "$env:USERPROFILE\Desktop\Uninstall_Log.txt"
New-Item -Path $logPath -ItemType File -Force | Out-Null
# Funzione per loggare
function Log {
param([string]$message)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Add-Content -Path $logPath -Value "$timestamp - $message"
}
# Ciclo di disinstallazione
foreach ($path in $registryPaths) {
Get-ItemProperty $path | ForEach-Object {
if ($appsToRemove -contains $_.DisplayName) {
Write-Host "`nTrovato: $($_.DisplayName)" -ForegroundColor Cyan
Log "Trovato: $($_.DisplayName)"
# $confirm = Read-Host "Vuoi disinstallare '$($_.DisplayName)'? (s/n)"
# if ($confirm -eq "s") {
if ($_.UninstallString) {
Write-Host "Avvio disinstallazione..." -ForegroundColor Yellow
Log "Avvio disinstallazione: $($_.DisplayName)"
Start-Process -FilePath "cmd.exe" -ArgumentList "/c", $_.UninstallString -Wait
Write-Host "$($_.DisplayName) disinstallato." -ForegroundColor Green
Log "Disinstallato: $($_.DisplayName)"
} else {
Write-Host "Nessuna stringa di disinstallazione trovata." -ForegroundColor Red
Log "Errore: Nessuna UninstallString per $($_.DisplayName)"
}
# } else {
# Write-Host "Disinstallazione annullata per $($_.DisplayName)." -ForegroundColor Gray
# Log "Disinstallazione annullata: $($_.DisplayName)"
# }
}
}
}
Write-Host "`nOperazione completata. Log salvato in: $logPath" -ForegroundColor Magenta