Advertisement
Guest User

Untitled

a guest
Jan 25th, 2021
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function UninstallUWPApps
  2. {
  3.     Add-Type -AssemblyName PresentationCore, PresentationFramework
  4.  
  5.     #region Variables
  6.     # ArrayList containing the UWP apps to remove
  7.     # Массив имен UWP-приложений для удаления
  8.     $AppxPackages = New-Object -TypeName System.Collections.ArrayList($null)
  9.  
  10.     # List of UWP apps that won't be recommended for removal
  11.     # UWP-приложения, которые не будут отмечены на удаление по умолчанию
  12.     $UncheckedAppxPackages = @(
  13.         # AMD Radeon UWP panel
  14.         # UWP-панель AMD Radeon
  15.         "AdvancedMicroDevicesInc*",
  16.  
  17.         # Intel Graphics Control Center
  18.         # UWP-панель Intel
  19.         "AppUp.IntelGraphicsControlPanel",
  20.         "AppUp.IntelGraphicsExperience",
  21.  
  22.         # Sticky Notes
  23.         # Записки
  24.         "Microsoft.MicrosoftStickyNotes",
  25.  
  26.         # Screen Sketch
  27.         # Набросок на фрагменте экрана
  28.         "Microsoft.ScreenSketch",
  29.  
  30.         # Photos (and Video Editor)
  31.         # Фотографии и Видеоредактор
  32.         "Microsoft.Windows.Photos",
  33.         "Microsoft.Photos.MediaEngineDLC",
  34.  
  35.         # Calculator
  36.         # Калькулятор
  37.         "Microsoft.WindowsCalculator",
  38.  
  39.         # Xbox Identity Provider
  40.         # Поставщик удостоверений Xbox
  41.         "Microsoft.XboxIdentityProvider",
  42.  
  43.         # Xbox
  44.         # Компаньон консоли Xbox
  45.         "Microsoft.XboxApp",
  46.  
  47.         # Xbox (beta version)
  48.         # Xbox (бета-версия)
  49.         "Microsoft.GamingApp",
  50.         "Microsoft.GamingServices",
  51.  
  52.         # Xbox TCUI
  53.         "Microsoft.Xbox.TCUI",
  54.  
  55.         # Xbox Speech To Text Overlay
  56.         "Microsoft.XboxSpeechToTextOverlay",
  57.  
  58.         # Xbox Game Bar
  59.         "Microsoft.XboxGamingOverlay",
  60.  
  61.         # Xbox Game Bar Plugin
  62.         "Microsoft.XboxGameOverlay",
  63.  
  64.         # NVIDIA Control Panel
  65.         # Панель управления NVidia
  66.         "NVIDIACorp.NVIDIAControlPanel",
  67.  
  68.         # Realtek Audio Console
  69.         "RealtekSemiconductorCorp.RealtekAudioControl"
  70.     )
  71.  
  72.     # The following UWP apps will be excluded from the display
  73.     # Следующие UWP-приложения будут исключены из отображения
  74.     $ExcludedAppxPackages = @(
  75.         # Microsoft Desktop App Installer
  76.         "Microsoft.DesktopAppInstaller",
  77.  
  78.         # Store Experience Host
  79.         # Узел для покупок Microsoft Store
  80.         "Microsoft.StorePurchaseApp",
  81.  
  82.         # Microsoft Store
  83.         "Microsoft.WindowsStore",
  84.  
  85.         # Web Media Extensions
  86.         # Расширения для интернет-мультимедиа
  87.         "Microsoft.WebMediaExtensions"
  88.     )
  89.     #endregion Variables
  90.  
  91.     #region XAML Markup
  92.     [xml]$XAML = '
  93.     <Window
  94.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  95.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  96.         Name="Window"
  97.         MinHeight="450" MinWidth="400"
  98.         SizeToContent="Width" WindowStartupLocation="CenterScreen"
  99.         TextOptions.TextFormattingMode="Display" SnapsToDevicePixels="True"
  100.         FontFamily="Segoe UI" FontSize="12" ShowInTaskbar="False">
  101.         <Window.Resources>
  102.             <Style TargetType="StackPanel">
  103.                 <Setter Property="Orientation" Value="Horizontal"/>
  104.             </Style>
  105.             <Style TargetType="CheckBox">
  106.                 <Setter Property="Margin" Value="10, 10, 5, 10"/>
  107.                 <Setter Property="IsChecked" Value="True"/>
  108.             </Style>
  109.             <Style TargetType="TextBlock">
  110.                 <Setter Property="Margin" Value="5, 10, 10, 10"/>
  111.             </Style>
  112.             <Style TargetType="Button">
  113.                 <Setter Property="Margin" Value="20"/>
  114.                 <Setter Property="Padding" Value="10"/>
  115.             </Style>
  116.         </Window.Resources>
  117.         <Grid>
  118.             <Grid.RowDefinitions>
  119.                 <RowDefinition Height="Auto"/>
  120.                 <RowDefinition Height="*"/>
  121.                 <RowDefinition Height="Auto"/>
  122.             </Grid.RowDefinitions>
  123.             <Grid Grid.Row="0">
  124.                 <Grid.ColumnDefinitions>
  125.                     <ColumnDefinition Width="*"/>
  126.                     <ColumnDefinition Width="Auto"/>
  127.                 </Grid.ColumnDefinitions>
  128.                 <StackPanel Grid.Column="1" Orientation="Horizontal">
  129.                     <CheckBox Name="CheckboxRemoveAll" IsChecked="False"/>
  130.                     <TextBlock Name="TextblockRemoveAll"/>
  131.                 </StackPanel>
  132.             </Grid>
  133.             <ScrollViewer Name="Scroll" Grid.Row="1"
  134.                 HorizontalScrollBarVisibility="Disabled"
  135.                 VerticalScrollBarVisibility="Auto">
  136.                 <StackPanel Name="PanelContainer" Orientation="Vertical"/>
  137.             </ScrollViewer>
  138.             <Button Name="Button" Grid.Row="2"/>
  139.         </Grid>
  140.     </Window>
  141.     '
  142.     #endregion XAML Markup
  143.  
  144.     $Reader = (New-Object -TypeName System.Xml.XmlNodeReader -ArgumentList $XAML)
  145.     $Form = [Windows.Markup.XamlReader]::Load($Reader)
  146.     $XAML.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | ForEach-Object -Process {
  147.         Set-Variable -Name ($_.Name) -Value $Form.FindName($_.Name) -Scope Global
  148.     }
  149.  
  150.     #region Functions
  151.     function Get-CheckboxClicked
  152.     {
  153.         [CmdletBinding()]
  154.         param
  155.         (
  156.             [Parameter(
  157.                 Mandatory = $true,
  158.                 ValueFromPipeline = $true
  159.             )]
  160.             [ValidateNotNull()]
  161.             $CheckBox
  162.         )
  163.  
  164.         $AppxName = $CheckBox.Parent.Children[1].Text
  165.         if ($CheckBox.IsChecked)
  166.         {
  167.             [void]$AppxPackages.Add($AppxName)
  168.         }
  169.         else
  170.         {
  171.             [void]$AppxPackages.Remove($AppxName)
  172.         }
  173.         if ($AppxPackages.Count -gt 0)
  174.         {
  175.             $Button.IsEnabled = $true
  176.         }
  177.         else
  178.         {
  179.             $Button.IsEnabled = $false
  180.         }
  181.     }
  182.  
  183.     function UninstallButton
  184.     {
  185.         [void]$Window.Close()
  186.         $OFS = "|"
  187.         if ($CheckboxRemoveAll.IsChecked)
  188.         {
  189.             Get-AppxPackage -PackageTypeFilter Bundle -AllUsers | Where-Object -FilterScript {$_.Name -cmatch $AppxPackages} | Remove-AppxPackage -AllUsers -Verbose
  190.         }
  191.         else
  192.         {
  193.             Get-AppxPackage -PackageTypeFilter Bundle | Where-Object -FilterScript {$_.Name -cmatch $AppxPackages} | Remove-AppxPackage -Verbose
  194.         }
  195.         $OFS = " "
  196.     }
  197.  
  198.     function Add-AppxControl
  199.     {
  200.         [CmdletBinding()]
  201.         param
  202.         (
  203.             [Parameter(
  204.                 Mandatory = $true,
  205.                 ValueFromPipeline = $true
  206.             )]
  207.             [ValidateNotNull()]
  208.             [string]
  209.             $AppxName
  210.         )
  211.  
  212.         $CheckBox = New-Object -TypeName System.Windows.Controls.CheckBox
  213.         $CheckBox.Add_Click({Get-CheckboxClicked -CheckBox $_.Source})
  214.  
  215.         $TextBlock = New-Object -TypeName System.Windows.Controls.TextBlock
  216.         $TextBlock.Text = $AppxName
  217.  
  218.         $StackPanel = New-Object -TypeName System.Windows.Controls.StackPanel
  219.         [void]$StackPanel.Children.Add($CheckBox)
  220.         [void]$StackPanel.Children.Add($TextBlock)
  221.  
  222.         [void]$PanelContainer.Children.Add($StackPanel)
  223.  
  224.         if ($UncheckedAppxPackages.Contains($AppxName))
  225.         {
  226.             $CheckBox.IsChecked = $false
  227.             # Exit function, item is not checked
  228.             # Выход из функции, если элемент не выделен
  229.             return
  230.         }
  231.  
  232.         # If package checked, add to the array list to uninstall
  233.         # Если пакет выделен, то добавить в массив для удаления
  234.         [void]$AppxPackages.Add($AppxName)
  235.     }
  236.     #endregion Functions
  237.  
  238.     $Packages = [Windows.Management.Deployment.PackageManager,Windows.Web,ContentType=WindowsRuntime]::new().FindPackages()
  239.  
  240.     #region Events Handlers
  241.     # Window Loaded Event
  242.     $Window.Add_Loaded({
  243.         $OFS = "|"
  244.         $Packages | Where-Object {$_.Name -cnotmatch $ExcludedAppxPackages} | Select-Object DisplayName -ExpandProperty Id | ForEach-Object -Process {
  245.             Add-AppxControl -AppxName $_.DisplayName
  246.         }
  247.         $OFS = " "
  248.     })
  249.  
  250.     # Button Click Event
  251.     $Button.Add_Click({UninstallButton})
  252.     #endregion Events Handlers
  253.  
  254.     if ($Packages | Where-Object -FilterScript {$_.Name -cnotmatch ($ExcludedAppxPackages -join "|")} | Select-Object DisplayName -ExpandProperty Id)
  255.     {
  256.         Write-Verbose -Message "DialogBoxOpening" -Verbose
  257.  
  258.         $TextblockRemoveAll.Text = "UninstallUWPForAll"
  259.         $Window.Title = "UninstallUWPTitle"
  260.         $Button.Content = "Uninstall"
  261.  
  262.         # Display the dialog box
  263.         # Отобразить диалоговое окно
  264.         $Form.ShowDialog() | Out-Null
  265.     }
  266.     else
  267.     {
  268.         Write-Verbose -Message "NoData" -Verbose
  269.     }
  270. }
  271. cls
  272. UninstallUWPApps
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement