Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Script PowerShell di pulizia Windows 10 per rimuovere software "di troppo", impostare un menu di Start pulito (per i nuovi utenti creati sul PC) e disabilitare l'installazione di software "suggeriti da Microsoft" provenienti dallo Store ufficiale.
<#
WINDOWS 10: Remove Default App Packages (pre-installed)
----------------------------------------------------------------------------------------------------------------
Autore: GSolone
Utilizzo: .\Win10Clean.ps1 -Clean
(opzionale) .\Win10Clean.ps1 -Restore
(opzionale) .\Win10Clean.ps1 -StartMenu
(opzionale, passaggio dati da prompt) .\Win10Clean.ps1 -Silent disable
(opzionale, passaggio dati da prompt) .\Win10Clean.ps1 -Silent enable
Versione: 0.3
Info: https://gioxx.org/tag/powershell/
Ultima modifica: 30-08-2017
Fonti utilizzate: http://ccmexec.com/2015/08/removing-built-in-apps-from-windows-10-using-powershell/
https://insidewindows.net/2016/08/24/how-to-stop-windows-10-1607-from-installing-unwanted-apps/
https://windows.gadgethacks.com/how-to/goodbye-bloatware-remove-all-preinstalled-crapware-from-window-10-0164605/
https://blogs.technet.microsoft.com/heyscriptingguy/2015/04/02/update-or-add-registry-key-value-with-powershell/
https://community.spiceworks.com/scripts/show/3977-windows-10-decrapifier-version-2
Modifiche:
0.3- aggiunti nuovi programmi da rimuovere. Ho anche aggiunto la verifica di utilizzo di almeno un parametro (altrimenti mostra a video cosa fare).
0.2- ho aggiornato lo script (ora pubblicamente distribuito) per comprendere nuove applicazioni rilasciate nella Creators Update (1703), per ripristinarne le cancellate e per bloccare future distribuzioni "Silent". Permette inoltre di impostare un menu di Start pulito per i nuovi utenti creati sulla macchina (non ha effetto sugli utenti già presenti).
#>
#Verifica parametri da prompt
Param(
[Parameter(Position=0, Mandatory=$false)]
[switch] $Clean,
[Parameter(Position=1, Mandatory=$false)]
[switch] $Restore,
[Parameter(Position=2, Mandatory=$false)]
[switch] $StartMenu,
[Parameter(Position=3, Mandatory=$false, ValueFromPipeline=$true)]
[string] $Silent
)
<# ----------------------------------------------------------------------------------------------------------------
Modifiche al registro, per evitare installazione Silent di nuove applicazioni.
Vedi: https://insidewindows.net/2016/08/24/how-to-stop-windows-10-1607-from-installing-unwanted-apps/
---------------------------------------------------------------------------------------------------------------- #>
if ( [string]::IsNullOrEmpty($Silent) -eq $False ) {
if ($Silent -eq "disable") {
# Blocco installazione applicazioni suggerite
$registryPath = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"
$Name = "SilentInstalledAppsEnabled"
$value = "0"
if (!(Test-Path $registryPath)) {
New-Item -Path $registryPath -Force | Out-Null
New-ItemProperty -Path $registryPath -Name $name -Value $value `
-PropertyType DWORD -Force | Out-Null
} else {
New-ItemProperty -Path $registryPath -Name $name -Value $value `
-PropertyType DWORD -Force | Out-Null
}
Write-Host "SilentInstalledAppsEnabled disabilitato" -f "Red"
Write-Host "Non riceverai automaticamente ulteriori pacchetti suggeriti"
}
if ($Silent -eq "enable") {
# Ripristino installazione applicazioni suggerite
$registryPath = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"
$Name = "SilentInstalledAppsEnabled"
$value = "1"
if (!(Test-Path $registryPath)) {
New-Item -Path $registryPath -Force | Out-Null
New-ItemProperty -Path $registryPath -Name $name -Value $value `
-PropertyType DWORD -Force | Out-Null
} else {
New-ItemProperty -Path $registryPath -Name $name -Value $value `
-PropertyType DWORD -Force | Out-Null
}
Write-Host "SilentInstalledAppsEnabled abilitato" -f "Green"
Write-Host "Riceverai automaticamente i prossimi pacchetti suggeriti"
}
}
<# ----------------------------------------------------------------------------------------------------------------
Se non è richiesta una diversa operazione, parto con la pulizia
applicazioni installate di default (o in seguito ad upgrade di sistema).
---------------------------------------------------------------------------------------------------------------- #>
if ($Clean) {
$AppsList = "Microsoft.MicrosoftOfficeHub", # Collegamento per ottenere Office
"Microsoft.Office.OneNote", # OneNote in versione App Desktop Windows 10
"Microsoft.Office.Sway", # Microsoft Office Sway
"Microsoft.WindowsCommunicationsApps", # Applicazioni integrate per Mail & Calendar
"Microsoft.Getstarted", # Suggerimenti di utilizzo di Windows 10
"Microsoft.People", # Contatti
"Microsoft.BingTravel", # Bing Travel
"Microsoft.BingSports", # Bing Sports
"Microsoft.BingHealthAndFitness", # Bing Health and Fitness
"Microsoft.BingFoodAndDrink", # Bing Food and Drink
"Microsoft.BingFinance", # Bing Finance
"AccuWeather.AccuWeatherforWindows8", # AccuWeather (possibile eredità Windows 8)
"AMZNMobileLLC.KindleforWindows8", # Kindle for Windows 8 (possibile eredità Windows 8)
"Microsoft.XboxApp", # Xbox
"Microsoft.ZuneMusic", # Groove Musica
"46928bounde.EclipseManager", # Eclipse Manager
"AdobeSystemsIncorporated.AdobePhotoshopExpress", # Photoshop Express
"D5EA27B7.Duolingo-LearnLanguagesforFree", # Duolingo
"Microsoft.MicrosoftSolitaireCollection", # Microsoft Solitaire Collection
"Microsoft.3DBuilder", # Microsoft 3D Builder
"Microsoft.Microsoft3DViewer", # Microsoft 3D Viewer
"89006A2E.AutodeskSketchBook", # Autodesk SketchBook
"KeeperSecurityInc.Keeper", # Keeper Password Manager
"A278AB0D.MarchofEmpires", # Gameloft March of Empires
"king.com.BubbleWitch3Saga", # Bubble Witch 3 Saga
"king.com.CandyCrushSodaSaga", # Candy Crush Soda Saga
"Microsoft.MinecraftUWP", # Minecraft
"CAF9E577.Plex" # Plex
ForEach ($App in $AppsList) {
# Rimozione pacchetti per utente connesso
$Packages = Get-AppxPackage -AllUsers | Where-Object {$_.Name -eq $App}
if ($Packages -ne $null) {
"Removing Appx Package: $App"
foreach ($Package in $Packages) { Remove-AppxPackage -package $Package.PackageFullName }
} else { "Unable to find local package: $App" }
# Rimozione pacchetti provisioned (per nuovi utenti sulla macchina)
$ProvisionedPackage = Get-AppxProvisionedPackage -Online | Where-Object {$_.displayName -eq $App}
if ($ProvisionedPackage -ne $null) {
"Removing Appx Provisioned Package: $App"
Remove-AppxProvisionedPackage -Online -PackageName $ProvisionedPackage.PackageName
} else { "Unable to find provisioned package: $App" }
}
<# ----------------------------------------------------------------------------------------------------------------
Se proprio necessario, puoi sempre reinstallare le applicazioni predefinite di sistema
Vedi: https://windows.gadgethacks.com/how-to/goodbye-bloatware-remove-all-preinstalled-crapware-from-window-10-0164605/
https://blogs.technet.microsoft.com/heyscriptingguy/2015/04/02/update-or-add-registry-key-value-with-powershell/
---------------------------------------------------------------------------------------------------------------- #>
} elseif ($Restore) {
Write-Host "Ripristino applicazioni pre-installate ..." -f "Yellow"
Get-AppxPackage -AllUsers | Foreach { Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml" }
<# ----------------------------------------------------------------------------------------------------------------
Modifico il menu di Start per ogni nuovo account creato sulla macchina
Vedi: https://community.spiceworks.com/scripts/show/3977-windows-10-decrapifier-version-2
---------------------------------------------------------------------------------------------------------------- #>
} else { if ($StartMenu) {
Write-Host "Modifica layout menu Start per i prossimi account ..." -f "Yellow"
$StartMenuLayout = @"
<LayoutModificationTemplate Version="1" xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification">
<LayoutOptions StartTileGroupCellWidth="6" />
<DefaultLayoutOverride>
<StartLayoutCollection>
<defaultlayout:StartLayout GroupCellWidth="6" xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout">
<start:Group Name="" xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout">
<start:DesktopApplicationTile Size="2x2" Column="0" Row="0" DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\System Tools\File Explorer.lnk" />
<start:DesktopApplicationTile Size="2x2" Column="2" Row="0" DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Accessories\Snipping Tool.lnk" />
</start:Group>
</defaultlayout:StartLayout>
</StartLayoutCollection>
</DefaultLayoutOverride>
</LayoutModificationTemplate>
"@
add-content $Env:TEMP\MenuStart.xml $StartMenuLayout
import-startlayout -layoutpath $Env:TEMP\MenuStart.xml -mountpath $Env:SYSTEMDRIVE\
remove-item $Env:TEMP\MenuStart.xml
} else {
if ( [string]::IsNullOrEmpty($Silent) ) {
Write-Host "Rilancia lo script utilizzando almeno un parametro tra quelli disponibili:"
Write-Host " -Clean" -nonewline -f "Yellow"; Write-Host ": per lanciare la pulizia programmi di default"
Write-Host " -Silent enable" -nonewline -f "Yellow"; Write-Host ": per permettere a Windows di installare nuovi programmi suggeriti"
Write-Host " -Silent disable" -nonewline -f "Yellow"; Write-Host ": per impedire a Windows di installare nuovi programmi suggeriti"
Write-Host " -Restore" -nonewline -f "Yellow"; Write-Host ": per ripristinare le applicazioni installate di default"
""
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment