Browse Source

Add files via upload

pull/174/head
Dmitry Nefedov 4 years ago
committed by GitHub
parent
commit
ade8ddced4
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 119
      Sophia/PowerShell 5.1/Functions.ps1
  2. 63
      Sophia/PowerShell 5.1/Sophia.ps1
  3. BIN
      Sophia/PowerShell 5.1/Sophia.psd1
  4. 386
      Sophia/PowerShell 5.1/Sophia.psm1
  5. 3
      Sophia/PowerShell 5.1/cn-CN/Sophia.psd1
  6. 5
      Sophia/PowerShell 5.1/de-DE/Sophia.psd1
  7. 7
      Sophia/PowerShell 5.1/en-US/Sophia.psd1
  8. 7
      Sophia/PowerShell 5.1/es-ES/Sophia.psd1
  9. 5
      Sophia/PowerShell 5.1/fr-FR/Sophia.psd1
  10. 5
      Sophia/PowerShell 5.1/it-IT/Sophia.psd1
  11. 5
      Sophia/PowerShell 5.1/pt-BR/Sophia.psd1
  12. 5
      Sophia/PowerShell 5.1/ru-RU/Sophia.psd1
  13. 5
      Sophia/PowerShell 5.1/tr-TR/Sophia.psd1
  14. 5
      Sophia/PowerShell 5.1/uk-UA/Sophia.psd1

119
Sophia/PowerShell 5.1/Functions.ps1

