@ -2,14 +2,14 @@
. SYNOPSIS
" Windows 10 Sophia Script " is a PowerShell module for Windows 10 fine-tuning and automating the routine tasks
Version : v5 . 3 . 2
Date : 16 . 01 . 2021
Version : v5 . 3 . 3
Date : 20 . 01 . 2021
Copyright ( c ) 2021 farag & oZ-Zo
Thanks to all https : / / forum . ru-board . com members involved
. DESCRIPTION
Supported Windows 10 versions : 2004 ( 20H1 ) / 2009 ( 20H2 ) , 19041 / 19042 , Home / Pro / Enterprise , x64
Supported Windows 10 versions : 2004 ( 20H1 ) / 20H2 ( 2009 ) , 19041 / 19042 , Home / Pro / Enterprise , x64
Running the script is best done on a fresh install because running it on wrong tweaked system may result in errors occurring
@ -22,7 +22,7 @@
. NOTES
https : / / forum . ru-board . com / topic . cgi ? forum = 62 & topic = 30617 #15
https : / / habr . com / en / post / 521202 /
https : / / habr . com / post / 521202 /
https : / / forums . mydigitallife . net / threads / powershell-script -setup -windows - 10 . 81675 /
https : / / www . reddit . com / r / PowerShell / comments / go2n5v / powershell_script_setup_windows_10 /
@ -66,18 +66,23 @@ function Checkings
Get-ChildItem -Path $PSScriptRoot -Recurse -Force | Unblock-File -Confirm : $false
# Turn off Controlled folder access to let the script proceed
# Вы ключить контролируемый доступ к папкам
switch ( ( Get-MpPreference ) . EnableControlledFolderAccess -eq 1 )
# От ключить контролируемый доступ к папкам
switch ( ( Get-MpPreference ) . EnableControlledFolderAccess )
{
$true
" 1 "
{
Write-Warning -Message $Localization . ControlledFolderAccessDisabled
$Script:ControlledFolderAccess = $true
Set-MpPreference -EnableControlledFolderAccess Disabled
# Open "Ransomware protection" page
# Открыть раздел "Защита от программ-шантажистов"
Start-Process -FilePath windowsdefender : / / RansomwareProtection
}
" 0 "
{
$Script:ControlledFolderAccess = $false
}
}
# Checking whether the current module version is the latest
@ -91,7 +96,6 @@ function Checkings
$true
{
Write-Warning -Message $Localization . UnsupportedRelease
Write-Error -Message $Localization . UnsupportedRelease -ErrorAction SilentlyContinue
Start-Process -FilePath " https://github.com/farag2/Windows-10-Sophia-Script/releases/latest "
exit
@ -404,6 +408,15 @@ function WindowsFeedback
. EXAMPLE
ScheduledTasks -Enable
. NOTES
A pop-up dialog box enables the user to select tasks
Current user only
Используется всплывающее диалоговое окно , позволяющее пользователю отмечать задачи
Только для текущего пользователя
Made by https : / / github . com / oz-zo
#>
function ScheduledTasks
{
@ -2588,8 +2601,15 @@ function TrayIcons
}
}
# Unpin "Microsoft Edge" and "Microsoft Store" from the taskbar (current user only)
# Открепить Microsoft Edge и Microsoft Store от панели задач (только для текущего пользователя)
<#
. SYNOPSIS
Unpin " Microsoft Edge " and " Microsoft Store " from the taskbar
Открепить Microsoft Edge и Microsoft Store от панели задач
. NOTES
Current user only
Только для текущего пользователя
#>
function UnpinTaskbarEdgeStore
{
$Signature = @ {
@ -3403,7 +3423,8 @@ function InstallOneDrive
return
}
}
Get-ScheduledTask -TaskName " Onedrive* Update* " | Start-ScheduledTask
Get-ScheduledTask -TaskName " Onedrive* Update* " | Enable-ScheduledTask
}
}
#endregion OneDrive
@ -4562,11 +4583,13 @@ function WindowsFeatures
WindowsCapabilities -Enable
. NOTES
A pop-up dialog box enables the user to select features to remove
A pop-up dialog box enables the user to select features
Current user only
Используется всплывающее диалоговое окно , позволяющее пользователю отмети ть компоненты на удаление
Используется всплывающее диалоговое окно , позволяющее пользователю отмеча ть компоненты
Только для текущего пользователя
Made by https : / / github . com / oz-zo
#>
function WindowsCapabilities
{
@ -4605,15 +4628,6 @@ function WindowsCapabilities
# Быстрая поддержка (Майкрософт)
" App.Support.QuickAssist* " ,
<#
Windows Media Player
Проигрыватель Windows Media
If you want to leave " Multimedia settings " in the advanced settings of Power Options do not uninstall this feature
Если вы хотите оставить параметр " Параметры мультимедиа " в дополнительных параметрах электропитания , не удаляйте этот компонент
#>
" Media.WindowsMediaPlayer* " ,
# Microsoft Paint
" Microsoft.Windows.MSPaint* " ,
@ -4625,16 +4639,40 @@ function WindowsCapabilities
" Print.Fax.Scan* "
)
# The following FODv2 items will have their checkboxes unchecked
# Следующие дополнительные компоненты будут иметь чекбоксы неотмеченными
$UncheckedCapabilities = @ (
# Internet Explorer 11
" Browser.InternetExplorer* " ,
# Math Recognizer
# Распознаватель математических знаков
" MathRecognizer* " ,
<#
Windows Media Player
Проигрыватель Windows Media
If you want to leave " Multimedia settings " element in the advanced settings of Power Options do not uninstall this feature
Если вы хотите оставить параметр " Параметры мультимедиа " в дополнительных параметрах электропитания , не удаляйте этот компонент
#>
" Media.WindowsMediaPlayer* " ,
# Language components
# Языковые компоненты
" OpenSSH.Client* "
)
# The following FODv2 items will be excluded from the display
# Следующие дополнительные компоненты будут исключены из отображения
$ExcludedCapabilities = @ (
# The DirectX Database to configure and optimize apps when multiple Graphics Adapters are present
# База данных DirectX для настройки и оптимизации приложений при наличии нескольких графических адаптеров
" DirectX\.Configuration\.Database " ,
" DirectX.Configuration.Database* " ,
# Language components
# Языковые компоненты
" Language\. " ,
" Language.* " ,
# Notepad
# Блокнот
@ -4642,15 +4680,19 @@ function WindowsCapabilities
# Mail, contacts, and calendar sync component
# Компонент синхронизации почты, контактов и календаря
" OneCoreUAP\.OneSync " ,
" OneCoreUAP.OneSync* " ,
# Windows PowerShell Intergrated Scripting Enviroment
# Интегрированная среда сценариев Windows PowerShell
" Microsoft.Windows.PowerShell.ISE* " ,
# Management of printers, printer drivers, and printer servers
# Управление принтерами, драйверами принтеров и принт-серверами
" Print\.Management\.Console " ,
" Print.Management.Console* " ,
# Features critical to Windows functionality
# Компоненты, критичные для работоспособности Windows
" Windows\ .Client\ .ShellComponents "
" Windows.Client.ShellComponents* "
)
#endregion Variables
@ -4743,16 +4785,24 @@ function WindowsCapabilities
$OFS = " | "
Get-WindowsCapability -Online | Where-Object -FilterScript { $_ . Name -cmatch $Capabilities } | Remove-WindowsCapability -Online
$OFS = " "
if ( ( [string] $Capabilities -cmatch " Print.Fax.Scan* " ) -or ( [string] $Capabilities -cmatch " Browser.InternetExplorer* " ) )
{
Write-Warning -Message $Localization . RestartWarning
}
}
function EnableButton
{
Write-Verbose -Message $Localization . Patient -Verbose
[void] $Window . Close ( )
$OFS = " | "
Get-WindowsCapability -Online | Where-Object -FilterScript { $_ . Name -cmatch $Capabilities } | Add-WindowsCapability -Online
$OFS = " "
if ( ( [string] $Capabilities -cmatch " Print.Fax.Scan* " ) -or ( [string] $Capabilities -cmatch " Browser.InternetExplorer* " ) )
{
Write-Warning -Message $Localization . RestartWarning
}
}
function Add-CapabilityControl
@ -4781,15 +4831,19 @@ function WindowsCapabilities
[void] $PanelContainer . Children . Add ( $StackPanel )
$CheckBox . IsChecked = $false
# If capability checked, add to the array list to remove
# Если компонент выделен, то добавить в массив для удаления
if ( $CheckedCapabilities | Where-Object -FilterScript { $Capability -like $_ } )
if ( $Un CheckedCapabilities | Where-Object -FilterScript { $Capability -like $_ } )
{
$CheckBox . IsChecked = $true
[void] $Capabilities . Add ( $Capability )
$CheckBox . IsChecked = $false
# Exit function, item is not checked
# Выход из функции, если элемент не выделен
return
}
# If capability checked, add to the array list to remove
# Если компонент выделен, то добавить в массив для удаления
[void] $Capabilities . Add ( $Capability )
}
#endregion Functions
@ -4797,12 +4851,23 @@ function WindowsCapabilities
{
" Enable "
{
try
{
( Invoke-WebRequest -Uri https : / / www . google . com -UseBasicParsing -DisableKeepAlive -Method Head ) . StatusDescription
}
catch [System.Net.WebException]
{
Write-Warning -Message $Localization . NoInternetConnection
Write-Error -Message $Localization . NoInternetConnection -ErrorAction SilentlyContinue
return
}
#region Events Handlers
$OptionalCapabilities = New-Object -TypeName System . Collections . ArrayList ( $null )
# Window Loaded Event
$Window . Add_Loaded ( {
$OFS = " | "
$OptionalCapabilities = Get-WindowsCapability -Online | Where-Object -FilterScript { ( $_ . State -eq " NotPresent " ) -and ( $_ . Name -cmatch $CheckedCapabilities ) -and ( $_ . Name -cnotmatch $ExcludedCapabilities ) }
$OptionalCapabilities = Get-WindowsCapability -Online | Where-Object -FilterScript { ( $_ . State -eq " NotPresent " ) -and ( $_ . Name -cmatch $CheckedCapabilities ) - ( $_ . Name -cmatch $UncheckedCapabilities ) -and ( $_ . Name -cnotmatch $ExcludedCapabilities ) }
if ( $OptionalCapabilities . Count -gt 0 )
{
$OptionalCapabilities | ForEach-Object -Process {
@ -4830,7 +4895,7 @@ function WindowsCapabilities
# Window Loaded Event
$Window . Add_Loaded ( {
$OFS = " | "
$OptionalCapabilities = Get-WindowsCapability -Online | Where-Object -FilterScript { ( $_ . State -eq " Installed " ) -and ( $_ . Name -cmatch $CheckedCapabilities ) -and ( $_ . Name -c notmatch $ExcludedCapabilities ) }
$OptionalCapabilities = Get-WindowsCapability -Online | Where-Object -FilterScript { ( $_ . State -eq " Installed " ) -and ( $_ . Name -cnotmatch $ExcludedCapabilities ) }
if ( $OptionalCapabilities . Count -gt 0 )
{
$OptionalCapabilities | ForEach-Object -Process {
@ -4853,17 +4918,6 @@ function WindowsCapabilities
}
}
try
{
( Invoke-WebRequest -Uri https : / / www . google . com -UseBasicParsing -DisableKeepAlive -Method Head ) . StatusDescription
}
catch [System.Net.WebException]
{
Write-Warning -Message $Localization . NoInternetConnection
Write-Error -Message $Localization . NoInternetConnection -ErrorAction SilentlyContinue
return
}
Write-Verbose -Message $Localization . DialogBoxOpening -Verbose
$Window . Title = $Localization . FODWindowTitle
@ -4930,16 +4984,16 @@ function UpdateMicrosoftProducts
<#
. SYNOPSIS
Do not let / let UWP apps run in the background , except the followings . . .
Не разрешать / разрешать UWP - приложениям работать в фоновом режиме , кроме следующих . . .
Do not let / let UWP apps run in the background
Не разрешать / разрешать UWP - приложениям работать в фоновом режиме
. PARAMETER Disable
Do not let UWP apps run in the background , except the followings . . .
Не разрешать UWP - приложениям работать в фоновом режиме , кроме следующих . . .
Do not let UWP apps run in the background , except those are saved in $ExcludedBackgroundApps variable
Не разрешать UWP - приложениям работать в фоновом режиме , кроме тех , что сохранены в переменной $ExcludedBackgroundApps
. PARAMETER Enable
Let UWP apps run in the background , except the followings . . .
Разрешать UWP - приложениям работать в фоновом режиме , кроме следующих . . .
Let all UWP apps run in the background
Разрешать всем UWP - приложениям работать в фоновом режиме
. EXAMPLE
BackgroundUWPApps -Disable
@ -5313,13 +5367,10 @@ function SetUserShellFolderLocation
$Default
)
function UserShellFolder
{
<#
. SYNOPSIS
Change the location of the each user folder using SHSetKnownFolderPath function
Изменить расположение каждой пользовательской папки , используя функцию " SHSetKnownFolderPath "
https : / / docs . microsoft . com / en-us / windows / win32 / api / shlobj_core / nf-shlobj_core -shgetknownfolderpath
. PARAMETER RemoveDesktopINI
The RemoveDesktopINI argument removes desktop . ini in the old user shell folder
@ -5331,7 +5382,11 @@ function SetUserShellFolderLocation
. NOTES
User files or folders won ' t me moved to a new location
Пользовательские файлы не будут перенесены в новое расположение
https : / / docs . microsoft . com / en-us / windows / win32 / api / shlobj_core / nf-shlobj_core -shgetknownfolderpath
#>
function UserShellFolder
{
[ CmdletBinding ( ) ]
param
(
@ -5497,8 +5552,10 @@ public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, Int
ShowMenu -Menu $ListOfItems -Default $DefaultChoice
. NOTES
Не работает в PowerShell ISE
Doesn ' t work in PowerShell ISE
Не работает в PowerShell ISE
https : / / qna . habr . com / user / MaxKozlov
#>
function ShowMenu
{
@ -5579,11 +5636,11 @@ public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, Int
# Если количество дисков больше одного, сделать второй диск в списке диском по умолчанию
if ( $DriveLetters . Count -gt 1 )
{
$Global :Default = 1
$Script :Default = 1
}
else
{
$Global :Default = 0
$Script :Default = 0
}
# Desktop
@ -5603,7 +5660,7 @@ public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, Int
{
" 0 "
{
$SelectedDrive = ShowMenu -Title $Localization . DesktopDriveSelect -Menu $DriveLetters -Default $Global :Default
$SelectedDrive = ShowMenu -Title $Localization . DesktopDriveSelect -Menu $DriveLetters -Default $Script :Default
UserShellFolder -UserFolder Desktop -FolderPath " $ {SelectedDrive}:\Desktop " -RemoveDesktopINI
}
" 1 "
@ -5629,7 +5686,7 @@ public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, Int
{
" 0 "
{
$SelectedDrive = ShowMenu -Title $Localization . DocumentsDriveSelect -Menu $DriveLetters -Default $Global :Default
$SelectedDrive = ShowMenu -Title $Localization . DocumentsDriveSelect -Menu $DriveLetters -Default $Script :Default
UserShellFolder -UserFolder Documents -FolderPath " $ {SelectedDrive}:\Documents " -RemoveDesktopINI
}
" 1 "
@ -5655,7 +5712,7 @@ public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, Int
{
" 0 "
{
$SelectedDrive = ShowMenu -Title $Localization . DownloadsDriveSelect -Menu $DriveLetters -Default $Global :Default
$SelectedDrive = ShowMenu -Title $Localization . DownloadsDriveSelect -Menu $DriveLetters -Default $Script :Default
UserShellFolder -UserFolder Downloads -FolderPath " $ {SelectedDrive}:\Downloads " -RemoveDesktopINI
}
" 1 "
@ -5681,7 +5738,7 @@ public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, Int
{
" 0 "
{
$SelectedDrive = ShowMenu -Title $Localization . MusicDriveSelect -Menu $DriveLetters -Default $Global :Default
$SelectedDrive = ShowMenu -Title $Localization . MusicDriveSelect -Menu $DriveLetters -Default $Script :Default
UserShellFolder -UserFolder Music -FolderPath " $ {SelectedDrive}:\Music " -RemoveDesktopINI
}
" 1 "
@ -5707,7 +5764,7 @@ public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, Int
{
" 0 "
{
$SelectedDrive = ShowMenu -Title $Localization . PicturesDriveSelect -Menu $DriveLetters -Default $Global :Default
$SelectedDrive = ShowMenu -Title $Localization . PicturesDriveSelect -Menu $DriveLetters -Default $Script :Default
UserShellFolder -UserFolder Pictures -FolderPath " $ {SelectedDrive}:\Pictures " -RemoveDesktopINI
}
" 1 "
@ -5733,7 +5790,7 @@ public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, Int
{
" 0 "
{
$SelectedDrive = ShowMenu -Title $Localization . VideosDriveSelect -Menu $DriveLetters -Default $Global :Default
$SelectedDrive = ShowMenu -Title $Localization . VideosDriveSelect -Menu $DriveLetters -Default $Script :Default
UserShellFolder -UserFolder Videos -FolderPath " $ {SelectedDrive}:\Videos " -RemoveDesktopINI
}
" 1 "
@ -7408,7 +7465,7 @@ function syspin
}
Invoke-WebRequest @Parameters
$Global :syspin = $true
$Script :syspin = $true
}
}
catch [System.Net.WebException]
@ -7539,18 +7596,27 @@ function PinCommandPrompt
#region UWP apps
<#
. SYNOPSIS
Uninstall UWP apps using the pop-up dialog box that enables the user to select packages to remove
App packages will not be installed for new users if the " Uninstall for All Users " box is checked
Удалить UWP - приложения , используя всплывающее диалоговое окно , позволяющее пользователю отметить пакеты на удаление
Приложения не будут установлены для новых пользователе , если отмечено " Удалять для всех пользователей "
Uninstall UWP apps
Удалить UWP - приложения
. NOTES
. DESCRIPTION
Add UWP apps packages names to the $UncheckedAppXPackages array list by retrieving their packages names using the following command :
( Get-AppxPackage -PackageTypeFilter Bundle -AllUsers ) . Name
Добавьте имена пакетов UWP - приложений в массив $UncheckedAppXPackages , получив названия их пакетов с помощью команды :
( Get-AppxPackage -PackageTypeFilter Bundle -AllUsers ) . Name
App packages will not be installed for new users if the " Uninstall for All Users " box is checked
Приложения не будут установлены для новых пользователе , если отмечено " Удалять для всех пользователей "
. NOTES
A pop-up dialog box enables the user to select packages
Используется всплывающее диалоговое окно , позволяющее пользователю отмечать пакеты
Current user only
Только для текущего пользователя
Made by https : / / github . com / oz-zo
#>
function UninstallUWPApps
{
@ -8832,6 +8898,10 @@ function PUAppsDetection
. EXAMPLE
DefenderSandbox -Enable
. NOTES
There is a bug in KVM with QEMU : enabling this function causes VM to freeze up during the loading phase of Windows
В KVM с QEMU присутсвует баг : включение этой функции приводит ВМ к зависанию во время загрузки Windows
#>
function DefenderSandbox
{
@ -10603,6 +10673,13 @@ public static void PostMessage()
# Перезапустить меню "Пуск"
Stop-Process -Name StartMenuExperienceHost -Force -ErrorAction Ignore
# Turn on Controlled folder access if it was turned on
# Включить контролируемый доступ к папкам, если был включен
if ( $Script:ControlledFolderAccess )
{
Set-MpPreference -EnableControlledFolderAccess Enabled
}
Write-Warning -Message $Localization . RestartWarning
}
#endregion Refresh