You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2144 lines
113 KiB
2144 lines
113 KiB
<#
|
|
.SYNOPSIS
|
|
The PowerShell script is a set of tweaks for fine-tuning Windows 10 and automating the routine tasks.
|
|
.DESCRIPTION
|
|
Supported Windows versions:
|
|
Windows 10 18362/18363 (1903/1909) x64. Tested on Pro/Enterprise editions.
|
|
|
|
Check whether file is encoded in UTF-8 with BOM.
|
|
PowerShell must be run with elevated privileges;
|
|
Set PowerShell execution policy: Set-ExecutionPolicy -ExecutionPolicy Bypass -Force to be able to run .ps1 files.
|
|
|
|
Read the code you run carefully.
|
|
Some functions are presented as an example only.
|
|
You must be aware of the meaning of the functions in the code.
|
|
If you're not sure what the script does, do not run it.
|
|
Strongly recommended to run the script after fresh installation.
|
|
Some of functions can be run also on LTSB/LTSC and on older versions of Windows and PowerShell (not recommended to run on the x86 systems).
|
|
.EXAMPLE
|
|
PS C:\WINDOWS\system32> & '.\Win 10.ps1'
|
|
.NOTES
|
|
Version: v4.0.23
|
|
Date: 06.03.2020
|
|
Written by: farag
|
|
Thanks to all http://forum.ru-board.com members involved
|
|
Ask a question on
|
|
- http://forum.ru-board.com/topic.cgi?forum=62&topic=30617#15
|
|
- https://habr.com/en/post/465365/
|
|
- https://forums.mydigitallife.net/threads/powershell-script-setup-windows-10.80139/
|
|
- https://www.reddit.com/r/Windows10/comments/ctg8jw/powershell_script_setup_windows_10/
|
|
Copyright (c) 2020 farag
|
|
.LINK
|
|
https://github.com/farag2/Windows-10-Setup-Script
|
|
#>
|
|
|
|
#Requires -RunAsAdministrator
|
|
#Requires -Version 5
|
|
|
|
#region Preparation
|
|
Clear-Host
|
|
|
|
# Get information about the current culture settings
|
|
# Получить сведения о параметрах текущей культуры
|
|
if ($PSUICulture -eq "ru-RU")
|
|
{
|
|
$RU = $true
|
|
}
|
|
# Detect the OS bitness
|
|
# Определить разрядность ОС
|
|
if (-not ([Environment]::Is64BitOperatingSystem))
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Warning -Message "Скрипт поддерживает только Windows 10 x64"
|
|
}
|
|
else
|
|
{
|
|
Write-Warning -Message "The script supports Windows 10 x64 only"
|
|
}
|
|
break
|
|
}
|
|
# Detect the PowerShell bitness
|
|
# Определить разрядность PowerShell
|
|
if (-not ([IntPtr]::Size -eq 8))
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Warning -Message "Скрипт поддерживает только PowerShell x64"
|
|
}
|
|
else
|
|
{
|
|
Write-Warning -Message "The script supports PowerShell x64 only"
|
|
}
|
|
break
|
|
}
|
|
#endregion Preparation
|
|
|
|
#region Begin
|
|
# Сlear $Error variable
|
|
# Очистка переменной $Error
|
|
$Error.Clear()
|
|
# Checking the file encoding if it runs locally
|
|
# Проверка кодировки файла, если он запускается локально
|
|
if ($PSCommandPath)
|
|
{
|
|
[System.IO.FileInfo]$script = Get-Item -Path $PSCommandPath
|
|
$SequenceBOM = New-Object System.Byte[] 3
|
|
$reader = $script.OpenRead()
|
|
$bytesRead = $reader.Read($SequenceBOM, 0, 3)
|
|
$reader.Dispose()
|
|
if ($bytesRead -eq 3 -and $SequenceBOM[0] -ne 239 -and $SequenceBOM[1] -ne 187 -and $SequenceBOM[2] -ne 191)
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Warning -Message "Файл не был сохранен в кодировке `"UTF-8 с BOM`""
|
|
}
|
|
else
|
|
{
|
|
Write-Warning -Message "The file wasn't saved in `"UTF-8 with BOM`" encoding"
|
|
}
|
|
break
|
|
}
|
|
}
|
|
# Set the encoding to UTF-8 without BOM for the PowerShell session
|
|
# Установить кодировку UTF-8 без BOM для текущей сессии PowerShell
|
|
if ($RU)
|
|
{
|
|
ping.exe | Out-Null
|
|
$OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8
|
|
}
|
|
#endregion Begin
|
|
|
|
#region Privacy & Telemetry
|
|
# Turn off "Connected User Experiences and Telemetry" service
|
|
# Отключить службу "Функциональные возможности для подключенных пользователей и телеметрия"
|
|
Get-Service -Name DiagTrack | Stop-Service -Force
|
|
Get-Service -Name DiagTrack | Set-Service -StartupType Disabled
|
|
# Turn off per-user services
|
|
# Отключить пользовательские службы
|
|
$services = @(
|
|
# Contact Data
|
|
# Служба контактных данных
|
|
"PimIndexMaintenanceSvc_*"
|
|
# User Data Storage
|
|
# Служба хранения данных пользователя
|
|
"UnistoreSvc_*"
|
|
# User Data Access
|
|
# Служба доступа к данным пользователя
|
|
"UserDataSvc_*"
|
|
)
|
|
Get-Service -Name $services | Stop-Service -Force
|
|
New-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\PimIndexMaintenanceSvc -Name Start -PropertyType DWord -Value 4 -Force
|
|
New-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\PimIndexMaintenanceSvc -Name UserServiceFlags -PropertyType DWord -Value 0 -Force
|
|
New-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\UnistoreSvc -Name Start -PropertyType DWord -Value 4 -Force
|
|
New-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\UnistoreSvc -Name UserServiceFlags -PropertyType DWord -Value 0 -Force
|
|
New-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\UserDataSvc -Name Start -PropertyType DWord -Value 4 -Force
|
|
New-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\UserDataSvc -Name UserServiceFlags -PropertyType DWord -Value 0 -Force
|
|
# Stop event trace sessions
|
|
# Остановить сеансы отслеживания событий
|
|
Get-EtwTraceSession -Name DiagLog -ErrorAction Ignore | Remove-EtwTraceSession
|
|
# Turn off the data collectors at the next computer restart
|
|
# Отключить сборщики данных при следующем запуске ПК
|
|
Update-AutologgerConfig -Name DiagLog, AutoLogger-Diagtrack-Listener -Start 0
|
|
# Set the operating system diagnostic data level
|
|
# Установить уровень отправляемых диагностических сведений
|
|
if ((Get-WindowsEdition -Online).Edition -eq "Enterprise" -or (Get-WindowsEdition -Online).Edition -eq "Education")
|
|
{
|
|
# "Security"
|
|
# "Безопасность"
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 0 -Force
|
|
}
|
|
else
|
|
{
|
|
# "Basic"
|
|
# "Базовый"
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 1 -Force
|
|
}
|
|
# Turn off Windows Error Reporting
|
|
# Отключить отчеты об ошибках Windows
|
|
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force
|
|
# Change Windows Feedback frequency to "Never"
|
|
# Изменить частоту формирования отзывов на "Никогда"
|
|
if (-not (Test-Path -Path HKCU:\Software\Microsoft\Siuf\Rules))
|
|
{
|
|
New-Item -Path HKCU:\Software\Microsoft\Siuf\Rules -Force
|
|
}
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name NumberOfSIUFInPeriod -PropertyType DWord -Value 0 -Force
|
|
# Turn off diagnostics tracking scheduled tasks
|
|
# Отключить задачи диагностического отслеживания
|
|
$tasks = @(
|
|
# Collects program telemetry information if opted-in to the Microsoft Customer Experience Improvement Program.
|
|
# Собирает телеметрические данные программы при участии в Программе улучшения качества программного обеспечения Майкрософт
|
|
"Microsoft Compatibility Appraiser"
|
|
# Collects program telemetry information if opted-in to the Microsoft Customer Experience Improvement Program
|
|
# Сбор телеметрических данных программы при участии в программе улучшения качества ПО
|
|
"ProgramDataUpdater"
|
|
# This task collects and uploads autochk SQM data if opted-in to the Microsoft Customer Experience Improvement Program
|
|
# Эта задача собирает и загружает данные SQM при участии в программе улучшения качества программного обеспечения
|
|
"Proxy"
|
|
# If the user has consented to participate in the Windows Customer Experience Improvement Program, this job collects and sends usage data to Microsoft
|
|
# Если пользователь изъявил желание участвовать в программе по улучшению качества программного обеспечения Windows, эта задача будет собирать и отправлять сведения о работе программного обеспечения в Майкрософт
|
|
"Consolidator"
|
|
# The USB CEIP (Customer Experience Improvement Program) task collects Universal Serial Bus related statistics and information about your machine
|
|
# При выполнении задачи программы улучшения качества ПО шины USB (USB CEIP) осуществляется сбор статистических данных об использовании универсальной последовательной шины USB и сведений о компьютере
|
|
"UsbCeip"
|
|
# The Windows Disk Diagnostic reports general disk and system information to Microsoft for users participating in the Customer Experience Program
|
|
# Для пользователей, участвующих в программе контроля качества программного обеспечения, служба диагностики дисков Windows предоставляет общие сведения о дисках и системе в корпорацию Майкрософт
|
|
"Microsoft-Windows-DiskDiagnosticDataCollector"
|
|
# Protects user files from accidental loss by copying them to a backup location when the system is unattended
|
|
# Защищает файлы пользователя от случайной потери за счет их копирования в резервное расположение, когда система находится в автоматическом режиме
|
|
"File History (maintenance mode)"
|
|
# HelloFace
|
|
"FODCleanupTask"
|
|
# Measures a system's performance and capabilities
|
|
# Измеряет быстродействие и возможности системы
|
|
"WinSAT"
|
|
# This task shows various Map related toasts
|
|
# Эта задача показывает различные тосты (всплывающие уведомления) приложения "Карты"
|
|
"MapsToastTask"
|
|
# This task checks for updates to maps which you have downloaded for offline use
|
|
# Эта задача проверяет наличие обновлений для карт, загруженных для автономного использования
|
|
"MapsUpdateTask"
|
|
# Initializes Family Safety monitoring and enforcement
|
|
# Инициализация контроля и применения правил семейной безопасности
|
|
"FamilySafetyMonitor"
|
|
# Synchronizes the latest settings with the Microsoft family features service
|
|
# Синхронизирует последние параметры со службой функций семьи учетных записей Майкрософт
|
|
"FamilySafetyRefreshTask"
|
|
# Windows Error Reporting task to process queued reports
|
|
# Задача отчетов об ошибках обрабатывает очередь отчетов
|
|
"QueueReporting"
|
|
# XblGameSave Standby Task
|
|
"XblGameSaveTask"
|
|
)
|
|
Get-ScheduledTask -TaskName $tasks | Disable-ScheduledTask
|
|
# Do not offer tailored experiences based on the diagnostic data setting
|
|
# Не предлагать персонализированные возможности, основанные на выбранном параметре диагностических данных
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Privacy -Name TailoredExperiencesWithDiagnosticDataEnabled -PropertyType DWord -Value 0 -Force
|
|
# Do not let apps on other devices open and message apps on this device, and vice versa
|
|
# Не разрешать приложениям на других устройствах запускать приложения и отправлять сообщения на этом устройстве и наоборот
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\CDP -Name RomeSdkChannelUserAuthzPolicy -PropertyType DWord -Value 0 -Force
|
|
# Do not allow apps to use advertising ID
|
|
# Не разрешать приложениям использовать идентификатор рекламы
|
|
New-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 0 -Force
|
|
# Do not use sign-in info to automatically finish setting up device after an update or restart
|
|
# Не использовать данные для входа для автоматического завершения настройки устройства после перезапуска или обновления
|
|
$sid = (Get-CimInstance -ClassName Win32_UserAccount | Where-Object -FilterScript {$_.Name -eq "$env:USERNAME"}).SID
|
|
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\UserARSO\$sid"))
|
|
{
|
|
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\UserARSO\$sid" -Force
|
|
}
|
|
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\UserARSO\$sid" -Name OptOut -PropertyType DWord -Value 1 -Force
|
|
# Do not let websites provide locally relevant content by accessing language list
|
|
# Не позволять веб-сайтам предоставлять местную информацию за счет доступа к списку языков
|
|
New-ItemProperty -Path "HKCU:\Control Panel\International\User Profile" -Name HttpAcceptLanguageOptOut -PropertyType DWord -Value 1 -Force
|
|
# Turn on tip, trick, and suggestions as you use Windows
|
|
# Показывать советы, подсказки и рекомендации при использованию Windows
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-338389Enabled -PropertyType DWord -Value 1 -Force
|
|
# Do not show suggested content in the Settings
|
|
# Не показывать рекомендуемое содержание в "Параметрах"
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-338393Enabled -PropertyType DWord -Value 0 -Force
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-353694Enabled -PropertyType DWord -Value 0 -Force
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-353696Enabled -PropertyType DWord -Value 0 -Force
|
|
# Turn off automatic installing suggested apps
|
|
# Отключить автоматическую установку рекомендованных приложений
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SilentInstalledAppsEnabled -PropertyType DWord -Value 0 -Force
|
|
#endregion Privacy & Telemetry
|
|
|
|
#region UI & Personalization
|
|
# Show "This PC" on Desktop
|
|
# Отобразить "Этот компьютер" на рабочем столе
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel -Name "{20D04FE0-3AEA-1069-A2D8-08002B30309D}" -PropertyType DWord -Value 0 -Force
|
|
# Set File Explorer to open to This PC by default
|
|
# Открывать "Этот компьютер" в Проводнике
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name LaunchTo -PropertyType DWord -Value 1 -Force
|
|
# Show hidden files, folders, and drives
|
|
# Показывать скрытые файлы, папки и диски
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name Hidden -PropertyType DWord -Value 1 -Force
|
|
# Turn off check boxes to select items
|
|
# Отключить флажки для выбора элементов
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name AutoCheckSelect -PropertyType DWord -Value 0 -Force
|
|
# Show file name extensions
|
|
# Показывать расширения для зарегистрированных типов файлов
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name HideFileExt -PropertyType DWord -Value 0 -Force
|
|
# Show folder merge conflicts
|
|
# Не скрывать конфликт слияния папок
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name HideMergeConflicts -PropertyType DWord -Value 0 -Force
|
|
# Do not show all folders in the navigation pane
|
|
# Не отображать все папки в области навигации
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneShowAllFolders -PropertyType DWord -Value 0 -Force
|
|
# Do not show Cortana button on taskbar
|
|
# Не показывать кнопку Cortana на панели задач
|
|
IF (-not $RU)
|
|
{
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCortanaButton -PropertyType DWord -Value 0 -Force
|
|
}
|
|
# Do not show Task View button on taskbar
|
|
# Не показывать кнопку Просмотра задач
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowTaskViewButton -PropertyType DWord -Value 0 -Force
|
|
# Do not show People button on the taskbar
|
|
# Не показывать панель "Люди" на панели задач
|
|
if (-not (Test-Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People))
|
|
{
|
|
New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People -Force
|
|
}
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People -Name PeopleBand -PropertyType DWord -Value 0 -Force
|
|
# Show seconds on taskbar clock
|
|
# Отображать секунды в системных часах на панели задач
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowSecondsInSystemClock -PropertyType DWord -Value 1 -Force
|
|
# Turn on acrylic taskbar transparency
|
|
# Включить прозрачную панель задач
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name UseOLEDTaskbarTransparency -PropertyType DWord -Value 1 -Force
|
|
# Do not show when snapping a window, what can be attached next to it
|
|
# Не показывать при прикреплении окна, что можно прикрепить рядом с ним
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name SnapAssist -PropertyType DWord -Value 0 -Force
|
|
# Show more details in file transfer dialog
|
|
# Развернуть диалог переноса файлов
|
|
if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager))
|
|
{
|
|
New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force
|
|
}
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 1 -Force
|
|
# Show the Ribbon expanded in File Explorer
|
|
# Отображать ленту проводника в развернутом виде
|
|
if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Ribbon))
|
|
{
|
|
New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Ribbon -Force
|
|
}
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Ribbon -Name MinimizedStateTabletModeOff -PropertyType DWord -Value 0 -Force
|
|
# Turn on recycle bin files delete confirmation
|
|
# Запрашивать подтверждение на удаление файлов в корзину
|
|
if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer))
|
|
{
|
|
New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Force
|
|
}
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ConfirmFileDelete -PropertyType DWord -Value 1 -Force
|
|
# Hide 3D Objects folder from "This PC" and from Quick access
|
|
# Скрыть папку "Объемные объекты" из "Этот компьютер" и из панели быстрого доступа
|
|
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag"))
|
|
{
|
|
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag" -Force
|
|
}
|
|
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag" -Name ThisPCPolicy -PropertyType String -Value Hide -Force
|
|
# Do not show "Frequent folders" in Quick access
|
|
# Не показывать недавно используемые папки на панели быстрого доступа
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShowFrequent -PropertyType DWord -Value 0 -Force
|
|
# Do not show "Recent files" in Quick access
|
|
# Не показывать недавно использовавшиеся файлы на панели быстрого доступа
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShowRecent -PropertyType DWord -Value 0 -Force
|
|
# Turn off the "Previous Versions" tab from properties context menu
|
|
# Отключить вкладку "Предыдущие версии" в свойствах файлов и папок
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name NoPreviousVersionsPage -PropertyType DWord -Value 1 -Force
|
|
# Hide search box or search icon on taskbar
|
|
# Скрыть поле или значок поиска на панели задач
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Search -Name SearchboxTaskbarMode -PropertyType DWord -Value 0 -Force
|
|
# Do not show "Windows Ink Workspace" button in taskbar
|
|
# Не показывать кнопку Windows Ink Workspace на панели задач
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PenWorkspace -Name PenWorkspaceButtonDesiredVisibility -PropertyType DWord -Value 0 -Force
|
|
# Always show all icons in the notification area
|
|
# Всегда отображать все значки в области уведомлений
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name EnableAutoTray -PropertyType DWord -Value 0 -Force
|
|
# Unpin Microsoft Edge and Microsoft Store from taskbar
|
|
# Открепить Microsoft Edge и Microsoft Store от панели задач
|
|
$Signature = @{
|
|
Namespace = "WinAPI"
|
|
Name = "GetStr"
|
|
Language = "CSharp"
|
|
MemberDefinition = @"
|
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
|
|
public static extern IntPtr GetModuleHandle(string lpModuleName);
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
|
internal static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax);
|
|
public static string GetString(uint strId)
|
|
{
|
|
IntPtr intPtr = GetModuleHandle("shell32.dll");
|
|
StringBuilder sb = new StringBuilder(255);
|
|
LoadString(intPtr, strId, sb, sb.Capacity);
|
|
return sb.ToString();
|
|
}
|
|
"@
|
|
}
|
|
if (-not ("WinAPI.GetStr" -as [type]))
|
|
{
|
|
Add-Type @Signature -Using System.Text
|
|
}
|
|
$unpin = [WinAPI.GetStr]::GetString(5387)
|
|
$apps = (New-Object -ComObject Shell.Application).NameSpace("shell:::{4234d49b-0245-4df3-b780-3893943456e1}").Items()
|
|
$apps | Where-Object -FilterScript {$_.Path -like "Microsoft.MicrosoftEdge*"} | ForEach-Object -Process {$_.Verbs() | Where-Object -FilterScript {$_.Name -eq $unpin} | ForEach-Object -Process {$_.DoIt()}}
|
|
$apps | Where-Object -FilterScript {$_.Path -like "Microsoft.WindowsStore*"} | ForEach-Object -Process {$_.Verbs() | Where-Object -FilterScript {$_.Name -eq $unpin} | ForEach-Object -Process {$_.DoIt()}}
|
|
# Set the "Control Panel" view on "Large icons"
|
|
# Установить крупные значки в Панели управления
|
|
if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel))
|
|
{
|
|
New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force
|
|
}
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force
|
|
# Choose theme color for default Windows mode
|
|
# Выбрать режим Windows по умолчанию
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВыберите режим Windows по умолчанию, введя букву: "
|
|
Write-Host "[L]ight " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "для светлого режима или " -NoNewline
|
|
Write-Host "[D]ark " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "для тёмного."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nChoose theme color for default Windows mode by typing"
|
|
Write-Host "[L]ight " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "for the light mode or " -NoNewline
|
|
Write-Host "[D]ark " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "for the dark"
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
do
|
|
{
|
|
$theme = Read-Host -Prompt " "
|
|
if ([string]::IsNullOrEmpty($theme))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
switch ($theme)
|
|
{
|
|
"L"
|
|
{
|
|
# Show color only on taskbar
|
|
# Отображать цвет элементов только на панели задач
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name ColorPrevalence -PropertyType DWord -Value 0 -Force
|
|
# Light Theme Color for Default Windows Mode
|
|
# Режим Windows по умолчанию светлый
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name SystemUsesLightTheme -PropertyType DWord -Value 1 -Force
|
|
}
|
|
"D"
|
|
{
|
|
# Turn on the display of color on Start menu, taskbar, and action center
|
|
# Отображать цвет элементов в меню "Пуск", на панели задач и в центре уведомлений
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name ColorPrevalence -PropertyType DWord -Value 1 -Force
|
|
# Dark Theme Color for Default Windows Mode
|
|
# Режим Windows по умолчанию темный
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name SystemUsesLightTheme -PropertyType DWord -Value 0 -Force
|
|
}
|
|
Default
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nНеправильная буква." -ForegroundColor Yellow
|
|
Write-Host "Введите правильную букву: " -NoNewline
|
|
Write-Host "[L]ight " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "для светлого режима или " -NoNewline
|
|
Write-Host "[D]ark " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "для тёмного."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nInvalid letter." -ForegroundColor Yellow
|
|
Write-Host "Type the correct letter: " -NoNewline
|
|
Write-Host "[L]ight " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "for the light mode or " -NoNewline
|
|
Write-Host "[D]ark " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "for the dark."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
until ($theme -eq "L" -or $theme -eq "D")
|
|
# Choose theme color for default app mode
|
|
# Выбрать режим приложения по умолчанию
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВыберите режим приложения по умолчанию, введя букву: "
|
|
Write-Host "[L]ight " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "для светлого режима или " -NoNewline
|
|
Write-Host "[D]ark " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "для тёмного."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nChoose theme color for default app mode by typing"
|
|
Write-Host "[L]ight " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "for the light mode or " -NoNewline
|
|
Write-Host "[D]ark " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "for the dark"
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
do
|
|
{
|
|
$theme = Read-Host -Prompt " "
|
|
if ([string]::IsNullOrEmpty($theme))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
switch ($theme)
|
|
{
|
|
"L"
|
|
{
|
|
# Light theme color for default app mode
|
|
# Режим приложений по умолчанию светлый
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -PropertyType DWord -Value 1 -Force
|
|
}
|
|
"D"
|
|
{
|
|
# Dark theme color for default app mode
|
|
# Режим приложений по умолчанию темный
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -PropertyType DWord -Value 0 -Force
|
|
}
|
|
Default
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nНеправильная буква." -ForegroundColor Yellow
|
|
Write-Host "Введите правильную букву: " -NoNewline
|
|
Write-Host "[L]ight " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "для светлого режима или " -NoNewline
|
|
Write-Host "[D]ark " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "для тёмного."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nInvalid letter." -ForegroundColor Yellow
|
|
Write-Host "Type the correct letter: " -NoNewline
|
|
Write-Host "[L]ight " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "for the light mode or " -NoNewline
|
|
Write-Host "[D]ark " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "for the dark."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
until ($theme -eq "L" -or $theme -eq "D")
|
|
# Do not show "New App Installed" notification
|
|
# Не показывать уведомление "Установлено новое приложение"
|
|
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer))
|
|
{
|
|
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force
|
|
}
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -PropertyType DWord -Value 1 -Force
|
|
# Do not show user first sign-in animation
|
|
# Не показывать анимацию при первом входе в систему
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -PropertyType DWord -Value 0 -Force
|
|
# Turn off JPEG desktop wallpaper import quality reduction
|
|
# Отключить снижение качества фона рабочего стола в формате JPEG
|
|
New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name JPEGImportQuality -PropertyType DWord -Value 100 -Force
|
|
# Show Task manager details
|
|
# Раскрыть окно Диспетчера задач
|
|
$taskmgr = Get-Process -Name Taskmgr -ErrorAction Ignore
|
|
if ($taskmgr)
|
|
{
|
|
$taskmgr.CloseMainWindow()
|
|
}
|
|
Start-Process -FilePath Taskmgr.exe -WindowStyle Hidden -PassThru
|
|
do
|
|
{
|
|
Start-Sleep -Milliseconds 100
|
|
$preferences = Get-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\TaskManager -Name Preferences -ErrorAction Ignore
|
|
}
|
|
until ($preferences)
|
|
Stop-Process -Name Taskmgr
|
|
$preferences.Preferences[28] = 0
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\TaskManager -Name Preferences -PropertyType Binary -Value $preferences.Preferences -Force
|
|
# Remove Microsoft Edge shortcut from the Desktop
|
|
# Удалить ярлык Microsoft Edge с рабочего стола
|
|
$value = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name Desktop
|
|
Remove-Item -Path "$value\Microsoft Edge.lnk" -Force -ErrorAction Ignore
|
|
# Show accent color on the title bars and window borders
|
|
# Отображать цвет элементов в заголовках окон и границ окон
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\DWM -Name ColorPrevalence -PropertyType DWord -Value 1 -Force
|
|
# Turn off automatically hiding scroll bars
|
|
# Отключить автоматическое скрытие полос прокрутки в Windows
|
|
New-ItemProperty -Path "HKCU:\Control Panel\Accessibility" -Name DynamicScrollbars -PropertyType DWord -Value 0 -Force
|
|
# Show more Windows Update restart notifications about restarting
|
|
# Показывать уведомление, когда компьютеру требуется перезагрузка для завершения обновления
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -Name RestartNotificationsAllowed2 -PropertyType DWord -Value 1 -Force
|
|
# Turn off the "- Shortcut" name extension for new shortcuts
|
|
# Нe дoбaвлять "- яpлык" для coздaвaeмыx яpлыкoв
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name link -PropertyType Binary -Value ([byte[]](00, 00, 00, 00)) -Force
|
|
# Use the PrtScn button to open screen snipping
|
|
# Использовать кнопку PRINT SCREEN, чтобы запустить функцию создания фрагмента экрана
|
|
New-ItemProperty -Path "HKCU:\Control Panel\Keyboard" -Name PrintScreenKeyForSnippingEnabled -PropertyType DWord -Value 1 -Force
|
|
# Automatically adjust active hours for me based on daily usage
|
|
# Автоматически изменять период активности для этого устройства на основе действий
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -Name SmartActiveHoursState -PropertyType DWord -Value 1 -Force
|
|
#endregion UI & Personalization
|
|
|
|
#region OneDrive
|
|
# Uninstall OneDrive
|
|
# Удалить OneDrive
|
|
Stop-Process -Name OneDrive -Force -ErrorAction Ignore
|
|
Start-Process -FilePath "$env:SystemRoot\SysWOW64\OneDriveSetup.exe" -ArgumentList "/uninstall" -Wait
|
|
Stop-Process -Name explorer -Force
|
|
Remove-ItemProperty -Path HKCU:\Environment -Name OneDrive -Force -ErrorAction Ignore
|
|
Remove-Item -Path "$env:ProgramData\Microsoft OneDrive" -Recurse -Force -ErrorAction Ignore
|
|
Unregister-ScheduledTask -TaskName *OneDrive* -Confirm:$false
|
|
if ((Get-ChildItem -Path $env:USERPROFILE\OneDrive -ErrorAction Ignore | Measure-Object).Count -eq 0)
|
|
{
|
|
Remove-Item -Path $env:USERPROFILE\OneDrive -Recurse -Force -ErrorAction Ignore
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Error -Message "Папка $env:USERPROFILE\OneDrive не пуста. Удалите ее вручную" -ErrorAction SilentlyContinue
|
|
}
|
|
else
|
|
{
|
|
Write-Error -Message "$env:USERPROFILE\OneDrive folder is not empty. Delete it manually" -ErrorAction SilentlyContinue
|
|
}
|
|
}
|
|
Wait-Process -Name OneDriveSetup -ErrorAction Ignore
|
|
Remove-Item -Path $env:LOCALAPPDATA\Microsoft\OneDrive -Recurse -Force -ErrorAction Ignore
|
|
#endregion OneDrive
|
|
|
|
#region System
|
|
# Turn on Storage Sense
|
|
# Включить Память устройства
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force
|
|
# Run Storage Sense every month
|
|
# Запускать контроль памяти каждый месяц
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 2048 -PropertyType DWord -Value 30 -Force
|
|
# Delete temporary files that apps aren't using
|
|
# Удалять временные файлы, не используемые в приложениях
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 04 -PropertyType DWord -Value 1 -Force
|
|
# Delete files in recycle bin if they have been there for over 30 days
|
|
# Удалять файлы, которые находятся в корзине более 30 дней
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 256 -PropertyType DWord -Value 30 -Force
|
|
# Never delete files in "Downloads" folder
|
|
# Никогда не удалять файлы из папки "Загрузки"
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 512 -PropertyType DWord -Value 0 -Force
|
|
# Let Windows try to fix apps so they're not blurry
|
|
# Разрешить Windows исправлять размытость в приложениях
|
|
New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name EnablePerProcessSystemDPI -PropertyType DWord -Value 1 -Force
|
|
# Turn off hibernate
|
|
# Отключить гибридный спящий режим
|
|
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Power -Name HibernateEnabled -PropertyType DWord -Value 0 -Force
|
|
# Turn off location for this device
|
|
# Отключить местоположение для этого устройства
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\location -Name Value -PropertyType String -Value Deny -Force
|
|
# Change $env:TEMP environment variable path to $env:SystemDrive\Temp
|
|
# Изменить путь переменной среды для временных файлов на $env:SystemDrive\Temp
|
|
if (-not (Test-Path -Path $env:SystemDrive\Temp))
|
|
{
|
|
New-Item -Path $env:SystemDrive\Temp -ItemType Directory -Force
|
|
}
|
|
[Environment]::SetEnvironmentVariable("TMP", "$env:SystemDrive\Temp", "User")
|
|
New-ItemProperty -Path HKCU:\Environment -Name TMP -PropertyType ExpandString -Value %SystemDrive%\Temp -Force
|
|
[Environment]::SetEnvironmentVariable("TEMP", "$env:SystemDrive\Temp", "User")
|
|
New-ItemProperty -Path HKCU:\Environment -Name TEMP -PropertyType ExpandString -Value %SystemDrive%\Temp -Force
|
|
[Environment]::SetEnvironmentVariable("TMP", "$env:SystemDrive\Temp", "Machine")
|
|
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name TMP -PropertyType ExpandString -Value %SystemDrive%\Temp -Force
|
|
[Environment]::SetEnvironmentVariable("TEMP", "$env:SystemDrive\Temp", "Machine")
|
|
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name TEMP -PropertyType ExpandString -Value %SystemDrive%\Temp -Force
|
|
[Environment]::SetEnvironmentVariable("TMP", "$env:SystemDrive\Temp", "Process")
|
|
[Environment]::SetEnvironmentVariable("TEMP", "$env:SystemDrive\Temp", "Process")
|
|
Remove-Item $env:LOCALAPPDATA\Temp -Recurse -Force -ErrorAction Ignore
|
|
Restart-Service -Name Spooler -Force
|
|
Remove-Item -Path $env:SystemRoot\Temp -Recurse -Force -ErrorAction Ignore
|
|
# Turn on Win32 long paths
|
|
# Включить длинные пути Win32
|
|
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name LongPathsEnabled -PropertyType DWord -Value 1 -Force
|
|
# Group svchost.exe processes
|
|
# Группировать процессы svchost.exe
|
|
$ram = (Get-CimInstance -ClassName Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum).Sum / 1kb
|
|
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control -Name SvcHostSplitThresholdInKB -PropertyType DWord -Value $ram -Force
|
|
# Display the Stop error information on the BSoD
|
|
# Отображать Stop-ошибку при появлении BSoD
|
|
New-ItemProperty -Path HKLM:\System\CurrentControlSet\Control\CrashControl -Name DisplayParameters -PropertyType DWord -Value 1 -Force
|
|
# Do not preserve zone information
|
|
# Не хранить сведения о зоне происхождения вложенных файлов
|
|
if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Attachments))
|
|
{
|
|
New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Attachments -Force
|
|
}
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Attachments -Name SaveZoneInformation -PropertyType DWord -Value 1 -Force
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Attachments -Name SaveZoneInformation -PropertyType DWord -Value 1 -Force
|
|
# Turn off Admin Approval Mode for administrators
|
|
# Отключить использование режима одобрения администратором для встроенной учетной записи администратора
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name ConsentPromptBehaviorAdmin -PropertyType DWord -Value 0 -Force
|
|
# Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled
|
|
# Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 1 -Force
|
|
# Turn off Delivery Optimization
|
|
# Отключить оптимизацию доставки
|
|
Get-Service -Name DoSvc | Stop-Service -Force
|
|
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization))
|
|
{
|
|
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization -Force
|
|
}
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization -Name DODownloadMode -PropertyType DWord -Value 0 -Force
|
|
# Always wait for the network at computer startup and logon
|
|
# Всегда ждать сеть при запуске и входе в систему
|
|
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Winlogon"))
|
|
{
|
|
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Winlogon" -Force
|
|
}
|
|
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name SyncForegroundPolicy -PropertyType DWord -Value 1 -Force
|
|
# Do not let Windows manage default printer
|
|
# Не разрешать Windows управлять принтером, используемым по умолчанию
|
|
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows" -Name LegacyDefaultPrinterMode -PropertyType DWord -Value 1 -Force
|
|
# Turn off Windows features
|
|
# Отключить компоненты
|
|
$features = @(
|
|
# Windows Fax and Scan
|
|
# Факсы и сканирование
|
|
"FaxServicesClientPackage"
|
|
# Legacy Components
|
|
# Компоненты прежних версий
|
|
"LegacyComponents"
|
|
# Media Features
|
|
# Компоненты работы с мультимедиа
|
|
"MediaPlayback"
|
|
# PowerShell 2.0
|
|
"MicrosoftWindowsPowerShellV2"
|
|
"MicrosoftWindowsPowershellV2Root"
|
|
# Microsoft XPS Document Writer
|
|
# Средство записи XPS-документов (Microsoft)
|
|
"Printing-XPSServices-Features"
|
|
# Microsoft Print to PDF
|
|
# Печать в PDF (Майкрософт)
|
|
"Printing-PrintToPDFServices-Features"
|
|
# Work Folders Client
|
|
# Клиент рабочих папок
|
|
"WorkFolders-Client"
|
|
)
|
|
Disable-WindowsOptionalFeature -Online -FeatureName $features -NoRestart
|
|
# Remove Windows capabilities
|
|
# Удалить компоненты
|
|
$IncludedApps = @(
|
|
# Microsoft Quick Assist
|
|
# Быстрая поддержка (Майкрософт)
|
|
"App.Support.QuickAssist*"
|
|
# Windows Hello Face
|
|
# Распознавание лиц Windows Hello
|
|
"Hello.Face*"
|
|
# Windows Media Player
|
|
# Проигрыватель Windows Media
|
|
"Media.WindowsMediaPlayer*"
|
|
)
|
|
$OFS = "|"
|
|
Get-WindowsCapability -Online | Where-Object -FilterScript {$_.Name -cmatch $IncludedApps} | Remove-WindowsCapability -Online
|
|
$OFS = " "
|
|
# Turn on updates for other Microsoft products
|
|
# Включить автоматическое обновление для других продуктов Microsoft
|
|
(New-Object -ComObject Microsoft.Update.ServiceManager).AddService2("7971f918-a847-4430-9279-4a52d1efe18d", 7, "")
|
|
# Remove Shadow copies (restoration points)
|
|
# Удалить теневые копии (точки восстановения)
|
|
Get-CimInstance -ClassName Win32_ShadowCopy | Remove-CimInstance
|
|
# Turn off background apps, except the followings...
|
|
# Запретить приложениям работать в фоновом режиме, кроме следующих...
|
|
Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications | Where-Object -FilterScript {$_.PSChildName -cnotmatch $ExcludedApps} | ForEach-Object -Process {
|
|
Remove-ItemProperty -Path $_.PsPath -Name * -Force
|
|
}
|
|
$ExcludedApps = @(
|
|
# Lock App
|
|
"Microsoft.LockApp*"
|
|
# Content Delivery Manager
|
|
"Microsoft.Windows.ContentDeliveryManager*"
|
|
# Cortana
|
|
"Microsoft.Windows.Cortana*"
|
|
# Windows Security
|
|
# Безопасность Windows
|
|
"Microsoft.Windows.SecHealthUI*"
|
|
# ShellExperienceHost
|
|
"Microsoft.Windows.ShellExperienceHost*"
|
|
# StartMenuExperienceHost
|
|
"Microsoft.Windows.StartMenuExperienceHost*"
|
|
# Microsoft Store
|
|
"Microsoft.WindowsStore*"
|
|
)
|
|
$OFS = "|"
|
|
Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications | Where-Object -FilterScript {$_.PSChildName -cnotmatch $ExcludedApps} | ForEach-Object -Process {
|
|
New-ItemProperty -Path $_.PsPath -Name Disabled -PropertyType DWord -Value 1 -Force
|
|
New-ItemProperty -Path $_.PsPath -Name DisabledByUser -PropertyType DWord -Value 1 -Force
|
|
}
|
|
$OFS = " "
|
|
# Open "Background apps" page
|
|
# Открыть раздел "Фоновые приложения"
|
|
Start-Process -FilePath ms-settings:privacy-backgroundapps
|
|
# Set power management scheme for desktop and laptop
|
|
# Установить схему управления питания для стационарного ПК и ноутбука
|
|
if ((Get-CimInstance -ClassName Win32_ComputerSystem).PCSystemType -eq 1)
|
|
{
|
|
# High performance for desktop
|
|
# Высокая производительность для стационарного ПК
|
|
powercfg /setactive SCHEME_MIN
|
|
}
|
|
if ((Get-CimInstance -ClassName Win32_ComputerSystem).PCSystemType -eq 2)
|
|
{
|
|
# Balanced for laptop
|
|
# Сбалансированная для ноутбука
|
|
powercfg /setactive SCHEME_BALANCED
|
|
}
|
|
# Turn on latest installed .NET runtime for all apps
|
|
# Использовать последнюю установленную версию .NET для всех приложений
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\.NETFramework -Name OnlyUseLatestCLR -PropertyType DWord -Value 1 -Force
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework -Name OnlyUseLatestCLR -PropertyType DWord -Value 1 -Force
|
|
# Do not allow the computer to turn off the network adapters to save power
|
|
# Запретить отключение сетевых адаптеров для экономии энергии
|
|
if ((Get-CimInstance -ClassName Win32_ComputerSystem).PCSystemType -eq 1)
|
|
{
|
|
$adapters = Get-NetAdapter -Physical | Get-NetAdapterPowerManagement | Where-Object -FilterScript {$_.AllowComputerToTurnOffDevice -ne "Unsupported"}
|
|
foreach ($adapter in $adapters)
|
|
{
|
|
$adapter.AllowComputerToTurnOffDevice = "Disabled"
|
|
$adapter | Set-NetAdapterPowerManagement
|
|
}
|
|
}
|
|
# Set the default input method to the English language
|
|
# Установить метод ввода по умолчанию на английский язык
|
|
Set-WinDefaultInputMethodOverride "0409:00000409"
|
|
# Turn on Windows Sandbox
|
|
# Включить Windows Sandbox
|
|
if (Get-WindowsEdition -Online | Where-Object -FilterScript {$_.Edition -eq "Professional" -or $_.Edition -eq "Enterprise"})
|
|
{
|
|
if ((Get-CimInstance -ClassName CIM_Processor).VirtualizationFirmwareEnabled -eq $true)
|
|
{
|
|
Enable-WindowsOptionalFeature –FeatureName Containers-DisposableClientVM -All -Online -NoRestart
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
if ((Get-CimInstance –ClassName CIM_ComputerSystem).HypervisorPresent -eq $true)
|
|
{
|
|
Enable-WindowsOptionalFeature –FeatureName Containers-DisposableClientVM -All -Online -NoRestart
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
Write-Error "Enable Virtualization in BIOS"
|
|
}
|
|
}
|
|
}
|
|
# Set location of the "Desktop", "Documents", "Downloads", "Music", "Pictures", and "Videos"
|
|
# Переопределить расположение папок "Рабочий стол", "Документы", "Загрузки", "Музыка", "Изображения", "Видео"
|
|
Function KnownFolderPath
|
|
{
|
|
Param (
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateSet("Desktop", "Documents", "Downloads", "Music", "Pictures", "Videos")]
|
|
[string]$KnownFolder,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Path
|
|
)
|
|
$KnownFolders = @{
|
|
"Desktop" = @("B4BFCC3A-DB2C-424C-B029-7FE99A87C641");
|
|
"Documents" = @("FDD39AD0-238F-46AF-ADB4-6C85480369C7", "f42ee2d3-909f-4907-8871-4c22fc0bf756");
|
|
"Downloads" = @("374DE290-123F-4565-9164-39C4925E467B", "7d83ee9b-2244-4e70-b1f5-5393042af1e4");
|
|
"Music" = @("4BD8D571-6D19-48D3-BE97-422220080E43", "a0c69a99-21c8-4671-8703-7934162fcf1d");
|
|
"Pictures" = @("33E28130-4E1E-4676-835A-98395C3BC3BB", "0ddd015d-b06c-45d5-8c4c-f59713854639");
|
|
"Videos" = @("18989B1D-99B5-455B-841C-AB7C74E4DDFC", "35286a68-3c57-41a1-bbb1-0eae73d76c95");
|
|
}
|
|
$Signature = @{
|
|
Namespace = "WinAPI"
|
|
Name = "KnownFolders"
|
|
Language = "CSharp"
|
|
MemberDefinition = @"
|
|
[DllImport("shell32.dll")]
|
|
public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, IntPtr token, [MarshalAs(UnmanagedType.LPWStr)] string path);
|
|
"@
|
|
}
|
|
if (-not ("WinAPI.KnownFolders" -as [type]))
|
|
{
|
|
Add-Type @Signature
|
|
}
|
|
foreach ($guid in $KnownFolders[$KnownFolder])
|
|
{
|
|
[WinAPI.KnownFolders]::SHSetKnownFolderPath([ref]$guid, 0, 0, $Path)
|
|
}
|
|
(Get-Item -Path $Path -Force).Attributes = "ReadOnly"
|
|
}
|
|
$DesktopINI = @{
|
|
"Desktop" = "",
|
|
"[.ShellClassInfo]",
|
|
"LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21769",
|
|
"IconResource=%SystemRoot%\system32\imageres.dll,-183"
|
|
"Documents" = "",
|
|
"[.ShellClassInfo]",
|
|
"LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21770",
|
|
"IconResource=%SystemRoot%\system32\imageres.dll,-112",
|
|
"IconFile=%SystemRoot%\system32\shell32.dll",
|
|
"IconIndex=-235"
|
|
"Downloads" = "",
|
|
"[.ShellClassInfo]","LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21798",
|
|
"IconResource=%SystemRoot%\system32\imageres.dll,-184"
|
|
"Music" = "",
|
|
"[.ShellClassInfo]","LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21790",
|
|
"InfoTip=@%SystemRoot%\system32\shell32.dll,-12689",
|
|
"IconResource=%SystemRoot%\system32\imageres.dll,-108",
|
|
"IconFile=%SystemRoot%\system32\shell32.dll","IconIndex=-237"
|
|
"Pictures" = "",
|
|
"[.ShellClassInfo]",
|
|
"LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21779",
|
|
"InfoTip=@%SystemRoot%\system32\shell32.dll,-12688",
|
|
"IconResource=%SystemRoot%\system32\imageres.dll,-113",
|
|
"IconFile=%SystemRoot%\system32\shell32.dll",
|
|
"IconIndex=-236"
|
|
"Videos" = "",
|
|
"[.ShellClassInfo]",
|
|
"LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21791",
|
|
"InfoTip=@%SystemRoot%\system32\shell32.dll,-12690",
|
|
"IconResource=%SystemRoot%\system32\imageres.dll,-189",
|
|
"IconFile=%SystemRoot%\system32\shell32.dll","IconIndex=-238"
|
|
}
|
|
$drives = (Get-Disk | Where-Object -FilterScript {$_.BusType -ne "USB"} | Get-Partition | Get-Volume).DriveLetter
|
|
if ($RU)
|
|
{
|
|
$OFS = ", "
|
|
Write-Host "`nВаши диски: " -NoNewline
|
|
Write-Host "$($drives | Sort-Object -Unique)" -ForegroundColor Yellow
|
|
$OFS = " "
|
|
}
|
|
else
|
|
{
|
|
$OFS = ", "
|
|
Write-Host "`nYour drives: " -NoNewline
|
|
Write-Host "$($drives | Sort-Object -Unique)" -ForegroundColor Yellow
|
|
$OFS = " "
|
|
}
|
|
# Desktop
|
|
# Рабочий стол
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВведите букву диска, в корне которого будет создана папка для " -NoNewline
|
|
Write-Host "`"Рабочий стол`"" -ForegroundColor Yellow
|
|
Write-Host "Файлы не будут перенесены: сделайте это вручную"
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nType the drive letter in the root of which the " -NoNewline
|
|
Write-Host "`"Desktop`" " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "folder will be created."
|
|
Write-Host "Files will not be moved. Do it manually"
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
do
|
|
{
|
|
$drive = Read-Host -Prompt " "
|
|
if ($drives -eq $drive)
|
|
{
|
|
$drive = $(${drive}.ToUpper())
|
|
$DesktopFolder = "${drive}:\Desktop"
|
|
$DesktopReg = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name Desktop
|
|
if ($DesktopReg -ne $DesktopFolder)
|
|
{
|
|
if (-not (Test-Path -Path $DesktopFolder))
|
|
{
|
|
New-Item -Path $DesktopFolder -ItemType Directory -Force
|
|
}
|
|
KnownFolderPath -KnownFolder Desktop -Path $DesktopFolder
|
|
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{754AC886-DF64-4CBA-86B5-F7FBF4FBCEF5}" -PropertyType ExpandString -Value $DesktopFolder -Force
|
|
Set-Content -Path "$DesktopFolder\desktop.ini" -Value $DesktopINI["Desktop"] -Encoding Unicode -Force
|
|
(Get-Item -Path "$DesktopFolder\desktop.ini" -Force).Attributes = "Hidden", "System", "Archive"
|
|
(Get-Item -Path "$DesktopFolder\desktop.ini" -Force).Refresh()
|
|
}
|
|
# Save screenshots by pressing Win+PrtScr to the Desktop
|
|
# Сохранить скриншот по Win+PrtScr на рабочем столе
|
|
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{b7bede81-df94-4682-a7d8-57a52620b86f}" -Name RelativePath -PropertyType String -Value $DesktopFolder -Force
|
|
}
|
|
elseif ([string]::IsNullOrEmpty($drive))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nДиск $(${drive}.ToUpper()): не существует. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Введите букву диска."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "The disk $(${drive}.ToUpper()): does not exist. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Type the drive letter."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
until ($drives -eq $drive)
|
|
# Documents
|
|
# Документы
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВведите букву диска, в корне которого будет создана папка для " -NoNewline
|
|
Write-Host "`"Документы`"" -ForegroundColor Yellow
|
|
Write-Host "Файлы не будут перенесены: сделайте это вручную"
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nType the drive letter in the root of which the " -NoNewline
|
|
Write-Host "`"Documents`" " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "folder will be created."
|
|
Write-Host "Files will not be moved. Do it manually"
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
do
|
|
{
|
|
$drive = Read-Host -Prompt " "
|
|
if ($drives -eq $drive)
|
|
{
|
|
$drive = $(${drive}.ToUpper())
|
|
$DocumentsFolder = "${drive}:\Documents"
|
|
$DocumentsReg = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name Personal
|
|
if ($DocumentsReg -ne $DocumentsFolder)
|
|
{
|
|
if (-not (Test-Path -Path $DocumentsFolder))
|
|
{
|
|
New-Item -Path $DocumentsFolder -ItemType Directory -Force
|
|
}
|
|
KnownFolderPath -KnownFolder Documents -Path $DocumentsFolder
|
|
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{F42EE2D3-909F-4907-8871-4C22FC0BF756}" -PropertyType ExpandString -Value $DocumentsFolder -Force
|
|
Set-Content -Path "$DocumentsFolder\desktop.ini" -Value $DesktopINI["Documents"] -Encoding Unicode -Force
|
|
(Get-Item -Path "$DocumentsFolder\desktop.ini" -Force).Attributes = "Hidden", "System", "Archive"
|
|
(Get-Item -Path "$DocumentsFolder\desktop.ini" -Force).Refresh()
|
|
}
|
|
}
|
|
elseif ([string]::IsNullOrEmpty($drive))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nДиск $(${drive}.ToUpper()): не существует. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Введите букву диска."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "The disk $(${drive}.ToUpper()): does not exist. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Type the drive letter."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
until ($drives -eq $drive)
|
|
# Downloads
|
|
# Загрузки
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВведите букву диска, в корне которого будет создана папка для " -NoNewline
|
|
Write-Host "`"Загрузки`"" -ForegroundColor Yellow
|
|
Write-Host "Файлы не будут перенесены: сделайте это вручную"
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nType the drive letter in the root of which the " -NoNewline
|
|
Write-Host "`"Downloads`" " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "folder will be created."
|
|
Write-Host "Files will not be moved. Do it manually"
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
do
|
|
{
|
|
$drive = Read-Host -Prompt " "
|
|
if ($drives -eq $drive)
|
|
{
|
|
$drive = $(${drive}.ToUpper())
|
|
$DownloadsFolder = "${drive}:\Downloads"
|
|
$DownloadsReg = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}"
|
|
if ($DownloadsReg -ne $DownloadsFolder)
|
|
{
|
|
if (-not (Test-Path -Path $DownloadsFolder))
|
|
{
|
|
New-Item -Path $DownloadsFolder -ItemType Directory -Force
|
|
}
|
|
KnownFolderPath -KnownFolder Downloads -Path $DownloadsFolder
|
|
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{7D83EE9B-2244-4E70-B1F5-5393042AF1E4}" -PropertyType ExpandString -Value $DownloadsFolder -Force
|
|
Set-Content -Path "$DownloadsFolder\desktop.ini" -Value $DesktopINI["Downloads"] -Encoding Unicode -Force
|
|
(Get-Item -Path "$DownloadsFolder\desktop.ini" -Force).Attributes = "Hidden", "System", "Archive"
|
|
(Get-Item -Path "$DownloadsFolder\desktop.ini" -Force).Refresh()
|
|
# Microsoft Edge downloads folder
|
|
# Папка загрузок Microsoft Edge
|
|
$edge = (Get-AppxPackage -Name "Microsoft.MicrosoftEdge").PackageFamilyName
|
|
New-ItemProperty -Path "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\$edge\MicrosoftEdge\Main" -Name "Default Download Directory" -PropertyType String -Value $DownloadsFolder -Force
|
|
}
|
|
}
|
|
elseif ([string]::IsNullOrEmpty($drive))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nДиск $(${drive}.ToUpper()): не существует. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Введите букву диска."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "The disk $(${drive}.ToUpper()): does not exist. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Type the drive letter."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
until ($drives -eq $drive)
|
|
# Music
|
|
# Музыка
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВведите букву диска, в корне которого будет создана папка для " -NoNewline
|
|
Write-Host "`"Музыка`"" -ForegroundColor Yellow
|
|
Write-Host "Файлы не будут перенесены: сделайте это вручную"
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nType the drive letter in the root of which the " -NoNewline
|
|
Write-Host "`"Music`" " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "folder will be created."
|
|
Write-Host "Files will not be moved. Do it manually"
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
do
|
|
{
|
|
$drive = Read-Host -Prompt " "
|
|
if ($drives -eq $drive)
|
|
{
|
|
$drive = $(${drive}.ToUpper())
|
|
$MusicFolder = "${drive}:\Music"
|
|
$MusicReg = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "My Music"
|
|
if ($MusicReg -ne $MusicFolder)
|
|
{
|
|
if (-not (Test-Path -Path $MusicFolder))
|
|
{
|
|
New-Item -Path $MusicFolder -ItemType Directory -Force
|
|
}
|
|
KnownFolderPath -KnownFolder Music -Path $MusicFolder
|
|
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{A0C69A99-21C8-4671-8703-7934162FCF1D}" -PropertyType ExpandString -Value $MusicFolder -Force
|
|
Set-Content -Path "$MusicFolder\desktop.ini" -Value $DesktopINI["Music"] -Encoding Unicode -Force
|
|
(Get-Item -Path "$MusicFolder\desktop.ini" -Force).Attributes = "Hidden", "System", "Archive"
|
|
(Get-Item -Path "$MusicFolder\desktop.ini" -Force).Refresh()
|
|
}
|
|
}
|
|
elseif ([string]::IsNullOrEmpty($drive))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nДиск $(${drive}.ToUpper()): не существует. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Введите букву диска."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "The disk $(${drive}.ToUpper()): does not exist. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Type the drive letter."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
until ($drives -eq $drive)
|
|
# Pictures
|
|
# Изображения
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВведите букву диска, в корне которого будет создана папка для " -NoNewline
|
|
Write-Host "`"Изображения`"" -ForegroundColor Yellow
|
|
Write-Host "Файлы не будут перенесены: сделайте это вручную"
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nType the drive letter in the root of which the " -NoNewline
|
|
Write-Host "`"Pictures`" " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "folder will be created."
|
|
Write-Host "Files will not be moved. Do it manually"
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
do
|
|
{
|
|
$drive = Read-Host -Prompt " "
|
|
if ($drives -eq $drive)
|
|
{
|
|
$drive = $(${drive}.ToUpper())
|
|
$PicturesFolder = "${drive}:\Pictures"
|
|
$PicturesReg = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "My Pictures"
|
|
if ($PicturesReg -ne $PicturesFolder)
|
|
{
|
|
if (-not (Test-Path -Path $PicturesFolder))
|
|
{
|
|
New-Item -Path $PicturesFolder -ItemType Directory -Force
|
|
}
|
|
KnownFolderPath -KnownFolder Pictures -Path $PicturesFolder
|
|
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{0DDD015D-B06C-45D5-8C4C-F59713854639}" -PropertyType ExpandString -Value $PicturesFolder -Force
|
|
Set-Content -Path "$PicturesFolder\desktop.ini" -Value $DesktopINI["Pictures"] -Encoding Unicode -Force
|
|
(Get-Item -Path "$PicturesFolder\desktop.ini" -Force).Attributes = "Hidden", "System", "Archive"
|
|
(Get-Item -Path "$PicturesFolder\desktop.ini" -Force).Refresh()
|
|
}
|
|
}
|
|
elseif ([string]::IsNullOrEmpty($drive))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nДиск $(${drive}.ToUpper()): не существует. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Введите букву диска."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nThe disk $(${drive}.ToUpper()): does not exist. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Type the drive letter."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
until ($drives -eq $drive)
|
|
# Videos
|
|
# Видео
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВведите букву диска, в корне которого будет создана папка для " -NoNewline
|
|
Write-Host "`"Видео`"" -ForegroundColor Yellow
|
|
Write-Host "Файлы не будут перенесены: сделайте это вручную"
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nType the drive letter in the root of which the " -NoNewline
|
|
Write-Host "`"Videos`" " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "folder will be created."
|
|
Write-Host "Files will not be moved. Do it manually"
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
do
|
|
{
|
|
$drive = Read-Host -Prompt " "
|
|
if ($drives -eq $drive)
|
|
{
|
|
$drive = $(${drive}.ToUpper())
|
|
$VideosFolder = "${drive}:\Videos"
|
|
$VideosReg = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "My Video"
|
|
if ($VideosReg -ne $VideosFolder)
|
|
{
|
|
if (-not (Test-Path -Path $VideosFolder))
|
|
{
|
|
New-Item -Path $VideosFolder -ItemType Directory -Force
|
|
}
|
|
KnownFolderPath -KnownFolder Videos -Path $VideosFolder
|
|
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{35286A68-3C57-41A1-BBB1-0EAE73D76C95}" -PropertyType ExpandString -Value $VideosFolder -Force
|
|
Set-Content -Path "$VideosFolder\desktop.ini" -Value $DesktopINI["Videos"] -Encoding Unicode -Force
|
|
(Get-Item -Path "$VideosFolder\desktop.ini" -Force).Attributes = "Hidden", "System", "Archive"
|
|
(Get-Item -Path "$VideosFolder\desktop.ini" -Force).Refresh()
|
|
}
|
|
}
|
|
elseif ([string]::IsNullOrEmpty($drive))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nДиск $(${drive}.ToUpper()): не существует. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Введите букву диска."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nThe disk $(${drive}.ToUpper()): does not exist. " -ForegroundColor Yellow -NoNewline
|
|
Write-Host "Type the drive letter."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
until ($drives -eq $drive)
|
|
# Turn on automatic recommended troubleshooting and tell when problems get fixed
|
|
# Автоматически запускать средства устранения неполадок, а затем сообщать об устранении проблем
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 3 -Force
|
|
if (-not (Test-Path -Path HKLM:\SOFTWARE\Microsoft\WindowsMitigation))
|
|
{
|
|
New-Item -Path HKLM:\SOFTWARE\Microsoft\WindowsMitigation -Force
|
|
}
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsMitigation -Name UserPreference -PropertyType DWord -Value 3 -Force
|
|
# Set "High performance" in graphics performance preference for apps
|
|
# Установить параметры производительности графики для отдельных приложений на "Высокая производительность"
|
|
if ((Get-CimInstance -ClassName Win32_ComputerSystem).PCSystemType -ne 2 -and (Get-CimInstance -ClassName Win32_VideoController | Where-Object -FilterScript {$_.AdapterDACType -ne "Internal" -and $null -ne $_.AdapterDACType}))
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВведите полные пути до .exe файлов, " -NoNewline
|
|
Write-Host "для которого следует установить"
|
|
Write-Host "параметры производительности графики на `"Высокая производительность`"."
|
|
Write-Host "Пути должны быть разделены запятыми и взяты в кавычки." -ForegroundColor Yellow
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nType the full paths to .exe files for which to set"
|
|
Write-Host "graphics performance preference to `"High performance GPU`"."
|
|
Write-Host "The paths must be separated by commas and taken in quotes." -ForegroundColor Yellow
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
if (Test-Path -Path "${env:ProgramFiles(x86)}\Steam")
|
|
{
|
|
Start-Process -FilePath "${env:ProgramFiles(x86)}\Steam\steamapps\common"
|
|
}
|
|
function GpuPreference
|
|
{
|
|
[CmdletBinding()]
|
|
Param
|
|
(
|
|
[Parameter(Mandatory = $True)]
|
|
[string[]]$apps
|
|
)
|
|
$apps = $apps.Replace("`"", "").Split(",").Trim()
|
|
foreach ($app in $apps)
|
|
{
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences -Name $app -PropertyType String -Value "GpuPreference=2;" -Force
|
|
}
|
|
}
|
|
do
|
|
{
|
|
$apps = Read-Host -Prompt " "
|
|
if ($apps -match ".exe" -and $apps -match "`"")
|
|
{
|
|
GpuPreference $apps
|
|
}
|
|
elseif ([string]::IsNullOrEmpty($apps))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nПути не взяты в кавычки или не содержат ссылки на .exe файлы." -ForegroundColor Yellow
|
|
Write-Host "Введите полные пути до .exe файлов, взяв в кавычки и разделив запятыми."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nThe paths hasn't been taken in quotes or do not contain links to .exe files" -ForegroundColor Yellow
|
|
Write-Host "Type the full paths to .exe files by quoting and separating by commas."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
until ($apps -match ".exe" -and $apps -match "`"")
|
|
}
|
|
# Launch folder in a separate process
|
|
# Запускать окна с папками в отдельном процессе
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name SeparateProcess -PropertyType DWord -Value 1 -Force
|
|
# Turn off and delete reserved storage after the next update installation
|
|
# Отключить и удалить зарезервированное хранилище после следующей установки обновлений
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager -Name BaseHardReserveSize -PropertyType QWord -Value 0 -Force
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager -Name BaseSoftReserveSize -PropertyType QWord -Value 0 -Force
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager -Name HardReserveAdjustment -PropertyType QWord -Value 0 -Force
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager -Name MinDiskSize -PropertyType QWord -Value 0 -Force
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ReserveManager -Name ShippedWithReserves -PropertyType DWord -Value 0 -Force
|
|
# Turn on automatic backup the system registry to the $env:SystemRoot\System32\config\RegBack folder
|
|
# Включить автоматическое создание копии реестра в папку $env:SystemRoot\System32\config\RegBack
|
|
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager" -Name EnablePeriodicBackup -PropertyType DWord -Value 1 -Force
|
|
# Turn off F1 Help key
|
|
# Отключить справку по нажатию F1
|
|
if (-not (Test-Path -Path "HKCU:\Software\Classes\Typelib\{8cec5860-07a1-11d9-b15e-000d56bfe6ee}\1.0\0\win64"))
|
|
{
|
|
New-Item -Path "HKCU:\Software\Classes\Typelib\{8cec5860-07a1-11d9-b15e-000d56bfe6ee}\1.0\0\win64" -Force
|
|
}
|
|
New-ItemProperty -Path "HKCU:\Software\Classes\Typelib\{8cec5860-07a1-11d9-b15e-000d56bfe6ee}\1.0\0\win64" -Name "(default)" -PropertyType String -Value "" -Force
|
|
# Turn on Num Lock at startup
|
|
# Включить Num Lock при загрузке
|
|
New-ItemProperty -Path "Registry::HKEY_USERS\.DEFAULT\Control Panel\Keyboard" -Name InitialKeyboardIndicators -PropertyType String -Value 2147483650 -Force
|
|
# Turn off sticky Shift key after pressing 5 times
|
|
# Отключить залипание клавиши Shift после 5 нажатий
|
|
New-ItemProperty -Path "HKCU:\Control Panel\Accessibility\StickyKeys" -Name Flags -PropertyType String -Value 506 -Force
|
|
# Turn off AutoPlay for all media and devices
|
|
# Отключить автозапуск для всех носителей и устройств
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers -Name DisableAutoplay -PropertyType DWord -Value 1 -Force
|
|
# Turn off thumbnail cache removal
|
|
# Отключить удаление кэша миниатюр
|
|
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache" -Name Autorun -PropertyType DWord -Value 0 -Force
|
|
New-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache" -Name Autorun -PropertyType DWord -Value 0 -Force
|
|
# Turn on network discovery and file and printers sharing
|
|
# Включить сетевое обнаружение и общий доступ к файлам и принтерам
|
|
if ((Get-NetConnectionProfile).NetworkCategory -ne "DomainAuthenticated")
|
|
{
|
|
Get-NetFirewallRule -Group "@FirewallAPI.dll,-32752", "@FirewallAPI.dll,-28502" | Set-NetFirewallRule -Profile Private -Enabled True
|
|
Set-NetConnectionProfile -NetworkCategory Private
|
|
}
|
|
#endregion System
|
|
|
|
#region Start menu
|
|
# Do not show recently added apps on Start menu
|
|
# Не показывать недавно добавленные приложения в меню "Пуск"
|
|
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer))
|
|
{
|
|
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force
|
|
}
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -PropertyType DWord -Value 1 -Force
|
|
# Open shortcut to the Command Prompt from Start menu as Administrator
|
|
# Запускать ярлык к командной строке в меню "Пуск" от имени Администратора
|
|
[byte[]]$bytes = Get-Content -Path "$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\Command Prompt.lnk" -Encoding Byte -Raw
|
|
$bytes[0x15] = $bytes[0x15] -bor 0x20
|
|
Set-Content -Path "$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\Command Prompt.lnk" -Value $bytes -Encoding Byte -Force
|
|
# Show "Explorer" and "Settings" folders on Start menu
|
|
# Отобразить папки "Проводник" и "Параметры" в меню "Пуск"
|
|
$items = @("File Explorer", "Settings")
|
|
$startmenu = Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\*windows.data.unifiedtile.startglobalproperties\Current"
|
|
$data = $startmenu.Data[0..19] -join ","
|
|
$data += ",203,50,10,$($items.Length)"
|
|
# Explorer
|
|
# Проводник
|
|
$data += ",5,188,201,168,164,1,36,140,172,3,68,137,133,1,102,160,129,186,203,189,215,168,164,130,1,0"
|
|
# Settings
|
|
# Параметры
|
|
$data += ",5,134,145,204,147,5,36,170,163,1,68,195,132,1,102,159,247,157,177,135,203,209,172,212,1,0"
|
|
$data += ",194,60,1,194,70,1,197,90,1,0"
|
|
New-ItemProperty -Path $startmenu.PSPath -Name Data -PropertyType Binary -Value $data.Split(",") -Force
|
|
# Unpin all Start menu tiles
|
|
# Открепить все ярлыки от начального экрана
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nЧтобы открепить все ярлыки от начального экрана, введите букву: " -NoNewline
|
|
Write-Host "[Y]es" -ForegroundColor Yellow -NoNewline
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nTo unpin all Start menu tiles type: " -NoNewline
|
|
Write-Host "[Y]es" -ForegroundColor Yellow -NoNewline
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
do
|
|
{
|
|
$Unpin = Read-Host -Prompt " "
|
|
if ([string]::IsNullOrEmpty($Unpin))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
switch ($Unpin)
|
|
{
|
|
"Y"
|
|
{
|
|
$TileCollection = Get-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\*start.tilegrid`$windows.data.curatedtilecollection.tilecollection\Current
|
|
$Value = $TileCollection.Data[0..25] + ([byte[]](202,50,0,226,44,1,1,0,0))
|
|
New-ItemProperty -Path $TileCollection.PSPath -Name Data -PropertyType Binary -Value $Value -Force
|
|
}
|
|
Default
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nНеправильная буква." -ForegroundColor Yellow
|
|
Write-Host "Введите правильную букву: " -NoNewline
|
|
Write-Host "[Y]es" -ForegroundColor Yellow -NoNewline
|
|
Write-Host ", чтобы открепить все ярлыки от начального экрана" -NoNewline
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nInvalid letter." -ForegroundColor Yellow
|
|
Write-Host "Type the correct letter: " -NoNewline
|
|
Write-Host "[Y]es" -ForegroundColor Yellow -NoNewline
|
|
Write-Host " to unpin all Start menu tiles" -NoNewline
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
until ($Unpin -eq "Y")
|
|
# Download syspin.exe to the "Downloads" folder
|
|
# Скачать syspin.exe в папку "Загрузки"
|
|
# http://www.technosys.net/products/utils/pintotaskbar
|
|
# Hash (SHA256): 6967E7A3C2251812DD6B3FA0265FB7B61AADC568F562A98C50C345908C6E827
|
|
$OutFile = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}"
|
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
|
$HT = @{
|
|
Uri = "https://github.com/farag2/Windows-10-Setup-Script/raw/master/Start%20menu%20layout/syspin.exe"
|
|
OutFile = "$OutFile\syspin.exe"
|
|
Verbose = [switch]::Present
|
|
}
|
|
Invoke-WebRequest @HT
|
|
# Закрепить на начальном экране ярлыки
|
|
# Pin to Start the shortcuts
|
|
Add-Type -AssemblyName System.Windows.Forms
|
|
$OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog
|
|
# Initial directory "Downloads"
|
|
# Начальная папка "Загрузки"
|
|
$DownloadsFolder = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}"
|
|
$OpenFileDialog.InitialDirectory = $DownloadsFolder
|
|
if ($RU)
|
|
{
|
|
$OpenFileDialog.Filter = "*.exe|*.exe|Все файлы (*.*)|*.*"
|
|
}
|
|
else
|
|
{
|
|
$OpenFileDialog.Filter = "*.exe|*.exe|All Files (*.*)|*.*"
|
|
}
|
|
# Focus on open file dialog
|
|
# Перевести фокус на диалог открытия файла
|
|
$tmp = New-Object -TypeName System.Windows.Forms.Form
|
|
$tmp.add_Shown(
|
|
{
|
|
$tmp.Visible = $false
|
|
$tmp.Activate()
|
|
$tmp.TopMost = $true
|
|
$OpenFileDialog.ShowDialog($tmp)
|
|
$tmp.Close()
|
|
})
|
|
$tmp.ShowDialog()
|
|
if ($OpenFileDialog.FileName)
|
|
{
|
|
# Add old style shortcut for "Devices and Printers" to the Start menu
|
|
# Добавить ярлык старого формата для "Устройства и принтеры" в меню Пуск
|
|
$Items = (New-Object -ComObject Shell.Application).NameSpace("shell:::{4234d49b-0245-4df3-b780-3893943456e1}").Items()
|
|
$ControlPanelLocalizedName = ($Items | Where-Object -FilterScript {$_.Path -eq "Microsoft.Windows.ControlPanel"}).Name
|
|
# If Control Panel shortcut was ever pinned
|
|
# Если ярлык панели управления когда-либо закреплялся
|
|
if (Test-Path -Path "$env:APPDATA\Microsoft\Windows\Start menu\Programs\$ControlPanelLocalizedName.lnk")
|
|
{
|
|
$Args = @"
|
|
"$env:APPDATA\Microsoft\Windows\Start menu\Programs\$ControlPanelLocalizedName.lnk" "51201"
|
|
"@
|
|
Start-Process -FilePath $OpenFileDialog.FileName -WindowStyle Hidden -ArgumentList $Args -Wait
|
|
}
|
|
else
|
|
{
|
|
$shell = New-Object -ComObject Wscript.Shell
|
|
# Place the shortcut in "$env:SystemRoot\System32\$linkname.lnk"
|
|
# Разместим ярлык в "$env:SystemRoot\System32\$linkname.lnk"
|
|
$shortcut = $shell.CreateShortcut("$env:SystemRoot\System32\$ControlPanelLocalizedName.lnk")
|
|
$shortcut.TargetPath = "$env:SystemRoot\System32\control.exe"
|
|
$shortcut.Save()
|
|
# Pin to Start Control Panel
|
|
# The "Pin" verb is not available on the control.exe file so the shortcut has to be created
|
|
# Закрепить на начальном "Панель управления"
|
|
# Глагол "Закрепить на начальном экране" недоступен для control.exe, поэтому необходимо создать ярлык
|
|
$Args = @"
|
|
"$env:SystemRoot\System32\$ControlPanelLocalizedName.lnk" "51201"
|
|
"@
|
|
Start-Process -FilePath $OpenFileDialog.FileName -WindowStyle Hidden -ArgumentList $Args -Wait
|
|
Remove-Item -Path "$env:SystemRoot\System32\$ControlPanelLocalizedName.lnk" -Force
|
|
}
|
|
# Add old style shortcut for "Devices and Printers" to the Start menu
|
|
# Добавить ярлык старого формата для "Устройства и принтеры" в меню Пуск
|
|
$DevicesAndPrintersLocalizedName = (Get-ControlPanelItem | Where-Object -FilterScript {$_.CanonicalName -eq "Microsoft.DevicesAndPrinters"}).Name
|
|
$shell = New-Object -ComObject Wscript.Shell
|
|
$shortcut = $shell.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\$DevicesAndPrintersLocalizedName.lnk")
|
|
$shortcut.TargetPath = "control"
|
|
$shortcut.Arguments = "printers"
|
|
$shortCut.IconLocation = "$env:SystemRoot\system32\DeviceCenter.dll"
|
|
$shortcut.Save()
|
|
# Pin to Start Devices and Printers
|
|
# Закрепить на начальном "Устройства и принтеры"
|
|
$Args = @"
|
|
"$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\$DevicesAndPrintersLocalizedName.lnk" "51201"
|
|
"@
|
|
Start-Process -FilePath $OpenFileDialog.FileName -WindowStyle Hidden -ArgumentList $Args -Wait
|
|
# Pin to Start Command Prompt
|
|
# Закрепить на начальном "Командная строка"
|
|
$Args = @"
|
|
"$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\Command Prompt.lnk" "51201"
|
|
"@
|
|
Start-Process -FilePath $OpenFileDialog.FileName -WindowStyle Hidden -ArgumentList $Args -Wait
|
|
}
|
|
Remove-Item -Path "$OutFile\syspin.exe" -Force -ErrorAction Ignore
|
|
|
|
# Do not show app suggestions on Start menu
|
|
# Не показывать рекомендации в меню "Пуск"
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-338388Enabled -PropertyType DWord -Value 0 -Force
|
|
# Restart Start menu
|
|
# Перезапустить меню "Пуск"
|
|
Stop-Process -Name StartMenuExperienceHost -Force
|
|
#endregion Start menu
|
|
|
|
#region Edge
|
|
# Do not allow Microsoft Edge to start and load the Start and New Tab page at Windows startup and each time Microsoft Edge is closed
|
|
# Не разрешать Edge запускать и загружать страницу при загрузке Windows и каждый раз при закрытии Edge
|
|
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\TabPreloader))
|
|
{
|
|
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\TabPreloader -Force
|
|
}
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\TabPreloader -Name AllowTabPreloading -PropertyType DWord -Value 0 -Force
|
|
# Do not allow Microsoft Edge to pre-launch at Windows startup, when the system is idle, and each time Microsoft Edge is closed
|
|
# Не разрешать предварительный запуск Edge при загрузке Windows, когда система простаивает, и каждый раз при закрытии Edge
|
|
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\Main))
|
|
{
|
|
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\Main -Force
|
|
}
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\MicrosoftEdge\Main -Name AllowPrelaunch -PropertyType DWord -Value 0 -Force
|
|
# Turn off creation of an Edge shortcut on the desktop for each user profile
|
|
# Отключить создание ярлыка Edge на рабочем столе для каждого профиля пользователя пользователя
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name DisableEdgeDesktopShortcutCreation -PropertyType DWord -Value 1 -Force
|
|
#endregion Edge
|
|
|
|
#region UWP apps
|
|
# Uninstall all UWP apps from all accounts, except the followings...
|
|
# Удалить все UWP-приложения из всех учетных записей, кроме следующих...
|
|
$ExcludedApps = @(
|
|
# iTunes
|
|
"AppleInc.iTunes"
|
|
# Intel UWP-panel
|
|
# UWP-панель Intel
|
|
"AppUp.IntelGraphicsControlPanel"
|
|
"AppUp.IntelGraphicsExperience"
|
|
# Microsoft Desktop App Installer
|
|
"Microsoft.DesktopAppInstaller"
|
|
# Sticky Notes
|
|
# Записки
|
|
"Microsoft.MicrosoftStickyNotes"
|
|
# Screen Sketch
|
|
# Набросок на фрагменте экрана
|
|
"Microsoft.ScreenSketch"
|
|
# Microsoft Store
|
|
"Microsoft.StorePurchaseApp"
|
|
"Microsoft.WindowsStore"
|
|
# Web Media Extensions
|
|
# Расширения для интернет-мультимедиа
|
|
"Microsoft.WebMediaExtensions"
|
|
# Photos and Video Editor
|
|
# Фотографии и Видеоредактор
|
|
"Microsoft.Windows.Photos"
|
|
# Calculator
|
|
# Калькулятор
|
|
"Microsoft.WindowsCalculator"
|
|
# NVIDIA Control Panel
|
|
# Панель управления NVidia
|
|
"NVIDIACorp.NVIDIAControlPanel"
|
|
)
|
|
$OFS = "|"
|
|
Get-AppxPackage -PackageTypeFilter Bundle -AllUsers | Where-Object {$_.Name -cnotmatch $ExcludedApps} | Remove-AppxPackage -AllUsers
|
|
$OFS = " "
|
|
# Uninstall all provisioned UWP apps from System account, except the followings...
|
|
# App packages will not be installed when new user accounts are created
|
|
# Удалить все UWP-приложения из системной учетной записи, кроме следующих...
|
|
# Приложения не будут установлены при создании новых учетных записей
|
|
$ExcludedApps = @(
|
|
# Intel UWP-panel
|
|
# UWP-панель Intel
|
|
"AppUp.IntelGraphicsControlPanel"
|
|
"AppUp.IntelGraphicsExperience"
|
|
# Microsoft Desktop App Installer
|
|
"Microsoft.DesktopAppInstaller"
|
|
# HEIF Image Extensions
|
|
# Расширения для изображений HEIF
|
|
"Microsoft.HEIFImageExtension"
|
|
# Sticky Notes
|
|
# Записки
|
|
"Microsoft.MicrosoftStickyNotes"
|
|
# Screen Sketch
|
|
# Набросок на фрагменте экрана
|
|
"Microsoft.ScreenSketch"
|
|
# Microsoft Store
|
|
"Microsoft.StorePurchaseApp"
|
|
"Microsoft.WindowsStore"
|
|
# VP9 Video Extensions
|
|
# Расширения для VP9-видео
|
|
"Microsoft.VP9VideoExtensions"
|
|
# Web Media Extensions
|
|
# Расширения для интернет-мультимедиа
|
|
"Microsoft.WebMediaExtensions"
|
|
# WebP Image Extension
|
|
# Расширения для изображений WebP
|
|
"Microsoft.WebpImageExtension"
|
|
# Photos and Video Editor
|
|
# Фотографии и Видеоредактор
|
|
"Microsoft.Windows.Photos"
|
|
# Calculator
|
|
# Калькулятор
|
|
"Microsoft.WindowsCalculator"
|
|
# NVIDIA Control Panel
|
|
# Панель управления NVidia
|
|
"NVIDIACorp.NVIDIAControlPanel"
|
|
)
|
|
$OFS = "|"
|
|
Get-AppxProvisionedPackage -Online | Where-Object -FilterScript {$_.DisplayName -cnotmatch $ExcludedApps} | Remove-AppxProvisionedPackage -Online
|
|
$OFS = " "
|
|
#endregion UWP apps
|
|
|
|
#region Gaming
|
|
# Turn off Game bar
|
|
# Отключить Меню игры
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\GameDVR -Name AppCaptureEnabled -PropertyType DWord -Value 0 -Force
|
|
New-ItemProperty -Path HKCU:\System\GameConfigStore -Name GameDVR_Enabled -PropertyType DWord -Value 0 -Force
|
|
# Turn off Xbox Game Bar tips
|
|
# Отключить советы Xbox Game Bar
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\GameBar -Name ShowStartupPanel -PropertyType DWord -Value 0 -Force
|
|
#endregion Gaming
|
|
|
|
#region Scheduled tasks
|
|
# Create a task in the Task Scheduler to start Windows cleaning up
|
|
# The task runs every 90 days
|
|
# Создать задачу в Планировщике задач по очистке обновлений Windows
|
|
# Задача выполняется каждые 90 дней
|
|
$keys = @(
|
|
# Delivery Optimization Files
|
|
# Файлы оптимизации доставки
|
|
"Delivery Optimization Files",
|
|
# Device driver packages
|
|
# Пакеты драйверов устройств
|
|
"Device Driver Packages",
|
|
# Previous Windows Installation(s)
|
|
# Предыдущие установки Windows
|
|
"Previous Installations",
|
|
# Файлы журнала установки
|
|
"Setup Log Files",
|
|
# Temporary Setup Files
|
|
"Temporary Setup Files",
|
|
# Windows Update Cleanup
|
|
# Очистка обновлений Windows
|
|
"Update Cleanup",
|
|
# Windows Defender Antivirus
|
|
"Windows Defender",
|
|
# Windows upgrade log files
|
|
# Файлы журнала обновления Windows
|
|
"Windows Upgrade Log Files"
|
|
)
|
|
foreach ($key in $keys)
|
|
{
|
|
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\$key" -Name StateFlags1337 -PropertyType DWord -Value 2 -Force
|
|
}
|
|
$action = New-ScheduledTaskAction -Execute "cleanmgr.exe" -Argument "/sagerun:1337"
|
|
$trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 90 -At 9am
|
|
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable
|
|
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -RunLevel Highest
|
|
$params = @{
|
|
"TaskName" = "Update Cleanup"
|
|
"Action" = $action
|
|
"Trigger" = $trigger
|
|
"Settings" = $settings
|
|
"Principal" = $principal
|
|
}
|
|
Register-ScheduledTask @params -Force
|
|
# Create a task in the Task Scheduler to clear the $env:SystemRoot\SoftwareDistribution\Download folder
|
|
# The task runs on Thursdays every 4 weeks
|
|
# Создать задачу в Планировщике задач по очистке папки $env:SystemRoot\SoftwareDistribution\Download
|
|
# Задача выполняется по четвергам каждую 4 неделю
|
|
$action = New-ScheduledTaskAction -Execute powershell.exe -Argument @"
|
|
`$getservice = Get-Service -Name wuauserv
|
|
`$getservice.WaitForStatus('Stopped', '01:00:00')
|
|
Get-ChildItem -Path `$env:SystemRoot\SoftwareDistribution\Download -Recurse -Force | Remove-Item -Recurse -Force
|
|
"@
|
|
$trigger = New-JobTrigger -Weekly -WeeksInterval 4 -DaysOfWeek Thursday -At 9am
|
|
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable
|
|
$principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -RunLevel Highest
|
|
$params = @{
|
|
"TaskName" = "SoftwareDistribution"
|
|
"Action" = $action
|
|
"Trigger" = $trigger
|
|
"Settings" = $settings
|
|
"Principal" = $principal
|
|
}
|
|
Register-ScheduledTask @params -Force
|
|
# Create a task in the Task Scheduler to clear the $env:TEMP folder
|
|
# The task runs every 62 days
|
|
# Создать задачу в Планировщике задач по очистке папки $env:TEMP
|
|
# Задача выполняется каждые 62 дня
|
|
$action = New-ScheduledTaskAction -Execute powershell.exe -Argument @"
|
|
Get-ChildItem -Path `$env:TEMP -Force -Recurse | Remove-Item -Force -Recurse
|
|
"@
|
|
$trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 62 -At 9am
|
|
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable
|
|
$principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -RunLevel Highest
|
|
$params = @{
|
|
"TaskName" = "Temp"
|
|
"Action" = $action
|
|
"Trigger" = $trigger
|
|
"Settings" = $settings
|
|
"Principal" = $principal
|
|
}
|
|
Register-ScheduledTask @params -Force
|
|
#endregion Scheduled tasks
|
|
|
|
#region Windows Defender & Security
|
|
# Add exclusion folder from Windows Defender Antivirus scanning
|
|
# Добавить папку в список исключений сканирования Защитника Windows
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВведите полные пути до файлов или папок, которые следует "
|
|
Write-Host "исключить из списка сканирования Windows Defender."
|
|
Write-Host "Пути должны быть разделены запятыми и взяты в кавычки." -ForegroundColor Yellow
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nType the full paths to files or folders, which to exclude "
|
|
Write-Host "from Windows Defender Antivirus Scan."
|
|
Write-Host "The paths must be separated by commas and taken in quotes." -ForegroundColor Yellow
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
function ExclusionPath
|
|
{
|
|
[CmdletBinding()]
|
|
Param
|
|
(
|
|
[Parameter(Mandatory = $True)]
|
|
[string[]]$paths
|
|
)
|
|
$paths = $paths.Replace("`"", "").Split(",").Trim()
|
|
Add-MpPreference -ExclusionPath $paths -Force
|
|
}
|
|
do
|
|
{
|
|
$paths = Read-Host -Prompt " "
|
|
if ($paths -match "`"")
|
|
{
|
|
ExclusionPath $paths
|
|
}
|
|
elseif ([string]::IsNullOrEmpty($paths))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nПути не взяты в кавычки." -ForegroundColor Yellow
|
|
Write-Host "Введите пути, взяв в кавычки и разделив запятыми."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nThe paths hasn't been taken in quotes." -ForegroundColor Yellow
|
|
Write-Host "Type the paths by quoting and separating by commas."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
until ($paths -match "`"")
|
|
# Turn on Controlled folder access and add protected folders
|
|
# Включить контролируемый доступ к папкам и добавить защищенные папки
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВведите путь до папки, чтобы добавить в список защищенных папок."
|
|
Write-Host "Пути должны быть разделены запятыми и взяты в кавычки." -ForegroundColor Yellow
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nType folder path to add to protected folders list."
|
|
Write-Host "The paths must be separated by commas and taken in quotes." -ForegroundColor Yellow
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
function ControlledFolderAccess
|
|
{
|
|
[CmdletBinding()]
|
|
Param
|
|
(
|
|
[Parameter(Mandatory = $True)]
|
|
[string[]]$paths
|
|
)
|
|
Set-MpPreference -EnableControlledFolderAccess Enabled
|
|
$paths = $paths.Replace("`"", "").Split(",").Trim()
|
|
Add-MpPreference -ControlledFolderAccessProtectedFolders $paths
|
|
}
|
|
do
|
|
{
|
|
$paths = Read-Host -Prompt " "
|
|
if ($paths -match "`"")
|
|
{
|
|
ControlledFolderAccess $paths
|
|
}
|
|
elseif ([string]::IsNullOrEmpty($paths))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nПути не взяты в кавычки." -ForegroundColor Yellow
|
|
Write-Host "Введите пути, взяв в кавычки и разделив запятыми."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nThe paths hasn't been taken in quotes." -ForegroundColor Yellow
|
|
Write-Host "Type the paths by quoting and separating by commas."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
until ($paths -match "`"")
|
|
# Allow an app through Controlled folder access
|
|
# Разрешить работу приложения через контролируемый доступ к папкам
|
|
if ((Get-MpPreference).EnableControlledFolderAccess -eq 1)
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nВведите путь до приложения, чтобы добавить в список разрешенных приложений."
|
|
Write-Host "Пути должны быть разделены запятыми и взяты в кавычки." -ForegroundColor Yellow
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nType app path to add to an allowed app list."
|
|
Write-Host "The paths must be separated by commas and taken in quotes." -ForegroundColor Yellow
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
function ControlledFolderAllowedApplications
|
|
{
|
|
[CmdletBinding()]
|
|
Param
|
|
(
|
|
[Parameter(Mandatory = $True)]
|
|
[string[]]$paths
|
|
)
|
|
$paths = $paths.Replace("`"", "").Split(",").Trim()
|
|
Add-MpPreference -ControlledFolderAccessAllowedApplications $paths
|
|
}
|
|
do
|
|
{
|
|
$paths = Read-Host -Prompt " "
|
|
if ($paths -match "`"")
|
|
{
|
|
ControlledFolderAllowedApplications $paths
|
|
}
|
|
elseif ([string]::IsNullOrEmpty($paths))
|
|
{
|
|
break
|
|
}
|
|
else
|
|
{
|
|
if ($RU)
|
|
{
|
|
Write-Host "`nПути не взяты в кавычки." -ForegroundColor Yellow
|
|
Write-Host "Введите пути, взяв в кавычки и разделив запятыми."
|
|
Write-Host "`nЧтобы пропустить, нажмите Enter" -NoNewline
|
|
}
|
|
else
|
|
{
|
|
Write-Host "`nThe paths hasn't been taken in quotes." -ForegroundColor Yellow
|
|
Write-Host "Type the paths by quoting and separating by commas."
|
|
Write-Host "`nPress Enter to skip" -NoNewline
|
|
}
|
|
}
|
|
}
|
|
until ($paths -match "`"")
|
|
}
|
|
# Turn on Windows Defender Exploit Guard network protection
|
|
# Включить защиту сети в Защитнике Windows
|
|
Set-MpPreference -EnableNetworkProtection Enabled
|
|
# Turn on detection for potentially unwanted applications
|
|
# Включить обнаружение потенциально нежелательных приложений
|
|
Set-MpPreference -PUAProtection Enabled
|
|
# Run Microsoft Defender within a sandbox
|
|
# Запускать Microsoft Defender в песочнице
|
|
setx /M MP_FORCE_USE_SANDBOX 1
|
|
# Dismiss Microsoft Defender offer in the Windows Security about signing in Microsoft account
|
|
# Отклонить предложение Microsoft Defender в "Безопасность Windows" о входе в аккаунт Microsoft
|
|
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Security Health\State" -Name AccountProtection_MicrosoftAccount_Disconnected -PropertyType DWord -Value 1 -Force
|
|
# Dismiss Microsoft Defender offer in the Windows Security about to turn on the SmartScreen filter for Microsoft Edge
|
|
# Отклонить предложение Защитника Windows в "Безопасность Windows" включить фильтр SmartScreen для Microsoft Edge
|
|
New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Security Health\State" -Name AppAndBrowser_EdgeSmartScreenOff -PropertyType DWord -Value 0 -Force
|
|
# Turn on logging for all Windows PowerShell modules
|
|
# Включить ведение журнала для всех модулей Windows PowerShell
|
|
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging\ModuleNames))
|
|
{
|
|
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging\ModuleNames -Force
|
|
}
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging\ModuleNames -Name * -PropertyType String -Value * -Force
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging\ModuleNames -Name EnableModuleLogging -PropertyType DWord -Value 1 -Force
|
|
# Turn on logging of all PowerShell script input to the Microsoft-Windows-PowerShell/Operational event log
|
|
# Включить регистрацию всех вводимых сценариев PowerShell в журнале событий Microsoft-Windows-PowerShell/Operational
|
|
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging))
|
|
{
|
|
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging -Force
|
|
}
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging -Name EnableScriptBlockLogging -PropertyType DWord -Value 1 -Force
|
|
# Turn on events auditing generated when a process is created or starts
|
|
# Включить аудит событий, возникающих при создании или запуске процесса
|
|
if ($RU)
|
|
{
|
|
auditpol /set /subcategory:"Создание процесса" /success:enable /failure:enable
|
|
}
|
|
else
|
|
{
|
|
auditpol /set /subcategory:"Process Creation" /success:enable /failure:enable
|
|
}
|
|
# Include command line in process creation events
|
|
# Включать командную строку в событиях создания процесса
|
|
New-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit -Name ProcessCreationIncludeCmdLine_Enabled -PropertyType DWord -Value 1 -Force
|
|
# Turn off SmartScreen for apps and files
|
|
# Отключить SmartScreen для приложений и файлов
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name SmartScreenEnabled -PropertyType String -Value Off -Force
|
|
# Turn off Microsoft Defender SmartScreen for Microsoft Edge
|
|
# Отключить Microsoft Defender SmartScreen в Microsoft Edge
|
|
$edge = (Get-AppxPackage -Name "Microsoft.MicrosoftEdge").PackageFamilyName
|
|
if (-not (Test-Path -Path "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\$edge\MicrosoftEdge\PhishingFilter"))
|
|
{
|
|
New-Item -Path "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\$edge\MicrosoftEdge\PhishingFilter" -Force
|
|
}
|
|
New-ItemProperty -Path "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\$edge\MicrosoftEdge\PhishingFilter" -Name EnabledV9 -PropertyType DWord -Value 0 -Force
|
|
New-ItemProperty -Path "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\$edge\MicrosoftEdge\PhishingFilter" -Name PreventOverride -PropertyType DWord -Value 0 -Force
|
|
# Turn off Windows Script Host
|
|
# Отключить Windows Script Host
|
|
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -PropertyType DWord -Value 0 -Force
|
|
#endregion Windows Defender & Security
|
|
|
|
#region Context menu
|
|
# Add "Extract" to MSI file type context menu
|
|
# Добавить пункт "Extract" для MSI в контекстное меню
|
|
if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\Extract\Command))
|
|
{
|
|
New-Item -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\Extract\Command -Force
|
|
}
|
|
$Value = "{0}" -f 'msiexec.exe /a "%1" /qb TARGETDIR="%1 extracted"'
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\Extract\Command -Name "(default)" -PropertyType String -Value $Value -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\Extract -Name MUIVerb -PropertyType String -Value "@shell32.dll,-31382" -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Msi.Package\shell\Extract -Name Icon -PropertyType String -Value "shell32.dll,-16817" -Force
|
|
# Add "Run as different user" from context menu for .exe file type
|
|
# Добавить "Запуск от имени другого пользователя" в контекстное меню для .exe файлов
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\exefile\shell\runasuser -Name "(default)" -PropertyType String -Value "@shell32.dll,-50944" -Force
|
|
Remove-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\exefile\shell\runasuser -Name Extended -Force -ErrorAction Ignore
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\exefile\shell\runasuser -Name SuppressionPolicyEx -PropertyType String -Value "{F211AA05-D4DF-4370-A2A0-9F19C09756A7}" -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\exefile\shell\runasuser\command -Name DelegateExecute -PropertyType String -Value "{ea72d00e-4960-42fa-ba92-7792a7944c1d}" -Force
|
|
# Add "Install" to .cab archive type context menu
|
|
# Добавить пункт "Установить" для .cab архивов в контекстное меню
|
|
if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs\Command))
|
|
{
|
|
New-Item -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs\Command -Force
|
|
}
|
|
$Value = "{0}" -f 'cmd /c DISM /Online /Add-Package /PackagePath:"%1" /NoRestart & pause'
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs\Command -Name "(default)" -PropertyType String -Value $Value -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs -Name MUIVerb -PropertyType String -Value "@shell32.dll,-10210" -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\CABFolder\Shell\RunAs -Name HasLUAShield -PropertyType String -Value "" -Force
|
|
# Remove "Cast to Device" from context menu
|
|
# Удалить пункт "Передать на устройство" из контекстного меню
|
|
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked"))
|
|
{
|
|
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked" -Force
|
|
}
|
|
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked" -Name "{7AD84985-87B4-4a16-BE58-8B72A5B390F7}" -PropertyType String -Value "Play to menu" -Force
|
|
# Remove "Share" from context menu
|
|
# Удалить пункт "Отправить" (поделиться) из контекстного меню
|
|
if (-not (Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked"))
|
|
{
|
|
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked" -Force
|
|
}
|
|
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked" -Name "{E2BF9676-5F8F-435C-97EB-11607A5BEDF7}" -PropertyType String -Value "" -Force
|
|
# Remove "Edit with Paint 3D" from context menu
|
|
# Удалить пункт "Изменить с помощью Paint 3D" из контекстного меню
|
|
$exts = @(".bmp", ".gif", ".jpe", ".jpeg", ".jpg", ".png", ".tif", ".tiff")
|
|
foreach ($ext in $exts)
|
|
{
|
|
New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\$ext\Shell\3D Edit" -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
}
|
|
# Remove "Include in Library" from context menu
|
|
# Удалить пункт "Добавить в библиотеку" из контекстного меню
|
|
New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Folder\shellex\ContextMenuHandlers\Library Location" -Name "(default)" -PropertyType String -Value "-{3dad6c5d-2167-4cae-9914-f99e41c12cfa}" -Force
|
|
# Remove "Turn on BitLocker" from context menu
|
|
# Удалить пункт "Включить BitLocker" из контекстного меню
|
|
if (Get-WindowsEdition -Online | Where-Object -FilterScript {$_.Edition -eq "Professional" -or $_.Edition -eq "Enterprise"})
|
|
{
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Drive\shell\encrypt-bde -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Drive\shell\encrypt-bde-elev -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Drive\shell\manage-bde -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Drive\shell\resume-bde -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Drive\shell\resume-bde-elev -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\Drive\shell\unlock-bde -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
}
|
|
# Remove "Edit with Photos" from context menu
|
|
# Удалить пункт "Изменить с помощью приложения "Фотографии"" из контекстного меню
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\AppX43hnxtbyyps62jhe9sqpdzxn1790zetc\Shell\ShellEdit -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
# Remove "Create a new video" from context menu
|
|
# Удалить пункт "Создать новое видео" из контекстного меню
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\AppX43hnxtbyyps62jhe9sqpdzxn1790zetc\Shell\ShellCreateVideo -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
# Remove "Edit" from images context menu
|
|
# Удалить пункт "Изменить" из контекстного меню изображений
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\edit -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
# Remove "Print" from batch and .cmd files context menu
|
|
# Удалить пункт "Печать" из контекстного меню для .bat и .cmd файлов
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\batfile\shell\print -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\cmdfile\shell\print -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force
|
|
# Remove "Compressed (zipped) Folder" from context menu
|
|
# Удалить пункт "Сжатая ZIP-папка" из контекстного меню
|
|
Remove-Item -Path Registry::HKEY_CLASSES_ROOT\.zip\CompressedFolder\ShellNew -Force -ErrorAction Ignore
|
|
# Remove "Rich Text Document" from context menu
|
|
# Удалить пункт "Создать Документ в формате RTF" из контекстного меню
|
|
Remove-Item -Path Registry::HKEY_CLASSES_ROOT\.rtf\ShellNew -Force -ErrorAction Ignore
|
|
# Remove "Bitmap image" from context menu
|
|
# Удалить пункт "Создать Точечный рисунок" из контекстного меню
|
|
Remove-Item -Path Registry::HKEY_CLASSES_ROOT\.bmp\ShellNew -Force -ErrorAction Ignore
|
|
# Remove "Send to" from folder context menu
|
|
# Удалить пункт "Отправить" из контекстного меню папки
|
|
New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\SendTo -Name "(default)" -PropertyType String -Value "" -Force
|
|
# Make the "Open", "Print", "Edit" context menu items available, when more than 15 selected
|
|
# Сделать доступными элементы контекстного меню "Открыть", "Изменить" и "Печать" при выделении более 15 элементов
|
|
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name MultipleInvokePromptMinimum -PropertyType DWord -Value 300 -Force
|
|
# Turn off "Look for an app in the Microsoft Store" in "Open with" dialog
|
|
# Отключить "Поиск приложения в Microsoft Store" в диалоге "Открыть с помощью"
|
|
if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer))
|
|
{
|
|
New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force
|
|
}
|
|
New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -PropertyType DWord -Value 1 -Force
|
|
#endregion Context menu
|
|
|
|
#region End
|
|
# Refresh desktop icons, environment variables and taskbar without restarting File Explorer
|
|
# Обновить иконки рабочего стола, переменные среды и панель задач без перезапуска "Проводника"
|
|
$UpdateEnvExplorerAPI = @{
|
|
Namespace = "WinAPI"
|
|
Name = "UpdateEnvExplorer"
|
|
Language = "CSharp"
|
|
MemberDefinition = @"
|
|
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);
|
|
private const int WM_SETTINGCHANGE = 0x1a;
|
|
private const int SMTO_ABORTIFHUNG = 0x0002;
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
|
|
static extern bool SendNotifyMessage(IntPtr hWnd, uint Msg, IntPtr wParam, string lParam);
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
|
|
private static extern IntPtr SendMessageTimeout(IntPtr hWnd, int Msg, IntPtr wParam, string lParam, int fuFlags, int uTimeout, IntPtr lpdwResult);
|
|
[DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = false)]
|
|
private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);
|
|
public static void Refresh()
|
|
{
|
|
// Update desktop icons
|
|
SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
|
|
// Update environment variables
|
|
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, null, SMTO_ABORTIFHUNG, 100, IntPtr.Zero);
|
|
// Update taskbar
|
|
SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, "TraySettings");
|
|
}
|
|
"@
|
|
}
|
|
if (-not ("WinAPI.UpdateEnvExplorer" -as [type]))
|
|
{
|
|
Add-Type @UpdateEnvExplorerAPI
|
|
}
|
|
[WinAPI.UpdateEnvExplorer]::Refresh()
|
|
|
|
# Errors output
|
|
# Вывод ошибок
|
|
if ($Error)
|
|
{
|
|
Write-Host "`nWarnings/Errors" -BackgroundColor Red
|
|
($Error | ForEach-Object -Process {
|
|
[PSCustomObject] @{
|
|
Line = $_.InvocationInfo.ScriptLineNumber
|
|
Error = $_.Exception.Message
|
|
}
|
|
} | Sort-Object -Property Line | Format-Table -AutoSize -Wrap | Out-String).Trim()
|
|
}
|
|
#endregion End
|