@ -0,0 +1,119 @@
<#
.SYNOPSIS
Run the specific function, using the TAB completion
Version: v5.10
Date: 09.04.2021
Copyright (c) 20152021 farag & oZ-Zo
Thanks to all https://forum.ru-board.com members involved
.DESCRIPTION
To be able to call the specific function(s) enter ". .\Function.ps1" first (with a dot at the beginning)
Running this script will add the TAB completion for functions and their arguments by typing its' first letters
Чтобы иметь возможность вызывать конкретную функцию, введите сначала ". .\Functions.ps1" (с точкой в начале)
Запуск этого скрипта добавит, используя табуляцию, автопродление имен функций и их аргументов по введенным первым буквам
.EXAMPLE Run the specific function(s)
. .\Functions.ps1
Sophia -Functions <tab>
Sophia -Functions temp<tab>
Sophia -Functions "DiagTrackService -Disable", "DiagnosticDataLevel -Minimal", UninstallUWPApps
.NOTES
Set execution policy to be able to run scripts only in the current PowerShell session:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
.NOTES
Separate functions with comma
.NOTES
https://forum.ru-board.com/topic.cgi?forum=62&topic=30617#15
https://habr.com/post/521202/
https://forums.mydigitallife.net/threads/powershell-windows-10-sophia-script.81675/
https://www.reddit.com/r/PowerShell/comments/go2n5v/powershell_script_setup_windows_10/
.LINK
https://t.me/sophianews
https://t.me/sophia_chat
.LINK
https://github.com/farag2
https://github.com/Inestic
.LINK
https://github.com/farag2/Windows-10-Sophia-Script
#>
function Sophia
{
[CmdletBinding()]
param
(
[Parameter(Mandatory = $false)]
[string[]]
$Functions
)
<#
Regardless of the functions entered as an argument, the "Checkings" function will be executed first,
and the "Refresh" and "Errors" functions will be executed at the end
#>
Invoke-Command -ScriptBlock {Checkings}
foreach ($Function in $Functions)
{
Invoke-Expression -Command $Function
}
Invoke-Command -ScriptBlock {Refresh; Errors}
}
Clear-Host
$Host.UI.RawUI.WindowTitle = "Windows 10 Sophia Script v5.10 | Made with $([char]::ConvertFromUtf32(0x1F497)) of Windows 10 | $([char]0x00A9) farag & oz-zo, 2015–2021"
Remove-Module -Name Sophia -Force -ErrorAction Ignore
Import-Module -Name $PSScriptRoot\Sophia.psd1 -PassThru -Force
Import-LocalizedData -BindingVariable Global:Localization -FileName Sophia
$Parameters = @{
CommandName = "Sophia"
ParameterName = "Functions"
ScriptBlock = {
param
(
$commandName,
$parameterName,
$wordToComplete,
$commandAst,
$fakeBoundParameters
)
# Get functions list with arguments to complete
$Commands = (Get-Module -Name Sophia).ExportedCommands.Keys
foreach ($Command in $Commands)
{
$UnnecessaryParameters = @("Verbose", "Debug", "ErrorAction", "WarningAction", "InformationAction", "ErrorVariable", "WarningVariable", "InformationVariable", "OutVariable", "OutBuffer", "PipelineVariable")
$ParameterSets = ((Get-Command -Name $Command).Parameters | Where-Object -FilterScript {$_.Keys}).Keys | Where-Object -FilterScript {$_ -notin $UnnecessaryParameters}
foreach ($ParameterSet in $ParameterSets)
{
# "Function -Argument" construction
$Command + " " + "-" + $ParameterSet | Where-Object -FilterScript {$_ -match $wordToComplete} | ForEach-Object -Process {"`"$_`""}
}
continue
}
# Get functions list without arguments to complete
(Get-Command -Name @((Get-Module -Name Sophia).ExportedCommands.Keys)) | Where-Object -FilterScript {
$_.CmdletBinding -eq $false
} | Where-Object -FilterScript {$_.Name -match $wordToComplete}
}
}
Register-ArgumentCompleter @Parameters
Write-Verbose -Message "Sophia -Functions <tab>" -Verbose
Write-Verbose -Message "Sophia -Functions temp<tab>" -Verbose
Write-Verbose -Message "Sophia -Functions `"DiagTrackService -Disable`", `"DiagnosticDataLevel -Minimal`", UninstallUWPApps" -Verbose

63
Sophia/PowerShell 5.1/Sophia.ps1

@ -2,8 +2,8 @@
.SYNOPSIS
Default preset file for "Windows 10 Sophia Script"
Version: v5.9
Date: 27.03.2021
Version: v5.10
Date: 09.04.2021
Copyright (c) 20152021 farag & oZ-Zo
Thanks to all https://forum.ru-board.com members involved
@ -16,16 +16,16 @@
Running the script is best done on a fresh install because running it on wrong tweaked system may result in errors occurring
.EXAMPLE
.\Sophia.ps1
To be able to call the specific function using autocompletion enter ". .\Functions.ps1" (with a dot at the beginning)
Read more in the Functions.ps1 file
.EXAMPLE
.\Sophia.ps1 -Functions "DiagTrackService -Disable", "DiagnosticDataLevel -Minimal", UninstallUWPApps
.EXAMPLE Run the whole script
.\Sophia.ps1
.NOTES
Supported Windows 10 versions
Versions: 2004 (20H1)/20H2 (2009)
Builds: 19041/19042
Versions: 2004 (20H1)/20H2 (2009)/21H1
Builds: 19041/19042/19043
Editions: Home/Pro/Enterprise
Architecture: x64
@ -54,49 +54,16 @@
#Requires -RunAsAdministrator
#Requires -Version 5.1
[CmdletBinding()]
param
(
[Parameter(Mandatory = $false)]
[string[]]
$Functions
)
Clear-Host
$Host.UI.RawUI.WindowTitle = "Windows 10 Sophia Script v5.9 | Made with $([char]::ConvertFromUtf32(0x1F497)) of Windows 10 | $([char]0x00A9) farag & oz-zo, 2015–2021"
$Host.UI.RawUI.WindowTitle = "Windows 10 Sophia Script v5.10 | Made with $([char]::ConvertFromUtf32(0x1F497)) of Windows 10 | $([char]0x00A9) farag & oz-zo, 2015–2021"
Remove-Module -Name Sophia -Force -ErrorAction Ignore
Import-Module -Name $PSScriptRoot\Sophia.psd1 -PassThru -Force
Import-LocalizedData -BindingVariable Global:Localization -FileName Sophia
<#
.SYNOPSIS
Adds the feature to run the script by specifying module functions as parameters
Добавляет возможность запускать скрипт, указывая в качестве параметров функции модуля
.EXAMPLE
.\Sophia.ps1 -Functions "DiagTrackService -Disable", "DiagnosticDataLevel -Minimal", UninstallUWPApps
.NOTES
Regardless of the functions entered as an argument, the "Checkings" function will be executed first, and the "Refresh" and "Errors" functions will be executed at the end
Вне зависимости от введенных функций в качестве аргумента, сначала будет выполнена функция "Checkings", и в конце "Refresh" и "Errors"
#>
if ($Functions)
{
Invoke-Command -ScriptBlock {Checkings}
foreach ($Function in $Functions)
{
Invoke-Expression -Command $Function
}
Invoke-Command -ScriptBlock {Refresh; Errors}
exit
}
#region Protection
<#
Checkings
Please, do not touch this function
@ -118,6 +85,7 @@ Checkings
# Create a restore point
# Создать точку восстановления
CreateRestorePoint
#endregion Protection
#region Privacy & Telemetry
# Disable the DiagTrack service, firewall rule for Unified Telemetry Client Outbound Traffic and block connection
@ -958,6 +926,15 @@ UninstallUWPApps
#>
# UninstallUWPApps -ForAllUsers
<#
Restore the default UWP apps using the pop-up dialog box
UWP apps can be restored only if they were uninstalled only for the current user
Восстановить стандартные UWP-приложения, используя всплывающее диалоговое окно
UWP-приложения могут быть восстановлены, только если они были удалены для текущего пользователя
#>
# RestoreUWPApps
<#
Open Microsoft Store "HEVC Video Extensions from Device Manufacturer" page to install this extension manually to be able to open .heic and .heif formats
The extension can be installed without Microsoft account

BIN
Sophia/PowerShell 5.1/Sophia.psd1

Binary file not shown.

386
Sophia/PowerShell 5.1/Sophia.psm1

@ -2,8 +2,8 @@
.SYNOPSIS
"Windows 10 Sophia Script" is a PowerShell module for Windows 10 fine-tuning and automating the routine tasks
Version: v5.9
Date: 27.03.2021
Version: v5.10
Date: 08.04.2021
Copyright (c) 20152021 farag & oZ-Zo
Thanks to all https://forum.ru-board.com members involved
@ -13,8 +13,8 @@
.NOTES
Supported Windows 10 versions
Versions: 2004 (20H1)/20H2 (2009)
Builds: 19041/19042
Versions: 2004 (20H1)/20H2 (2009)/21H1
Builds: 19041/19042/19043
Editions: Home/Pro/Enterprise
Architecture: x64
@ -116,6 +116,7 @@ function Checkings
}
#endregion Checkings
#region Protection
# Enable script logging. The log will be being recorded into the script folder
# To stop logging just close the console or type "Stop-Transcript"
function Logging
@ -127,7 +128,7 @@ function Logging
# Create a restore point for the system drive
function CreateRestorePoint
{
$SystemDriveUniqueID = (Get-Volume | Where-Object {$_.DriveLetter -eq "$($env:SystemDrive[0])"}).UniqueID
$SystemDriveUniqueID = (Get-Volume | Where-Object -FilterScript {$_.DriveLetter -eq "$($env:SystemDrive[0])"}).UniqueID
$SystemProtection = ((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SPP\Clients")."{09F7EDC5-294E-4180-AF6A-FB0E6A0E9513}") | Where-Object -FilterScript {$_ -match [regex]::Escape($SystemDriveUniqueID)}
$ComputerRestorePoint = $false
@ -155,6 +156,7 @@ function CreateRestorePoint
Disable-ComputerRestore -Drive $env:SystemDrive
}
}
#endregion Protection
#region Privacy & Telemetry
<#
@ -260,18 +262,18 @@ function DiagnosticDataLevel
{
if (Get-WindowsEdition -Online | Where-Object -FilterScript {$_.Edition -like "Enterprise*" -or $_.Edition -eq "Education"})
{
# Disable diagnostic data
# Security level
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 0 -Force
}
else
{
# Required diagnostic data
# Optional diagnostic data
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 1 -Force
}
}
"Default"
{
# Optional diagnostic data
# Required diagnostic data
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 3 -Force
}
}
@ -319,7 +321,7 @@ function ErrorReporting
{
"Disable"
{
if ((Get-WindowsEdition -Online).Edition -notmatch "Core*")
if ((Get-WindowsEdition -Online).Edition -notmatch "Core")
{
Get-ScheduledTask -TaskName QueueReporting | Disable-ScheduledTask
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force
@ -815,7 +817,7 @@ function AdvertisingID
{
"Disable"
{
if (-not (Test-Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo))
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force
}
@ -1129,7 +1131,7 @@ function WhatsNewInWindows
{
"Enable"
{
if (-not (Test-Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement))
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force
}
@ -1137,7 +1139,7 @@ function WhatsNewInWindows
}
"Disable"
{
if (-not (Test-Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement))
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force
}
@ -1246,7 +1248,7 @@ function BingSearch
}
"Disable"
{
if (-not (Test-Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer))
if (-not (Test-Path -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer))
{
New-Item -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force
}
@ -1758,7 +1760,7 @@ function PeopleTaskbar
{
"Hide"
{
if (-not (Test-Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People))
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People -Force
}
@ -1766,7 +1768,7 @@ function PeopleTaskbar
}
"Show"
{
if (-not (Test-Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People))
if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People))
{
New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People -Force
}
@ -2504,6 +2506,7 @@ function MeetNow
#>
function UnpinTaskbarEdgeStore
{
# Extract strings from shell32.dll using its' number
# https://github.com/Disassembler0/Win10-Initial-Setup-Script/issues/8#issue-227159084
$Signature = @{
Namespace = "WinAPI"
@ -2537,7 +2540,7 @@ public static string GetString(uint strId)
$Shell = New-Object -ComObject Shell.Application
$Folder = $Shell.NameSpace("$env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar")
$Shortcut = $Folder.ParseName("Microsoft Edge.lnk")
$Shortcut.Verbs() | Where-Object {$_.Name -eq $LocalizedString} | ForEach-Object -Process {$_.DoIt()}
$Shortcut.Verbs() | Where-Object -FilterScript {$_.Name -eq $LocalizedString} | ForEach-Object -Process {$_.DoIt()}
}
# Start-Job is used due to that the calling this function before UninstallUWPApps breaks the retrieval of the localized UWP apps packages names
@ -4551,7 +4554,7 @@ function WindowsFeatures
# Getting list of all optional features according to the conditions
$OFS = "|"
$Features = Get-WindowsOptionalFeature -Online | Where-Object -FilterScript {
($_.State -in $State) -and (($_.FeatureName -cmatch $UncheckedFeatures) -or ($_.FeatureName -cmatch $CheckedFeatures))
($_.State -in $State) -and (($_.FeatureName -match $UncheckedFeatures) -or ($_.FeatureName -match $CheckedFeatures))
} | ForEach-Object -Process {Get-WindowsOptionalFeature -FeatureName $_.FeatureName -Online}
$OFS = " "
@ -4795,7 +4798,7 @@ function WindowsCapabilities
$SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose}
$SelectedCapabilities | Where-Object -FilterScript {$_.Name -in (Get-WindowsCapability -Online).Name} | Remove-WindowsCapability -Online
if ([string]$SelectedCapabilities.Name -cmatch "Browser.InternetExplorer*")
if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer")
{
Write-Warning -Message $Localization.RestartWarning
}
@ -4810,7 +4813,7 @@ function WindowsCapabilities
$SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose}
$SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online
if ([string]$SelectedCapabilities.Name -cmatch "Browser.InternetExplorer*")
if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer")
{
Write-Warning -Message $Localization.RestartWarning
}
@ -4881,7 +4884,7 @@ function WindowsCapabilities
# Getting list of all capabilities according to the conditions
$OFS = "|"
$Capabilities = Get-WindowsCapability -Online | Where-Object -FilterScript {
($_.State -eq $State) -and (($_.Name -cmatch $UncheckedCapabilities) -or ($_.Name -cmatch $CheckedCapabilities) -and ($_.Name -cnotmatch $ExcludedCapabilities))
($_.State -eq $State) -and (($_.Name -match $UncheckedCapabilities) -or ($_.Name -match $CheckedCapabilities) -and ($_.Name -notmatch $ExcludedCapabilities))
} | ForEach-Object -Process {Get-WindowsCapability -Name $_.Name -Online}
$OFS = " "
@ -4943,7 +4946,7 @@ function UpdateMicrosoftProducts
{
"Disable"
{
if ((New-Object -ComObject Microsoft.Update.ServiceManager).Services | Where-Object {$_.ServiceID -eq "7971f918-a847-4430-9279-4a52d1efe18d"})
if ((New-Object -ComObject Microsoft.Update.ServiceManager).Services | Where-Object -FilterScript {$_.ServiceID -eq "7971f918-a847-4430-9279-4a52d1efe18d"})
{
(New-Object -ComObject Microsoft.Update.ServiceManager).RemoveService("7971f918-a847-4430-9279-4a52d1efe18d")
}
@ -7505,7 +7508,7 @@ function EnableWSL2
# Virtual Machine Platform
"VirtualMachinePlatform"
)
$WSLFeaturesDisabled = Get-WindowsOptionalFeature -Online | Where-Object {($_.FeatureName -in $WSLFeatures) -and ($_.State -eq "Disabled")}
$WSLFeaturesDisabled = Get-WindowsOptionalFeature -Online | Where-Object -FilterScript {($_.FeatureName -in $WSLFeatures) -and ($_.State -eq "Disabled")}
if ($null -eq $WSLFeaturesDisabled)
{
@ -7717,7 +7720,7 @@ function RunPowerShellShortcut
<#
.SYNOPSIS
Configure tiles on Start
Configure the Start tiles
.PARAMETER ControlPanel
Pin the "Control Panel" shortcut to Start
@ -7763,7 +7766,7 @@ function PinToStart
$UnpinAll,
[Parameter(
Mandatory = $false,
Mandatory = $true,
Position = 1
)]
[ValidateSet("ControlPanel", "DevicesPrinters", "PowerShell")]
@ -7815,7 +7818,8 @@ public static string GetString(uint strId)
return sb.ToString();
}
"@
}
}
if (-not ("WinAPI.GetStr" -as [type]))
{
Add-Type @Signature -Using System.Text
@ -7824,15 +7828,8 @@ public static string GetString(uint strId)
# Extract the localized "Devices and Printers" string from shell32.dll
$DevicesPrinters = [WinAPI.GetStr]::GetString(30493)
# Create the old-style "Devices and Printers" shortcut in the Start menu
$Shell = New-Object -ComObject Wscript.Shell
$Shortcut = $Shell.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\$DevicesPrinters.lnk")
$Shortcut.TargetPath = "control"
$Shortcut.Arguments = "printers"
$Shortcut.IconLocation = "$env:SystemRoot\system32\DeviceCenter.dll"
$Shortcut.Save()
Start-Sleep -Seconds 3
# Get the AppID because it's auto generated AppID for the "Devices and Printers" shortcut
$Script:DevicesPrintersAppID = (Get-StartApps | Where-Object -FilterScript {$_.Name -eq $DevicesPrinters}).AppID
$Parameters = @(
# Control Panel hash table
@ -7851,7 +7848,7 @@ public static string GetString(uint strId)
Size = "2x2"
Column = 2
Row = 0
AppID = "Microsoft.AutoGenerated.{7FF3FDB0-CFD9-F944-4722-A9E766EDE23F}"
AppID = $Script:DevicesPrintersAppID
},
# Windows PowerShell hash table
@{
@ -7915,8 +7912,17 @@ public static string GetString(uint strId)
}
DevicesPrinters
{
$DevicesPrinters = [WinAPI.GetStr]::GetString(30493)
Write-Verbose -Message ($Localization.ShortcutPinning -f $DevicesPrinters) -Verbose
# Create the old-style "Devices and Printers" shortcut in the Start menu
$Shell = New-Object -ComObject Wscript.Shell
$Shortcut = $Shell.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\$DevicesPrinters.lnk")
$Shortcut.TargetPath = "control"
$Shortcut.Arguments = "printers"
$Shortcut.IconLocation = "$env:SystemRoot\system32\DeviceCenter.dll"
$Shortcut.Save()
Start-Sleep -Seconds 3
}
PowerShell
{
@ -8115,6 +8121,7 @@ function UninstallUWPApps
"Microsoft.WebMediaExtensions"
)
#region Variables
#region XAML Markup
# The section defines the design of the upcoming dialog box
[xml]$XAML = '
@ -8129,7 +8136,7 @@ function UninstallUWPApps
<Window.Resources>
<Style TargetType="StackPanel">
<Setter Property="Orientation" Value="Horizontal"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Top"/>
</Style>
<Style TargetType="CheckBox">
<Setter Property="Margin" Value="10, 13, 10, 10"/>
@ -8192,7 +8199,7 @@ function UninstallUWPApps
Set-Variable -Name ($_.Name) -Value $Form.FindName($_.Name)
}
$Window.Title = $Localization.UninstallUWPTitle
$Window.Title = $Localization.UWPAppsTitle
$ButtonUninstall.Content = $Localization.Uninstall
$TextBlockRemoveForAll.Text = $Localization.UninstallUWPForAll
$TextBlockSelectAll.Text = $Localization.SelectAll
@ -8403,6 +8410,278 @@ function UninstallUWPApps
}
}
<#
.SYNOPSIS
Restore the default UWP apps
.EXAMPLE
RestoreUWPAppsUWPApps
.NOTES
UWP apps can be restored only if they were uninstalled only for the current user
.NOTES
A pop-up dialog box enables the user to select packages
Current user
#>
function RestoreUWPApps
{
Add-Type -AssemblyName PresentationCore, PresentationFramework
#region Variables
#region XAML Markup
# The section defines the design of the upcoming dialog box
[xml]$XAML = '
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="Window"
MinHeight="400" MinWidth="410"
SizeToContent="Width" WindowStartupLocation="CenterScreen"
TextOptions.TextFormattingMode="Display" SnapsToDevicePixels="True"
FontFamily="Candara" FontSize="16" ShowInTaskbar="True">
<Window.Resources>
<Style TargetType="StackPanel">
<Setter Property="Orientation" Value="Horizontal"/>
<Setter Property="VerticalAlignment" Value="Top"/>
</Style>
<Style TargetType="CheckBox">
<Setter Property="Margin" Value="10, 13, 10, 10"/>
<Setter Property="IsChecked" Value="True"/>
</Style>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="0, 10, 10, 10"/>
</Style>
<Style TargetType="Button">
<Setter Property="Margin" Value="20"/>
<Setter Property="Padding" Value="10"/>
<Setter Property="IsEnabled" Value="False"/>
</Style>
<Style TargetType="Border">
<Setter Property="Grid.Row" Value="1"/>
<Setter Property="CornerRadius" Value="0"/>
<Setter Property="BorderThickness" Value="0, 1, 0, 1"/>
<Setter Property="BorderBrush" Value="#000000"/>
</Style>
<Style TargetType="ScrollViewer">
<Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="BorderBrush" Value="#000000"/>
<Setter Property="BorderThickness" Value="0, 1, 0, 1"/>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Name="PanelSelectAll" Grid.Column="0" HorizontalAlignment="Left">
<CheckBox Name="CheckBoxSelectAll" IsChecked="False"/>
<TextBlock Name="TextBlockSelectAll" Margin="10,10, 0, 10"/>
</StackPanel>
</Grid>
<Border>
<ScrollViewer>
<StackPanel Name="PanelContainer" Orientation="Vertical"/>
</ScrollViewer>
</Border>
<Button Name="ButtonRestore" Grid.Row="2"/>
</Grid>
</Window>
'
#endregion XAML Markup
$Reader = (New-Object -TypeName System.Xml.XmlNodeReader -ArgumentList $XAML)
$Form = [Windows.Markup.XamlReader]::Load($Reader)
$XAML.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | ForEach-Object -Process {
Set-Variable -Name ($_.Name) -Value $Form.FindName($_.Name)
}
$Window.Title = $Localization.UWPAppsTitle
$ButtonRestore.Content = $Localization.Restore
$TextBlockSelectAll.Text = $Localization.SelectAll
$ButtonRestore.Add_Click({ButtonRestoreClick})
$CheckBoxSelectAll.Add_Click({CheckBoxSelectAllClick})
#endregion Variables
#region Functions
function Get-AppxManifest
{
Write-Verbose -Message "Patient" -Verbose
# Тут нельзя напрямую вписать -PackageTypeFilter Bundle, так как иначе не выдается нужное свойство InstallLocation. Только сравнивать с $Bundles
$Bundles = (Get-AppXPackage -PackageTypeFilter Bundle -AllUsers).Name
$AppxPackages = Get-AppxPackage -AllUsers | Where-Object -FilterScript {$_.PackageUserInformation -match "Staged"} | Where-Object -FilterScript {$_.Name -in $Bundles}
$PackagesIds = [Windows.Management.Deployment.PackageManager, Windows.Web, ContentType = WindowsRuntime]::new().FindPackages() | Select-Object -Property DisplayName -ExpandProperty Id | Select-Object -Property Name, DisplayName
foreach ($AppxPackage in $AppxPackages)
{
$PackageId = $PackagesIds | Where-Object -FilterScript {$_.Name -eq $AppxPackage.Name}
if (-not $PackageId)
{
continue
}
[PSCustomObject]@{
Name = $AppxPackage.Name
PackageFullName = $AppxPackage.PackageFullName
DisplayName = $PackageId.DisplayName
AppxManifest = "$($AppxPackage.InstallLocation)\AppxManifest.xml"
}
}
}
function Add-Control
{
[CmdletBinding()]
param
(
[Parameter(
Mandatory = $true,
ValueFromPipeline = $true
)]
[ValidateNotNull()]
[PSCustomObject[]]
$Packages
)
process
{
foreach ($Package in $Packages)
{
$CheckBox = New-Object -TypeName System.Windows.Controls.CheckBox
$CheckBox.Tag = $Package.AppxManifest
$TextBlock = New-Object -TypeName System.Windows.Controls.TextBlock
if ($Package.DisplayName)
{
$TextBlock.Text = $Package.DisplayName
}
else
{
$TextBlock.Text = $Package.Name
}
$StackPanel = New-Object -TypeName System.Windows.Controls.StackPanel
$StackPanel.Children.Add($CheckBox) | Out-Null
$StackPanel.Children.Add($TextBlock) | Out-Null
$PanelContainer.Children.Add($StackPanel) | Out-Null
$CheckBox.IsChecked = $true
$PackagesToRestore.Add($Package.AppxManifest)
$CheckBox.Add_Click({CheckBoxClick})
}
}
}
function ButtonRestoreClick
{
Write-Verbose -Message $Localization.Patient -Verbose
$Window.Close() | Out-Null
$Parameters = @{
Register = $true
ForceApplicationShutdown = $true
ForceUpdateFromAnyVersion = $true
DisableDevelopmentMod = $true
Verbose = [switch]::Present
}
$PackagesToRestore | Add-AppxPackage @Parameters
}
function CheckBoxClick
{
$CheckBox = $_.Source
if ($CheckBox.IsChecked)
{
$PackagesToRestore.Add($CheckBox.Tag) | Out-Null
}
else
{
$PackagesToRestore.Remove($CheckBox.Tag)
}
ButtonRestoreSetIsEnabled
}
function CheckBoxSelectAllClick
{
$CheckBox = $_.Source
if ($CheckBox.IsChecked)
{
$PackagesToRestore.Clear()
foreach ($Item in $PanelContainer.Children.Children)
{
if ($Item -is [System.Windows.Controls.CheckBox])
{
$Item.IsChecked = $true
$PackagesToRestore.Add($Item.Tag)
}
}
}
else
{
$PackagesToRestore.Clear()
foreach ($Item in $PanelContainer.Children.Children)
{
if ($Item -is [System.Windows.Controls.CheckBox])
{
$Item.IsChecked = $false
}
}
}
ButtonRestoreSetIsEnabled
}
function ButtonRestoreSetIsEnabled
{
if ($PackagesToRestore.Count -gt 0)
{
$ButtonRestore.IsEnabled = $true
}
else
{
$ButtonRestore.IsEnabled = $false
}
}
#endregion Functions
$PackagesToRestore = [Collections.Generic.List[string]]::new()
$AppXPackages = Get-AppxManifest
$AppXPackages | Add-Control
if ($AppxPackages.Count -eq 0)
{
Write-Verbose -Message $Localization.NoData -Verbose
}
else
{
Write-Verbose -Message $Localization.DialogBoxOpening -Verbose
if ($PackagesToRestore.Count -gt 0)
{
$ButtonRestore.IsEnabled = $true
}
$Form.ShowDialog() | Out-Null
}
}
<#
.SYNOPSIS
Install "HEVC Video Extensions from Device Manufacturer" to be able to open .heic and .heif formats
@ -9349,7 +9628,7 @@ function TempTask
"Register"
{
$TempTask = @"
Get-ChildItem -Path `$env:TEMP -Force -Recurse | Remove-Item -Recurse -Force
Get-ChildItem -Path `$env:TEMP -Recurse -Force | Where-Object {`$_.CreationTime -lt (Get-Date).AddDays(-1)} | Remove-Item -Recurse -Force
[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null
@ -11506,6 +11785,35 @@ public static void PostMessage()
}
Write-Warning -Message $Localization.RestartWarning
[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null
[xml]$ToastTemplate = @"
<toast duration="Long" scenario="reminder">
<visual>
<binding template="ToastGeneric">
<text>$($Localization.TelegramTitle)</text>
<group>
<subgroup>
<text hint-style="body" hint-wrap="true">https://t.me/sophia_chat</text>
</subgroup>
</group>
</binding>
</visual>
<audio src="ms-winsoundevent:notification.default" />
<actions>
<action arguments="https://t.me/sophia_chat" content="$($Localization.Open)" activationType="protocol"/>
<action arguments="dismiss" content="$($Localization.Dismiss)" activationType="system"/>
</actions>
</toast>
"@
$ToastXml = [Windows.Data.Xml.Dom.XmlDocument]::New()
$ToastXml.LoadXml($ToastTemplate.OuterXml)
$ToastMessage = [Windows.UI.Notifications.ToastNotification]::New($ToastXML)
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel").Show($ToastMessage)
}
#endregion Refresh

3
Sophia/PowerShell 5.1/cn-CN/Sophia.psd1

@ -67,12 +67,15 @@ Minute = 1分钟
NoData = 无数据
NoInternetConnection = 无网络连接
NoResponse = 无法建立https://store.rg-adguard.net连接
Open = 打开
Patient = 请等待
Restore = 恢复
Run = 运行
Select = 选择
SelectAll = 全选
Skip = 跳过
Skipped = 已跳过
Snooze = 推迟
TelegramTitle = 加入我们的官方电报群组
Uninstall = 卸载
'@

5
Sophia/PowerShell 5.1/de-DE/Sophia.psd1

@ -19,7 +19,7 @@ UserDefaultFolder = Möchten Sie den Speicherort des "{0
ReservedStorageIsInUse = Dieser Vorgang wird nicht unterstützt, wenn reservierter Speicher verwendet wird \nBitte warten Sie, bis alle Wartungsvorgänge abgeschlossen sind, und versuchen Sie es dann später erneut
ShortcutPinning = Die Verknüpfung "{0}" wird an Start angeheftet
UninstallUWPForAll = Für alle Benutzer
UninstallUWPTitle = UWP-Pakete
UWPAppsTitle = UWP-Pakete
WSLUpdateDownloading = Herunterladen des Update-Pakets für den Linux-Kernel... ~14 MB
WSLUpdateInstalling = Installation des Aktualisierungspakets für den Linux-Kernel...
HEVCDownloading = Herunterladen von HEVC-Videoerweiterungen vom Gerätehersteller... ~2,8 MB
@ -67,12 +67,15 @@ Minute = 1 Minute
NoData = Nichts anzuzeigen
NoInternetConnection = Keine Internetverbindung
NoResponse = Eine Verbindung mit https://store.rg-adguard.net konnte nicht hergestellt werden
Open = Öffnen
Patient = Bitte Warten...
Restore = Wiederherstellen
Run = Starten
Select = Wählen Sie
SelectAll = Wählen Sie Alle
Skip = Überspringen
Skipped = Übersprungen
Snooze = Verschieben
TelegramTitle = Abonniere doch unseren offiziellen Kanal telegram
Uninstall = Deinstallieren
'@

7
Sophia/PowerShell 5.1/en-US/Sophia.psd1

@ -19,7 +19,7 @@ UserDefaultFolder = Would you like to change the locatio
ReservedStorageIsInUse = This operation is not supported when reserved storage is in use\nPlease wait for any servicing operations to complete and then try again later
ShortcutPinning = The "{0}" shortcut is being pinned to Start
UninstallUWPForAll = For All Users
UninstallUWPTitle = UWP Apps
UWPAppsTitle = UWP Apps
WSLUpdateDownloading = Downloading the Linux kernel update package... ~14 MB
WSLUpdateInstalling = Installing the Linux kernel update package...
HEVCDownloading = Downloading HEVC Video Extensions from Device Manufacturer... ~2,8 MB
@ -34,7 +34,7 @@ CleanupTaskNotificationSnoozeInterval = Select a Reminder Interval
CleanupNotificationTaskDescription = Pop-up notification reminder about cleaning up Windows unused files and updates
SoftwareDistributionTaskNotificationEvent = The Windows update cache successfully deleted
TempTaskNotificationEvent = The temp files folder successfully cleaned up
FolderTaskDescription = The "{0}" folder cleanup
FolderTaskDescription = The {0} folder cleanup
ControlledFolderAccess = Controlled folder access
ProtectedFoldersRequest = Would you like to enable Controlled folder access and specify the folder that Microsoft Defender will protect from malicious apps and threats?
ProtectedFoldersListRemoved = Removed folders
@ -67,12 +67,15 @@ Minute = 1 Minute
NoData = Nothing to display
NoInternetConnection = No Internet connection
NoResponse = A connection could not be established with https://store.rg-adguard.net
Open = Open
Patient = Please wait...
Restore = Restore
Run = Run
Select = Select
SelectAll = Select all
Skip = Skip
Skipped = Skipped
Snooze = Snooze
TelegramTitle = Join our official Telegram group
Uninstall = Uninstall
'@

7
Sophia/PowerShell 5.1/es-ES/Sophia.psd1

@ -18,8 +18,8 @@ UserFolderSelect = Seleccione una carpeta para la carpe
UserDefaultFolder = ¿Le gustaría cambiar la ubicación de la carpeta "{0}" para el valor por defecto?
ReservedStorageIsInUse = Esta operación no es compatible cuando el almacenamiento reservada está en uso \nPor favor espera para su reparación a cualquier operación completa y luego a intentarlo más tarde
ShortcutPinning = El acceso directo "{0}" está siendo clavado en Start
UninstallUWPForAll =Para todos los usuarios
UninstallUWPTitle = Aplicaciones UWP
UninstallUWPForAll = Para todos los usuarios
UWPAppsTitle = Aplicaciones UWP
WSLUpdateDownloading = La descarga del paquete de actualización del kernel de Linux... ~14 MB
WSLUpdateInstalling = Instalando el paquete de actualización del kernel de Linux...
HEVCDownloading = Descargando HEVC Vídeo Extensiones del Fabricante del dispositivo... ~2,8 MB
@ -67,12 +67,15 @@ Minute = 1 minuto
NoData = Nada que mostrar
NoInternetConnection = No hay conexión a Internet
NoResponse = No se pudo establecer una conexión con https://store.rg-adguard.net
Open = Abierta
Patient = Por favor espere...
Restore = Restaurar
Run = Iniciar
Select = Seleccionar
SelectAll = Seleccionar todo
Skip = Omitir
Skipped = Omitido
Snooze = Posponer
TelegramTitle = Únete a nuestro canal oficial de Telegram
Uninstall = Desinstalar
'@

5
Sophia/PowerShell 5.1/fr-FR/Sophia.psd1

@ -19,7 +19,7 @@ UserDefaultFolder = ¿Le gustaría cambiar la ubicación
ReservedStorageIsInUse = Cette opération n'est pas suppportée le stockage réservé est en cours d'utilisation \nVeuillez attendre la fin des opérations de maintenance, puis réessayer plus tard
ShortcutPinning = Le raccourci "{0}" est épinglé sur Démarrer
UninstallUWPForAll = Pour tous les utilisateurs
UninstallUWPTitle = Applications UWP
UWPAppsTitle = Applications UWP
WSLUpdateDownloading = Téléchargement du package de mise à jour du noyau Linux... ~14 Mo
WSLUpdateInstalling = Installation du package de mise à jour du noyau Linux...
HEVCDownloading = Téléchargement de Extensions vidéo HEVC du fabricant de l'appareil... ~2,8 MB
@ -67,12 +67,15 @@ Minute = 1 minute
NoData = Rien à afficher
NoInternetConnection = Pas de connexion Internet
NoResponse = Une connexion n'a pas pu être établie avec https://store.rg-adguard.net
Open = Ouvert
Patient = Veuillez patienter...
Restore = Restaurer
Run = Démarrer
Select = Sélectionner
SelectAll = Tout sélectionner
Skip = Passer
Skipped = Passé
Snooze = Reporter
TelegramTitle = Rejoignez notre chaîne Telegram officielle
Uninstall = Désinstaller
'@

5
Sophia/PowerShell 5.1/it-IT/Sophia.psd1

@ -19,7 +19,7 @@ UserDefaultFolder = Volete cambiare la posizione della c
ReservedStorageIsInUse = Questa operazione non è supportata quando stoccaggio riservata è in uso \ nPer favore attesa per eventuali operazioni di manutenzione per completare e poi riprovare più tardi
ShortcutPinning = Il collegamento "{0}" è stato bloccato per iniziare
UninstallUWPForAll = Per tutti gli utenti
UninstallUWPTitle = UWP Apps
UWPAppsTitle = UWP Apps
WSLUpdateDownloading = Il download del pacchetto di aggiornamento del kernel di Linux... ~14 MB
WSLUpdateInstalling = Installazione del pacchetto di aggiornamento del kernel di Linux...
HEVCDownloading = Il download HEVC Video estensioni da dispositivo Produttore... ~2,8 MB
@ -67,12 +67,15 @@ Minute = 1 minuto
NoData = Niente da esposizione
NoInternetConnection = Nessuna connessione Internet
NoResponse = Non è stato possibile stabilire una connessione con https://store.rg-adguard.net
Open = Aperto
Patient = Attendere prego...
Restore = Ristabilire
Run = Eseguire
Select = Selezionare
SelectAll = Seleziona tutto
Skip = Salta
Skipped = Saltato
Snooze = Sonnellino
TelegramTitle = Unisciti al nostro canale ufficiale di Telegram
Uninstall = Disinstallare
'@

5
Sophia/PowerShell 5.1/pt-BR/Sophia.psd1

@ -19,7 +19,7 @@ UserDefaultFolder = Gostaria de alterar a localização
ReservedStorageIsInUse = Esta operação não é suportada quando o armazenamento reservada está em uso \ nAguarde para quaisquer operações de manutenção para ser concluído e, em seguida, tente novamente mais tarde
ShortcutPinning = O atalho "{0}" está sendo fixado no Iniciar
UninstallUWPForAll = Para todos os usuários
UninstallUWPTitle = Apps UWP
UWPAppsTitle = Apps UWP
WSLUpdateDownloading = Baixando o pacote de atualização do kernel Linux... ~14 MB
WSLUpdateInstalling = Instalando o pacote de atualização do kernel Linux...
HEVCDownloading = Baixando HEVC Vídeo Extensões de Dispositivo Fabricante... ~ 2,8 MB
@ -67,12 +67,15 @@ Minute = 1 minuto
NoData = Nada à exibir
NoInternetConnection = Sem conexão à Internet
NoResponse = Uma conexão não pôde ser estabelecida com https://store.rg-adguard.net
Open = Abrir
Patient = Por favor, espere...
Restore = Restaurar
Run = Executar
Select = Selecione
SelectAll = Selecionar tudo
Skip = Pular
Skipped = Ignorados
Snooze = Soneca
TelegramTitle = Entre no canal oficial do Telegram
Uninstall = Desinstalar
'@

5
Sophia/PowerShell 5.1/ru-RU/Sophia.psd1

@ -19,7 +19,7 @@ UserDefaultFolder = Хотите изменить рас
ReservedStorageIsInUse = Операция не поддерживается, пока используется зарезервированное хранилище\nПожалуйста, дождитесь окончания всех обслуживающих операций и попробуйте заново
ShortcutPinning = Ярлык "{0}" закрепляется на начальном экране
UninstallUWPForAll = Для всех пользователей
UninstallUWPTitle = UWP-приложения
UWPAppsTitle = UWP-приложения
WSLUpdateDownloading = Скачивается пакет обновления ядра Linux... ~14 МБ
WSLUpdateInstalling = Установка пакета обновления ядра Linux...
HEVCDownloading = Скачивается расширения для видео HEVC от производителя устройства... ~2,8 МБ
@ -67,12 +67,15 @@ Minute = 1 минута
NoData = Отсутствуют данные
NoInternetConnection = Отсутствует интернет-соединение
NoResponse = Невозможно установить соединение с https://store.rg-adguard.net
Open = Открыть
Patient = Пожалуйста, подождите...
Restore = Восстановить
Run = Запустить
Select = Выбрать
SelectAll = Выбрать всё
Skip = Пропустить
Skipped = Пропущено
Snooze = Отложить
TelegramTitle = Присоединяйтесь к нашей официальной группе в Telegram
Uninstall = Удалить
'@

5
Sophia/PowerShell 5.1/tr-TR/Sophia.psd1

@ -19,7 +19,7 @@ UserDefaultFolder = "{0}" klasörünün konumunu varsay
ReservedStorageIsInUse = Ayrılmış depolama kullanımdayken bu işlem desteklenmez. \nLütfen tüm servis işlemlerinin tamamlanmasını bekleyin ve daha sonra tekrar deneyin
ShortcutPinning = "{0}" kısayolu Başlangıç sekmesine sabitlendi
UninstallUWPForAll = Bütün kullanıcılar için
UninstallUWPTitle = UWP Uygulamaları
UWPAppsTitle = UWP Uygulamaları
WSLUpdateDownloading = Linux kernel güncelleme paketi indiriliyor... ~14 MB
WSLUpdateInstalling = Kernel güncelleme paketi kuruluyor
HEVCDownloading = "Cihaz Üreticisinden HEVC Video Uzantıları" İndiriliyor... ~2,8 MB
@ -67,12 +67,15 @@ Minute = 1 dakika
NoData = Görüntülenecek bir şey yok
NoInternetConnection = İnternet bağlantısı yok
NoResponse = https://store.rg-adguard.net ile bağlantı kurulamadı
Open = Açık
Patient = Lütfen bekleyin...
Restore = Onarmak
Run = Başlat
Select = Seç
SelectAll = Hepsini seç
Skip = Atla
Skipped = Atlandı
Snooze = Ertelemek
TelegramTitle = Resmi Telegram kanalımıza katılın
Uninstall = Kaldır
'@

5
Sophia/PowerShell 5.1/uk-UA/Sophia.psd1

@ -19,7 +19,7 @@ UserDefaultFolder = Хочете змінити розт
ReservedStorageIsInUse = Операція не підтримується, поки використовується зарезервоване сховище\nБудь ласка, дочекайтеся закінчення всіх обслуговуючих операцій і спробуйте знову
ShortcutPinning = Ярлик "{0}" закріплюється на початковому екрані
UninstallUWPForAll = Для всіх користувачів
UninstallUWPTitle = Програми UWP
UWPAppsTitle = Програми UWP
WSLUpdateDownloading = Завантажується пакет оновлення ядра Linux... ~14 МБ
WSLUpdateInstalling = Встановлення пакета оновлення ядра Linux...
HEVCDownloading = Завантаження "Розширення відео HEVC від виробника пристрою"... ~2,8 МБ
@ -67,12 +67,15 @@ Minute = 1 хвилина
NoData = Відсутні дані
NoInternetConnection = Відсутнє інтернет-з'єднання
NoResponse = Не вдалося встановити звязок із https://store.rg-adguard.net
Open = Відкрити
Patient = Будь ласка, зачекайте...
Restore = Відновити
Run = Запустити
Select = Вибрати
SelectAll = Вибрати все
Skip = Пропустити
Skipped = Пропущено
Snooze = Відкласти
TelegramTitle = Приєднуйтесь до нашої офіційної групи Telegram
Uninstall = Видалити
'@

Loading…
Cancel
Save