<# .SYNOPSIS "Windows 10 Sophia Script" is a PowerShell module for Windows 10 fine-tuning and automating the routine tasks Version: v5.2 Date: 10.11.2020 Copyright (c) 2020 farag & oZ-Zo Thanks to all http://forum.ru-board.com members involved .DESCRIPTION Supported Windows 10 versions: 2004 (20H1)/2009 (20H2), 19041/19042, Home/Pro/Enterprise, x64 Some third-party antiviruses flag this script or its' part as malicious one This is a false positive due to $EncodedScript variable. You can read more about in "CreateCleanUpTask" function You might need to disable tamper protection from your antivirus settings, re-enable it after running the script, and reboot Running the script is best done on a fresh install because running it on wrong tweaked system may result in errors occurring PowerShell must be run with elevated privileges Set execution policy to be able to run scripts only in the current PowerShell session: Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force .EXAMPLE PS C:\> .\Sophia.ps1 .NOTES http://forum.ru-board.com/topic.cgi?forum=62&topic=30617#15 https://habr.com/en/post/521202/ https://forums.mydigitallife.net/threads/powershell-script-setup-windows-10.81675/ https://www.reddit.com/r/PowerShell/comments/go2n5v/powershell_script_setup_windows_10/ .LINK https://github.com/farag2/Windows-10-Sophia-Script #> #region Check function Check { Set-StrictMode -Version Latest # Сlear the $Error variable # Очистка переменной $Error $Global:Error.Clear() # Detect the OS bitness # Определить разрядность ОС switch ([Environment]::Is64BitOperatingSystem) { $false { Write-Warning -Message $Localization.UnsupportedOSBitness break } } # Turn off Controlled folder access to let the script proceed # Выключить контролируемый доступ к папкам switch ((Get-MpPreference).EnableControlledFolderAccess -eq 1) { $true { Write-Warning -Message $Localization.ControlledFolderAccessDisabled Set-MpPreference -EnableControlledFolderAccess Disabled # Open "Ransomware protection" page # Открыть раздел "Защита от программ-шатажистов" Start-Process -FilePath windowsdefender://RansomwareProtection } } } #endregion Check # Create a restore point # Создать точку восстановления function CreateRestorePoint { if (-not (Get-ComputerRestorePoint)) { Enable-ComputerRestore -Drive $env:SystemDrive } # Set system restore point creation frequency to 5 minutes # Установить частоту создания точек восстановления на 5 минут New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore" -Name SystemRestorePointCreationFrequency -PropertyType DWord -Value 5 -Force Checkpoint-Computer -Description "Windows 10 Sophia Script" -RestorePointType MODIFY_SETTINGS # Revert the System Restore checkpoint creation frequency to 1440 minutes # Вернуть частоту создания точек восстановления на 1440 минут New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore" -Name SystemRestorePointCreationFrequency -PropertyType DWord -Value 1440 -Force } #region Privacy & Telemetry <# .SYNOPSIS Disable/enable the "Connected User Experiences and Telemetry" service (DiagTrack) Отключить/включить службу "Функциональные возможности для подключенных пользователей и телеметрия" (DiagTrack) .PARAMETER Disable Disable the DiagTrack service Отключить службу DiagTrack .PARAMETER Enable Enable the DiagTrack service Включить службу DiagTrack .EXAMPLE TelemetryService -Disable .EXAMPLE TelemetryService -Enable .NOTES Current user only Только для текущего пользователя #> function TelemetryService { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { Get-Service -Name DiagTrack | Set-Service -StartupType Automatic Get-Service -Name DiagTrack | Start-Service } "Disable" { Get-Service -Name DiagTrack | Stop-Service -Force Get-Service -Name DiagTrack | Set-Service -StartupType Disabled } } } <# .SYNOPSIS Set the OS level of diagnostic data gathering to minimum/default Установить уровень сбора диагностических сведений ОС на минимальный/по умолчанию .PARAMETER Minimal Set the OS level of diagnostic data gathering to minimum Установить уровень сбора диагностических сведений ОС на минимальный .PARAMETER Default Set the OS level of diagnostic data gathering to minimum Установить уровень сбора диагностических сведений ОС на минимальный .EXAMPLE DiagnosticDataLevel -Minimal .EXAMPLE DiagnosticDataLevel -Default #> function DiagnosticDataLevel { param ( [Parameter( Mandatory = $true, ParameterSetName = "Minimal" )] [switch] $Minimal, [Parameter( Mandatory = $true, ParameterSetName = "Default" )] [switch] $Default ) switch ($PSCmdlet.ParameterSetName) { "Minimal" { if (Get-WindowsEdition -Online | Where-Object -FilterScript {$_.Edition -like "Enterprise*" -or $_.Edition -eq "Education"}) { # Optional diagnostic data # Необязательные диагностические данные New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 0 -Force } else { # Required diagnostic data # Обязательные диагностические данные New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 1 -Force } } "Default" { New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 3 -Force } } } <# .SYNOPSIS Turn off/turn on Windows Error Reporting for the current user Отключить/включить отчеты об ошибках Windows для текущего пользователя .PARAMETER Disable Turn off Windows Error Reporting for the current user Отключить отчеты об ошибках Windows для текущего пользователя .PARAMETER Enable Turn on Windows Error Reporting for the current user Включить отчеты об ошибках Windows для текущего пользователя .EXAMPLE ErrorReporting -Disable .EXAMPLE ErrorReporting -Enable .NOTES Current user only Только для текущего пользователя #> function ErrorReporting { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { if ((Get-WindowsEdition -Online).Edition -notmatch "Core*") { Get-ScheduledTask -TaskName QueueReporting | Disable-ScheduledTask New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force } } "Enable" { Get-ScheduledTask -TaskName QueueReporting | Enable-ScheduledTask Remove-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction SilentlyContinue } } } <# .SYNOPSIS Change Windows feedback frequency to "Never"/"Automatically" for the current user Изменить частоту формирования отзывов на "Никогда"/"Автоматически" для текущего пользователя .PARAMETER Disable Change Windows feedback frequency to "Never" for the current user Изменить частоту формирования отзывов на "Никогда" для текущего пользователя .PARAMETER Enable Change Windows feedback frequency to "Automatically" for the current user Изменить частоту формирования отзывов на "Автоматически" для текущего пользователя .EXAMPLE WindowsFeedback -Disable .EXAMPLE WindowsFeedback -Enable .NOTES Current user only Только для текущего пользователя #> function WindowsFeedback { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { 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 } "Enable" { Remove-Item -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Force -ErrorAction SilentlyContinue } } } <# .SYNOPSIS Turn off/turn on diagnostics tracking scheduled tasks Отключить/включить задачи диагностического отслеживания .PARAMETER Disable Turn off on diagnostics tracking scheduled tasks Отключить задачи диагностического отслеживания .PARAMETER Enable Turn on diagnostics tracking scheduled tasks Включить задачи диагностического отслеживания .EXAMPLE ScheduledTasks -Disable .EXAMPLE ScheduledTasks -Enable #> function ScheduledTasks { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) $ScheduledTaskList = @( # 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 and sends it to the Windows Device Connectivity engineering group at Microsoft # При выполнении задачи программы улучшения качества ПО шины USB (USB CEIP) осуществляется сбор статистических данных об использовании универсальной последовательной шины USB и с ведений о компьютере, которые направляются инженерной группе Майкрософт по вопросам подключения устройств в Windows "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)", # 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", # XblGameSave Standby Task "XblGameSaveTask" ) # If device is not a laptop disable FODCleanupTask too # Если устройство не является ноутбуком, отключить также и FODCleanupTask if ((Get-CimInstance -ClassName Win32_ComputerSystem).PCSystemType -ne 2) { # Windows Hello $ScheduledTaskList += "FODCleanupTask" } switch ($PSCmdlet.ParameterSetName) { "Disable" { Get-ScheduledTask -TaskName $ScheduledTaskList | Disable-ScheduledTask } "Enable" { Get-ScheduledTask -TaskName $ScheduledTaskList | Enable-ScheduledTask } } } <# .SYNOPSIS Do not use/use sign-in info to automatically finish setting up device and reopen apps after an update or restart Не использовать/использовать данные для входа для автоматического завершения настройки устройства и открытия приложений после перезапуска или обновления .PARAMETER Disable Do not use sign-in info to automatically finish setting up device and reopen apps after an update or restart Не использовать данные для входа для автоматического завершения настройки устройства и открытия приложений после перезапуска или обновления .PARAMETER Enable Use sign-in info to automatically finish setting up device and reopen apps after an update or restart Использовать данные для входа для автоматического завершения настройки устройства и открытия приложений после перезапуска или обновления .EXAMPLE SigninInfo -Disable .EXAMPLE SigninInfo -Enable .NOTES Current user only Только для текущего пользователя #> function SigninInfo { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { $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 } "Enable" { $SID = (Get-CimInstance -ClassName Win32_UserAccount | Where-Object -FilterScript {$_.Name -eq $env:USERNAME}).SID Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\UserARSO\$SID" -Name OptOut -Force -ErrorAction SilentlyContinue } } } <# .SYNOPSIS Do not let/let websites provide locally relevant content by accessing language list Не позволять/позволять веб-сайтам предоставлять местную информацию за счет доступа к списку языков .PARAMETER Disable Do not let websites provide locally relevant content by accessing language list Не позволять веб-сайтам предоставлять местную информацию за счет доступа к списку языков .PARAMETER Enable Let websites provide locally relevant content by accessing language list Позволять веб-сайтам предоставлять местную информацию за счет доступа к списку языков .EXAMPLE LanguageListAccess -Disable .EXAMPLE LanguageListAccess -Enable .NOTES Current user only Только для текущего пользователя #> function LanguageListAccess { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { New-ItemProperty -Path "HKCU:\Control Panel\International\User Profile" -Name HttpAcceptLanguageOptOut -PropertyType DWord -Value 1 -Force } "Enable" { Remove-ItemProperty -Path "HKCU:\Control Panel\International\User Profile" -Name HttpAcceptLanguageOptOut -Force -ErrorAction SilentlyContinue } } } <# .SYNOPSIS Do not allow/allow apps to use advertising ID Не разрешать/разрешать приложениям использовать идентификатор рекламы .PARAMETER Disable Do not allow apps to use advertising ID Не разрешать приложениям использовать идентификатор рекламы .PARAMETER Enable Do not allow apps to use advertising ID Не разрешать приложениям использовать идентификатор рекламы .EXAMPLE AdvertisingID -Disable .EXAMPLE AdvertisingID -Enable .NOTES Current user only Только для текущего пользователя #> function AdvertisingID { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { if (-not (Test-Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) { New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force } New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 0 -Force } "Enable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Do not let/let apps on other devices open and message apps on this device, and vice versa Не разрешать/разрешать приложениям на других устройствах запускать приложения и отправлять сообщения на этом устройстве и наоборот .PARAMETER Disable Do not let apps on other devices open and message apps on this device, and vice versa Не разрешать/разрешать приложениям на других устройствах запускать приложения и отправлять сообщения на этом устройстве и наоборот .PARAMETER Enable Let apps on other devices open and message apps on this device, and vice versa разрешать приложениям на других устройствах запускать приложения и отправлять сообщения на этом устройстве и наоборот .EXAMPLE ShareAcrossDevices -Disable .EXAMPLE ShareAcrossDevices -Enable .NOTES Current user only Только для текущего пользователя #> function ShareAcrossDevices { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\CDP -Name RomeSdkChannelUserAuthzPolicy -PropertyType DWord -Value 1 -Force } "Disable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\CDP -Name RomeSdkChannelUserAuthzPolicy -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Hide/show the Windows welcome experiences after updates and occasionally when I sign in to highlight what's new and suggested Не показывать/показывать экран приветствия Windows после обновлений и иногда при входе, чтобы сообщить о новых функциях и предложениях .PARAMETER Hide Hide the Windows welcome experiences after updates and occasionally when I sign in to highlight what's new and suggested Не показывать экран приветствия Windows после обновлений и иногда при входе, чтобы сообщить о новых функциях и предложениях .PARAMETER Show Show the Windows welcome experiences after updates and occasionally when I sign in to highlight what's new and suggested Показывать экран приветствия Windows после обновлений и иногда при входе, чтобы сообщить о новых функциях и предложениях .EXAMPLE WindowsWelcomeExperience -Hide .EXAMPLE WindowsWelcomeExperience -Show .NOTES Current user only Только для текущего пользователя #> function WindowsWelcomeExperience { param ( [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show, [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide ) switch ($PSCmdlet.ParameterSetName) { "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-310093Enabled -PropertyType DWord -Value 1 -Force } "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-310093Enabled -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Get/do not get tip, trick, and suggestions as you use Windows Получать/не получать советы, подсказки и рекомендации при использованию Windows .PARAMETER Disable Do not get tip, trick, and suggestions as you use Windows Не получать советы, подсказки и рекомендации при использованию Windows .PARAMETER Enable Get tip, trick, and suggestions as you use Windows Получать советы, подсказки и рекомендации при использованию Windows .EXAMPLE WindowsTips -Disable .EXAMPLE WindowsTips -Enable .NOTES Current user only Только для текущего пользователя #> function WindowsTips { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-338389Enabled -PropertyType DWord -Value 1 -Force } "Disable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-338389Enabled -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Hide/show suggested content in the Settings app Скрывать/показывать рекомендуемое содержимое в приложении "Параметры" .PARAMETER Hide Hide suggested content in the Settings app Скрывать рекомендуемое содержимое в приложении "Параметры" .PARAMETER Show Show suggested content in the Settings app Показывать рекомендуемое содержимое в приложении "Параметры" .EXAMPLE SettingsSuggestedContent -Hide .EXAMPLE SettingsSuggestedContent -Show .NOTES Current user only Только для текущего пользователя #> function SettingsSuggestedContent { param ( [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show, [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide ) switch ($PSCmdlet.ParameterSetName) { "Show" { 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 } "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-338393Enabled -PropertyType DWord -Value 1 -Force New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-353694Enabled -PropertyType DWord -Value 1 -Force New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SubscribedContent-353696Enabled -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Turn off/turn on automatic installing suggested apps Отключить/включить автоматическую установку рекомендованных приложений .PARAMETER Disable Turn off automatic installing suggested apps Отключить автоматическую установку рекомендованных приложений .PARAMETER Enable Turn on automatic installing suggested apps Включить автоматическую установку рекомендованных приложений .EXAMPLE AppsSilentInstalling -Disable .EXAMPLE AppsSilentInstalling -Enable .NOTES Current user only Только для текущего пользователя #> function AppsSilentInstalling { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SilentInstalledAppsEnabled -PropertyType DWord -Value 1 -Force } "Disable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager -Name SilentInstalledAppsEnabled -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Do not suggest/suggest ways I can finish setting up my device to get the most out of Windows Не предлагать/предлагать способы завершения настройки устройства для максимально эффективного использования Windows .PARAMETER Disable Do not suggest ways I can finish setting up my device to get the most out of Windows Не предлагать способы завершения настройки устройства для максимально эффективного использования Windows .PARAMETER Enable Suggest ways I can finish setting up my device to get the most out of Windows Предлагать способы завершения настройки устройства для максимально эффективного использования Windows .EXAMPLE WhatsNewInWindows -Disable .EXAMPLE WhatsNewInWindows -Enable .NOTES Current user only Только для текущего пользователя #> function WhatsNewInWindows { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { if (-not (Test-Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) { New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force } New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 1 -Force } "Disable" { if (-not (Test-Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) { New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force } New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Do not offer/offer tailored experiences based on the diagnostic data setting Не предлагать/предлагать персонализированные возможности, основанные на выбранном параметре диагностических данных .PARAMETER Disable Do not offer tailored experiences based on the diagnostic data setting Не предлагать персонализированные возможности, основанные на выбранном параметре диагностических данных .PARAMETER Enable Offer tailored experiences based on the diagnostic data setting Предлагать персонализированные возможности, основанные на выбранном параметре диагностических данных .EXAMPLE TailoredExperiences -Disable .EXAMPLE TailoredExperiences -Enable .NOTES Current user only Только для текущего пользователя #> function TailoredExperiences { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Privacy -Name TailoredExperiencesWithDiagnosticDataEnabled -PropertyType DWord -Value 1 -Force } "Disable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Privacy -Name TailoredExperiencesWithDiagnosticDataEnabled -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Disable/enable Bing search in the Start Menu (for the USA only) Отключить/включить поиск через Bing в меню "Пуск" (только для США) .PARAMETER Disable Disable Bing search in the Start Menu (for the USA only) Отключить поиск через Bing в меню "Пуск" (только для США) .PARAMETER Enable Enable Bing search in the Start Menu (for the USA only) Включить поиск через Bing в меню "Пуск" (только для США) .EXAMPLE BingSearch -Disable .EXAMPLE BingSearch -Enable .NOTES Current user only Только для текущего пользователя #> function BingSearch { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { if ((Get-WinHomeLocation).GeoId -eq 244) { Remove-ItemProperty -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableSearchBoxSuggestions -Force -ErrorAction SilentlyContinue } } "Disable" { if (-not (Test-Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer)) { New-Item -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force } New-ItemProperty -Path HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableSearchBoxSuggestions -PropertyType DWord -Value 1 -Force } } } #endregion Privacy & Telemetry #region UI & Personalization <# .SYNOPSIS Show/hide "This PC" on Desktop Отображать/скрывать "Этот компьютер" на рабочем столе .PARAMETER Hide Show "This PC" on Desktop Отображать "Этот компьютер" на рабочем столе .PARAMETER Show Hide "This PC" on Desktop Скрывать "Этот компьютер" на рабочем столе .EXAMPLE ThisPC -Hide .EXAMPLE ThisPC -Show .NOTES Current user only Только для текущего пользователя #> function ThisPC { param ( [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show, [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide ) switch ($PSCmdlet.ParameterSetName) { "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel -Name "{20D04FE0-3AEA-1069-A2D8-08002B30309D}" -PropertyType DWord -Value 0 -Force } "Hide" { Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel -Name "{20D04FE0-3AEA-1069-A2D8-08002B30309D}" -Force -ErrorAction SilentlyContinue } } } <# .SYNOPSIS Do not use/use check boxes to select items Не использовать/использовать флажки для выбора элементов .PARAMETER Disable Do not use check boxes to select items Не использовать флажки для выбора элементов .PARAMETER Enable Use check boxes to select items Использовать флажки для выбора элементов .EXAMPLE CheckBoxes -Disable .EXAMPLE CheckBoxes -Enable .NOTES Current user only Только для текущего пользователя #> function CheckBoxes { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name AutoCheckSelect -PropertyType DWord -Value 1 -Force } "Disable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name AutoCheckSelect -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Show/do not show hidden files, folders, and drives Отображать/не отображать скрытые файлы, папки и диски .PARAMETER Enable Show hidden files, folders, and drives Отображать скрытые файлы, папки и диски .PARAMETER Disable Do not show hidden files, folders, and drives Не отображать скрытые файлы, папки и диски .EXAMPLE HiddenItems -Enable .EXAMPLE HiddenItems -Disable .NOTES Current user only Только для текущего пользователя #> function HiddenItems { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name Hidden -PropertyType DWord -Value 1 -Force } "Disable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name Hidden -PropertyType DWord -Value 2 -Force } } } <# .SYNOPSIS Show/hide file name extensions Отображать/скрывать расширения имён файлов .PARAMETER Show Show file name extensions Отображать расширения имён файлов .PARAMETER Hide Hide file name extensions Скрывать расширения имён файлов .EXAMPLE FileExtensions -Show .EXAMPLE FileExtensions -Hide .NOTES Current user only Только для текущего пользователя #> function FileExtensions { param ( [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show, [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide ) switch ($PSCmdlet.ParameterSetName) { "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name HideFileExt -PropertyType DWord -Value 0 -Force } "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name HideFileExt -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Show/hide folder merge conflicts Отображать/скрывать конфликт слияния папок .PARAMETER Show Show folder merge conflicts Отображать конфликт слияния папок .PARAMETER Hide Hide folder merge conflicts Скрывать конфликт слияния папок .EXAMPLE MergeConflicts -Show .EXAMPLE MergeConflicts -Hide .NOTES Current user only Только для текущего пользователя #> function MergeConflicts { param ( [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show, [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide ) switch ($PSCmdlet.ParameterSetName) { "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name HideMergeConflicts -PropertyType DWord -Value 1 -Force } "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name HideMergeConflicts -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Open File Explorer to "This PC" or "Quick access" Открывать проводник для "Этот компьютер" или "Быстрый доступ" .PARAMETER ThisPC Open File Explorer to "This PC" Открывать проводник для "Этот компьютер" .PARAMETER QuickAccess Open File Explorer to "Quick access" Открывать проводник для "Быстрый доступ" .EXAMPLE OpenFileExplorerTo -ThisPC .EXAMPLE OpenFileExplorerTo -QuickAccess .NOTES Current user only Только для текущего пользователя #> function OpenFileExplorerTo { param ( [Parameter( Mandatory = $true, ParameterSetName = "ThisPC" )] [switch] $ThisPC, [Parameter( Mandatory = $true, ParameterSetName = "QuickAccess" )] [switch] $QuickAccess ) switch ($PSCmdlet.ParameterSetName) { "ThisPC" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name LaunchTo -PropertyType DWord -Value 1 -Force } "QuickAccess" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name LaunchTo -PropertyType DWord -Value 2 -Force } } } <# .SYNOPSIS Hide/show Cortana button on the taskbar Скрывать/показать кнопку Кортаны на панели задач .PARAMETER Hide Show Cortana button on the taskbar Показать кнопку Кортаны на панели задач .PARAMETER Show Hide Cortana button on the taskbar Скрывать кнопку Кортаны на панели задач .EXAMPLE CortanaButton -Hide .EXAMPLE CortanaButton -Show .NOTES Current user only Только для текущего пользователя #> function CortanaButton { param ( [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide, [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show ) switch ($PSCmdlet.ParameterSetName) { "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCortanaButton -PropertyType DWord -Value 0 -Force } "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCortanaButton -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Do not show/show sync provider notification within File Explorer Не показывать/показывать уведомления поставщика синхронизации в проводнике .PARAMETER Hide Do not show sync provider notification within File Explorer Не показывать уведомления поставщика синхронизации в проводнике .PARAMETER Show Show sync provider notification within File Explorer Показывать уведомления поставщика синхронизации в проводнике .EXAMPLE OneDriveFileExplorerAd -Hide .EXAMPLE OneDriveFileExplorerAd -Show .NOTES Current user only Только для текущего пользователя #> function OneDriveFileExplorerAd { param ( [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide, [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show ) switch ($PSCmdlet.ParameterSetName) { "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowSyncProviderNotifications -PropertyType DWord -Value 0 -Force } "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowSyncProviderNotifications -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Hide Task View button on the taskbar Скрыть кнопку Просмотра задач .PARAMETER Hide Show Task View button on the taskbar Не показывать кнопку Просмотра задач .PARAMETER Show Do not show Task View button on the taskbar Не показывать кнопку Просмотра задач .EXAMPLE TaskViewButton -Hide .EXAMPLE TaskViewButton -Show .NOTES Current user only Только для текущего пользователя #> function TaskViewButton { param ( [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide, [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show ) switch ($PSCmdlet.ParameterSetName) { "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowTaskViewButton -PropertyType DWord -Value 0 -Force } "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowTaskViewButton -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Hide/show People button on the taskbar Скрывать/показывать панель "Люди" на панели задач .PARAMETER Hide Hide People button on the taskbar Скрывать панель "Люди" на панели задач .PARAMETER Show Show People button on the taskbar Показывать панель "Люди" на панели задач .EXAMPLE PeopleTaskbar -Hide .EXAMPLE PeopleTaskbar -Show .NOTES Current user only Только для текущего пользователя #> function PeopleTaskbar { param ( [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide, [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show ) switch ($PSCmdlet.ParameterSetName) { "Hide" { 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" { 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 1 -Force } } } <# .SYNOPSIS Show/hide seconds on the taskbar clock Отображать/скрывать секунды в системных часах на панели задач .PARAMETER Hide Hide seconds on the taskbar clock Скрывать секунды в системных часах на панели задач .PARAMETER Show Show seconds on the taskbar clock Отображать секунды в системных часах на панели задач .EXAMPLE SecondsInSystemClock -Hide .EXAMPLE SecondsInSystemClock -Show .NOTES Current user only Только для текущего пользователя #> function SecondsInSystemClock { param ( [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide, [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show ) switch ($PSCmdlet.ParameterSetName) { "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowSecondsInSystemClock -PropertyType DWord -Value 0 -Force } "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowSecondsInSystemClock -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS When I snap a window, do not show/show what I can snap next to it При прикреплении окна не показывать/показывать, что можно прикрепить рядом с ним .PARAMETER Disable When I snap a window, do not show what I can snap next to it При прикреплении окна не показывать, что можно прикрепить рядом с ним .PARAMETER Enable When I snap a window, show what I can snap next to it При прикреплении окна не показывать/показывать, что можно прикрепить рядом с ним .EXAMPLE SnapAssist -Disable .EXAMPLE SnapAssist -Enable .NOTES Current user only Только для текущего пользователя #> function SnapAssist { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name SnapAssist -PropertyType DWord -Value 0 -Force } "Enable" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name SnapAssist -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Always open the file transfer dialog box in the detailed/compact mode Всегда открывать диалоговое окно передачи файлов в развернутом/свернутом виде .PARAMETER Detailed Always open the file transfer dialog box in the detailed mode Всегда открывать диалоговое окно передачи файлов в развернутом виде .PARAMETER Compact Always open the file transfer dialog box in the compact mode Всегда открывать диалоговое окно передачи файлов в развернутом виде .EXAMPLE FileTransferDialog -Detailed .EXAMPLE FileTransferDialog -Compact .NOTES Current user only Только для текущего пользователя #> function FileTransferDialog { param ( [Parameter( Mandatory = $true, ParameterSetName = "Detailed" )] [switch] $Detailed, [Parameter( Mandatory = $true, ParameterSetName = "Compact" )] [switch] $Compact ) switch ($PSCmdlet.ParameterSetName) { "Detailed" { 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 } "Compact" { 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 0 -Force } } } <# .SYNOPSIS Always expand/minimize the ribbon in the File Explorer Всегда разворачивать/сворачивать ленту в проводнике .PARAMETER Expanded Always expand the ribbon in the File Explorer Всегда разворачивать ленту в проводнике .PARAMETER Minimized Always minimize the ribbon in the File Explorer Всегда разворачивать ленту в проводнике .EXAMPLE FileExplorerRibbon -Expanded .EXAMPLE FileExplorerRibbon -Minimized .NOTES Current user only Только для текущего пользователя #> function FileExplorerRibbon { param ( [Parameter( Mandatory = $true, ParameterSetName = "Expanded" )] [switch] $Expanded, [Parameter( Mandatory = $true, ParameterSetName = "Minimized" )] [switch] $Minimized ) switch ($PSCmdlet.ParameterSetName) { "Expanded" { 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 } "Minimized" { 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 1 -Force } } } <# .SYNOPSIS Display/do not display recycle bin files delete confirmation Запрашивать/не запрашивать подтверждение на удаление файлов в корзину .PARAMETER Disable Display/do not display recycle bin files delete confirmation Запрашивать/не запрашивать подтверждение на удаление файлов в корзину .PARAMETER Enable Display/do not display recycle bin files delete confirmation Запрашивать/не запрашивать подтверждение на удаление файлов в корзину .EXAMPLE RecycleBinDeleteConfirmation -Disable .EXAMPLE RecycleBinDeleteConfirmation -Enable .NOTES Current user only Только для текущего пользователя #> function RecycleBinDeleteConfirmation { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) $UpdateDesktop = @{ Namespace = "WinAPI" Name = "UpdateDesktop" Language = "CSharp" MemberDefinition = @" private static readonly IntPtr hWnd = new IntPtr(65535); private const int Msg = 273; // Virtual key ID of the F5 in File Explorer // Виртуальный код клавиши F5 в проводнике private static readonly UIntPtr UIntPtr = new UIntPtr(41504); [DllImport("user32.dll", SetLastError=true)] public static extern int PostMessageW(IntPtr hWnd, uint Msg, UIntPtr wParam, IntPtr lParam); public static void PostMessage() { // F5 pressing simulation to refresh the desktop // Симуляция нажатия F5 для обновления рабочего стола PostMessageW(hWnd, Msg, UIntPtr, IntPtr.Zero); } "@ } if (-not ("WinAPI.UpdateDesktop" -as [type])) { Add-Type @UpdateDesktop } $ShellState = Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState switch ($PSCmdlet.ParameterSetName) { "Disable" { $ShellState[4] = 55 New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState -PropertyType Binary -Value $ShellState -Force } "Enable" { $ShellState[4] = 51 New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState -PropertyType Binary -Value $ShellState -Force } } # Send F5 pressing simulation to refresh the desktop # Симулировать нажатие F5 для обновления рабочего стола [WinAPI.UpdateDesktop]::PostMessage() } <# .SYNOPSIS Hide/show the "3D Objects" folder in "This PC" and "Quick access" Скрыть/отобразить папку "Объемные объекты" в "Этот компьютер" и панели быстрого доступа .PARAMETER Show Show the "3D Objects" folder in "This PC" and "Quick access" Отобразить папку "Объемные объекты" в "Этот компьютер" и панели быстрого доступа .PARAMETER Hide Hide the "3D Objects" folder in "This PC" and "Quick access" Скрыть папку "Объемные объекты" в "Этот компьютер" и панели быстрого доступа .EXAMPLE 3DObjects -Show .EXAMPLE 3DObjects -Hide .NOTES Current user only Только для текущего пользователя #> function 3DObjects { param ( [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show, [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide ) switch ($PSCmdlet.ParameterSetName) { "Hide" { 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 } "Show" { Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag" -Name ThisPCPolicy -Force -ErrorAction SilentlyContinue } } # Save all opened folders in order to restore them after File Explorer restart # Сохранить все открытые папки, чтобы восстановить их после перезапуска проводника Clear-Variable -Name OpenedFolders -Force -ErrorAction Ignore $OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() # In order for the changes to take effect the File Explorer process has to be restarted # Чтобы изменения вступили в силу, необходимо перезапустить процесс проводника Stop-Process -Name explorer -Force # Restoring closed folders # Восстановить закрытые папки foreach ($OpenedFolder in $OpenedFolders) { if (Test-Path -Path $OpenedFolder) { Invoke-Item -Path $OpenedFolder } } } <# .SYNOPSIS Hide/show frequently used folders in "Quick access" Скрывать/показывать недавно используемые папки на панели быстрого доступа .PARAMETER Show Show frequently used folders in "Quick access" Показывать недавно используемые папки на панели быстрого доступа .PARAMETER Hide Hide frequently used folders in "Quick access" Скрывать недавно используемые папки на панели быстрого доступа .EXAMPLE QuickAccessFrequentFolders -Show .EXAMPLE QuickAccessFrequentFolders -Hide .NOTES Current user only Только для текущего пользователя #> function QuickAccessFrequentFolders { param ( [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show, [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide ) switch ($PSCmdlet.ParameterSetName) { "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name ShowFrequent -PropertyType DWord -Value 0 -Force } "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name ShowFrequent -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Hide/show recently used files in Quick access Скрывать/показывать недавно использовавшиеся файлы на панели быстрого доступа .PARAMETER Show Show recently used files in Quick access Показывать недавно использовавшиеся файлы на панели быстрого доступа .PARAMETER Hide Hide recently used files in Quick access Скрывать недавно использовавшиеся файлы на панели быстрого доступа .EXAMPLE QuickAccessRecentFiles -Show .EXAMPLE QuickAccessRecentFiles -Hide .NOTES Current user only Только для текущего пользователя #> function QuickAccessRecentFiles { param ( [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show, [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide ) switch ($PSCmdlet.ParameterSetName) { "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name ShowRecent -PropertyType DWord -Value 0 -Force } "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name ShowRecent -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Hide/show the search box or search icon on the taskbar Скрыть/показать поле или значок поиска на панели задач .PARAMETER SearchBox Show the search box on the taskbar Показать поле поиска на панели задач .PARAMETER SearchIcon Show the search icon on the taskbar Показать значок поиска на панели задач .PARAMETER Hide Hide the search box on the taskbar Скрывать поле поиска на панели задач .EXAMPLE TaskbarSearch -SearchBox .EXAMPLE TaskbarSearch -SearchIcon .EXAMPLE TaskbarSearch -Hide .NOTES Current user only Только для текущего пользователя #> function TaskbarSearch { param ( [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide, [Parameter( Mandatory = $true, ParameterSetName = "ShowIcon" )] [switch] $SearchIcon, [Parameter( Mandatory = $true, ParameterSetName = "SearchBox" )] [switch] $SearchBox ) switch ($PSCmdlet.ParameterSetName) { "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search -Name SearchboxTaskbarMode -PropertyType DWord -Value 0 -Force } "SearchIcon" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search -Name SearchboxTaskbarMode -PropertyType DWord -Value 1 -Force } "SearchBox" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Search -Name SearchboxTaskbarMode -PropertyType DWord -Value 2 -Force } } } <# .SYNOPSIS Hide/show the "Windows Ink Workspace" button on the taskbar Скрывать/показать кнопку Windows Ink Workspace на панели задач .PARAMETER Show Show recently used files in Quick access Показывать недавно использовавшиеся файлы на панели быстрого доступа .PARAMETER Hide Hide recently used files in Quick access Скрывать недавно использовавшиеся файлы на панели быстрого доступа .EXAMPLE WindowsInkWorkspace -Show .EXAMPLE WindowsInkWorkspace -Hide .NOTES Current user only Только для текущего пользователя #> function WindowsInkWorkspace { param ( [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide, [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show ) switch ($PSCmdlet.ParameterSetName) { "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\PenWorkspace -Name PenWorkspaceButtonDesiredVisibility -PropertyType DWord -Value 0 -Force } "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\PenWorkspace -Name PenWorkspaceButtonDesiredVisibility -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Always show/hide all icons in the notification area Всегда отображать/скрывать все значки в области уведомлений .PARAMETER Show Always show all icons in the notification area Всегда отображать все значки в области уведомлений .PARAMETER Hide Hide all icons in the notification area Скрывать все значки в области уведомлений .EXAMPLE TrayIcons -Show .EXAMPLE TrayIcons -Hide .NOTES Current user only Только для текущего пользователя #> function TrayIcons { param ( [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide, [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show ) switch ($PSCmdlet.ParameterSetName) { "Hide" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name EnableAutoTray -PropertyType DWord -Value 1 -Force } "Show" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer -Name EnableAutoTray -PropertyType DWord -Value 0 -Force } } } # Unpin "Microsoft Edge" and "Microsoft Store" from the taskbar (current user only) # Открепить Microsoft Edge и Microsoft Store от панели задач (только для текущего пользователя) function UnpinTaskbarEdgeStore { $Signature = @{ Namespace = "WinAPI" Name = "GetStr" Language = "CSharp" MemberDefinition = @" // https://github.com/Disassembler0/Win10-Initial-Setup-Script/issues/8#issue-227159084 [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 } # Extract the "Unpin from taskbar" string from shell32.dll # Извлечь строку "Открепить от панели задач" из shell32.dll $LocalizedString = [WinAPI.GetStr]::GetString(5387) $Apps = (New-Object -ComObject Shell.Application).NameSpace("shell:::{4234d49b-0245-4df3-b780-3893943456e1}").Items() $Apps | Where-Object -FilterScript {$_.Path -eq "MSEdge"} | ForEach-Object -Process {$_.Verbs() | Where-Object -FilterScript {$_.Name -eq $LocalizedString} | ForEach-Object -Process {$_.DoIt()}} $Apps | Where-Object -FilterScript {$_.Name -eq "Microsoft Store"} | ForEach-Object -Process {$_.Verbs() | Where-Object -FilterScript {$_.Name -eq $LocalizedString} | ForEach-Object -Process {$_.DoIt()}} } <# .SYNOPSIS View the Control Panel icons by: large icons/category Просмотр иконок Панели управления как: крупные значки/категория .PARAMETER LargeIcons View the Control Panel icons by: large icons Просмотр иконок Панели управления как: крупные значки .PARAMETER Category View the Control Panel icons by: category Просмотр иконок Панели управления как: категория .EXAMPLE ControlPanelView -LargeIcons .EXAMPLE ControlPanelView -Category .NOTES Current user only Только для текущего пользователя #> function ControlPanelView { param ( [Parameter( Mandatory = $true, ParameterSetName = "LargeIcons" )] [switch] $LargeIcons, [Parameter( Mandatory = $true, ParameterSetName = "Category" )] [switch] $Category ) switch ($PSCmdlet.ParameterSetName) { "LargeIcons" { 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 } "Category" { 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 0 -Force } } } <# .SYNOPSIS Set the Windows mode color scheme to the light/dark Установить режим цвета для Windows на светлый/темный .PARAMETER Light Set the Windows mode color scheme to the light Установить режим цвета для Windows на светлый .PARAMETER Dark Set the Windows mode color scheme to the dark Установить режим цвета для Windows на темный .EXAMPLE WindowsColorScheme -Light .EXAMPLE WindowsColorScheme -Dark .NOTES Current user only Только для текущего пользователя #> function WindowsColorScheme { param ( [Parameter( Mandatory = $true, ParameterSetName = "Light" )] [switch] $Light, [Parameter( Mandatory = $true, ParameterSetName = "Dark" )] [switch] $Dark ) switch ($PSCmdlet.ParameterSetName) { "Light" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name SystemUsesLightTheme -PropertyType DWord -Value 1 -Force } "Dark" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name SystemUsesLightTheme -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Set the default app mode color scheme to the light/dark Установить цвет режима приложений по умолчанию на светлый/темный .PARAMETER Light Set the default app mode color scheme to the light Установить цвет режима приложений по умолчанию на светлый .PARAMETER Dark Set the default app mode color scheme to the dark Установить цвет режима приложений по умолчанию на темный .EXAMPLE AppMode -Light .EXAMPLE AppMode -Dark .NOTES Current user only Только для текущего пользователя #> function AppMode { param ( [Parameter( Mandatory = $true, ParameterSetName = "Light" )] [switch] $Light, [Parameter( Mandatory = $true, ParameterSetName = "Dark" )] [switch] $Dark ) switch ($PSCmdlet.ParameterSetName) { "Light" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -PropertyType DWord -Value 1 -Force } "Dark" { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Hide/show the "New App Installed" indicator Скрывать/показывать уведомление "Установлено новое приложение" .PARAMETER Hide Hide the "New App Installed" indicator Скрывать уведомление "Установлено новое приложение" .PARAMETER Show Show the "New App Installed" indicator Показывать уведомление "Установлено новое приложение" .EXAMPLE NewAppInstalledNotification -Hide .EXAMPLE NewAppInstalledNotification -Show .NOTES Current user only Только для текущего пользователя #> function NewAppInstalledNotification { param ( [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide, [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show ) switch ($PSCmdlet.ParameterSetName) { "Hide" { 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 } "Show" { 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 0 -Force } } } <# .SYNOPSIS Hide user/show first sign-in animation after the upgrade Скрывать/показывать анимацию при первом входе в систему после обновления .PARAMETER Hide Hide user/show first sign-in animation after the upgrade Скрывать/показывать анимацию при первом входе в систему после обновления .PARAMETER Show Hide user/show first sign-in animation after the upgrade Скрывать/показывать анимацию при первом входе в систему после обновления .EXAMPLE FirstLogonAnimation -Disable .EXAMPLE FirstLogonAnimation -Enable .NOTES Current user only Только для текущего пользователя #> function FirstLogonAnimation { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -PropertyType DWord -Value 0 -Force } "Enable" { New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Set the quality factor of the JPEG desktop wallpapers to maximum/default Установить коэффициент качества обоев рабочего стола в формате JPEG на максимальный/по умолчанию .PARAMETER Max Set the quality factor of the JPEG desktop wallpapers to maximum Установить коэффициент качества обоев рабочего стола в формате JPEG на максимальный .PARAMETER Default Set the quality factor of the JPEG desktop wallpapers to default Установить коэффициент качества обоев рабочего стола в формате JPEG на значение по умолчанию .EXAMPLE JPEGWallpapersQuality -Max .EXAMPLE JPEGWallpapersQuality -Default .NOTES Current user only Только для текущего пользователя #> function JPEGWallpapersQuality { param ( [Parameter( Mandatory = $true, ParameterSetName = "Max" )] [switch] $Max, [Parameter( Mandatory = $true, ParameterSetName = "Default" )] [switch] $Default ) switch ($PSCmdlet.ParameterSetName) { "Max" { New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name JPEGImportQuality -PropertyType DWord -Value 100 -Force } "Default" { Remove-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name JPEGImportQuality -Force -ErrorAction SilentlyContinue } } } <# .SYNOPSIS Start Task Manager in the expanded/compact mode Запускать Диспетчера задач в развернутом/свернутом виде .PARAMETER Expanded Start Task Manager in the expanded mode Запускать Диспетчера задач в развернутом виде .PARAMETER Compact Start Task Manager in the compact mode Запускать Диспетчера задач в свернутом виде .EXAMPLE TaskManagerWindow -Expanded .EXAMPLE TaskManagerWindow -Compact .NOTES Current user only Только для текущего пользователя #> function TaskManagerWindow { param ( [Parameter( Mandatory = $true, ParameterSetName = "Expanded" )] [switch] $Expanded, [Parameter( Mandatory = $true, ParameterSetName = "Compact" )] [switch] $Compact ) $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 -ErrorAction Ignore switch ($PSCmdlet.ParameterSetName) { "Expanded" { $Preferences.Preferences[28] = 0 New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\TaskManager -Name Preferences -PropertyType Binary -Value $Preferences.Preferences -Force } "Compact" { $Preferences.Preferences[28] = 1 New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\TaskManager -Name Preferences -PropertyType Binary -Value $Preferences.Preferences -Force } } } <# .SYNOPSIS Show/hide a notification when your PC requires a restart to finish updating Показывать/скрывать уведомление, когда компьютеру требуется перезагрузка для завершения обновления .PARAMETER Hide Hide a notification when your PC requires a restart to finish updating Скрывать уведомление, когда компьютеру требуется перезагрузка для завершения обновления .PARAMETER Show Show a notification when your PC requires a restart to finish updating Показывать уведомление, когда компьютеру требуется перезагрузка для завершения обновления .EXAMPLE RestartNotification -Hide .EXAMPLE RestartNotification -Show .NOTES Current user only Только для текущего пользователя #> function RestartNotification { param ( [Parameter( Mandatory = $true, ParameterSetName = "Hide" )] [switch] $Hide, [Parameter( Mandatory = $true, ParameterSetName = "Show" )] [switch] $Show ) switch ($PSCmdlet.ParameterSetName) { "Hide" { New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -Name RestartNotificationsAllowed2 -PropertyType DWord -Value 0 -Force } "Show" { New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings -Name RestartNotificationsAllowed2 -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Do not add/add the "- Shortcut" suffix to the file name of created shortcuts Нe дoбaвлять/добавлять "- яpлык" к имени coздaвaeмых яpлыков .PARAMETER Disable Do not add the "- Shortcut" suffix to the file name of created shortcuts Нe дoбaвлять "- яpлык" к имени coздaвaeмых яpлыков .PARAMETER Enable Add the "- Shortcut" suffix to the file name of created shortcuts Добавлять "- яpлык" к имени coздaвaeмых яpлыков .EXAMPLE ShortcutsSuffix -Disable .EXAMPLE ShortcutsSuffix -Enable .NOTES Current user only Только для текущего пользователя #> function ShortcutsSuffix { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\NamingTemplates)) { New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\NamingTemplates -Force } New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\NamingTemplates -Name ShortcutNameTemplate -PropertyType String -Value "%s.lnk" -Force } "Enable" { Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\NamingTemplates -Name ShortcutNameTemplate -Force -ErrorAction SilentlyContinue } } } <# .SYNOPSIS Use/do not use the PrtScn button to open screen snipping Использовать/не использовать кнопку PRINT SCREEN, чтобы запустить функцию создания фрагмента экрана .PARAMETER Disable Use the PrtScn button to open screen snipping Использовать кнопку PRINT SCREEN, чтобы запустить функцию создания фрагмента экрана .PARAMETER Enable Do not use the PrtScn button to open screen snipping Не использовать кнопку PRINT SCREEN, чтобы запустить функцию создания фрагмента экрана .EXAMPLE PrtScnSnippingTool -Disable .EXAMPLE PrtScnSnippingTool -Enable .NOTES Current user only Только для текущего пользователя #> function PrtScnSnippingTool { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { New-ItemProperty -Path "HKCU:\Control Panel\Keyboard" -Name PrintScreenKeyForSnippingEnabled -PropertyType DWord -Value 0 -Force } "Enable" { New-ItemProperty -Path "HKCU:\Control Panel\Keyboard" -Name PrintScreenKeyForSnippingEnabled -PropertyType DWord -Value 1 -Force } } } #endregion UI & Personalization #region OneDrive # Uninstall OneDrive # Удалить OneDrive function UninstallOneDrive { [string]$UninstallString = Get-Package -Name "Microsoft OneDrive" -ProviderName Programs -ErrorAction Ignore | ForEach-Object -Process {$_.Meta.Attributes["UninstallString"]} if ($UninstallString) { Write-Verbose -Message $Localization.OneDriveUninstalling -Verbose Stop-Process -Name OneDrive -Force -ErrorAction Ignore Stop-Process -Name OneDriveSetup -Force -ErrorAction Ignore Stop-Process -Name FileCoAuth -Force -ErrorAction Ignore # Getting link to the OneDriveSetup.exe and its' argument(s) # Получаем ссылку на OneDriveSetup.exe и его аргумент(ы) [string[]]$OneDriveSetup = ($UninstallString -Replace("\s*/",",/")).Split(",").Trim() if ($OneDriveSetup.Count -eq 2) { Start-Process -FilePath $OneDriveSetup[0] -ArgumentList $OneDriveSetup[1..1] -Wait } else { Start-Process -FilePath $OneDriveSetup[0] -ArgumentList $OneDriveSetup[1..2] -Wait } # Getting the OneDrive user folder path # Получаем путь до папки пользователя OneDrive $OneDriveUserFolder = Get-ItemPropertyValue -Path HKCU:\Environment -Name OneDrive if ((Get-ChildItem -Path $OneDriveUserFolder | Measure-Object).Count -eq 0) { Remove-Item -Path $OneDriveUserFolder -Recurse -Force } else { $Message = Invoke-Command -ScriptBlock ([ScriptBlock]::Create($Localization.OneDriveNotEmptyFolder)) Write-Error -Message $Message -ErrorAction SilentlyContinue Invoke-Item -Path $OneDriveUserFolder } Remove-ItemProperty -Path HKCU:\Environment -Name OneDrive, OneDriveConsumer -Force -ErrorAction Ignore Remove-Item -Path HKCU:\SOFTWARE\Microsoft\OneDrive -Recurse -Force -ErrorAction Ignore Remove-Item -Path HKLM:\SOFTWARE\WOW6432Node\Microsoft\OneDrive -Recurse -Force -ErrorAction Ignore Remove-Item -Path "$env:ProgramData\Microsoft OneDrive" -Recurse -Force -ErrorAction Ignore Remove-Item -Path $env:SystemDrive\OneDriveTemp -Recurse -Force -ErrorAction Ignore Unregister-ScheduledTask -TaskName *OneDrive* -Confirm:$false # Getting the OneDrive folder path # Получаем путь до папки OneDrive $OneDriveFolder = Split-Path -Path (Split-Path -Path $OneDriveSetup[0] -Parent) # Save all opened folders in order to restore them after File Explorer restarting # Сохранить все открытые папки, чтобы восстановить их после перезапуска проводника Clear-Variable -Name OpenedFolders -Force -ErrorAction Ignore $OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() # Terminate File Explorer process # Завершить процесс проводника TASKKILL /F /IM explorer.exe # Attempt to unregister FileSyncShell64.dll and remove # Попытка разрегистрировать FileSyncShell64.dll и удалить $FileSyncShell64dlls = Get-ChildItem -Path "$OneDriveFolder\*\amd64\FileSyncShell64.dll" -Force foreach ($FileSyncShell64dll in $FileSyncShell64dlls.FullName) { Start-Process -FilePath regsvr32.exe -ArgumentList "/u /s $FileSyncShell64dll" -Wait Remove-Item -Path $FileSyncShell64dll -Force -ErrorAction Ignore if (Test-Path -Path $FileSyncShell64dll) { $Message = Invoke-Command -ScriptBlock ([ScriptBlock]::Create($Localization.OneDriveFileSyncShell64dllBlocked)) Write-Error -Message $Message -ErrorAction SilentlyContinue } } # Restoring closed folders # Восстановляем закрытые папки Start-Process -FilePath explorer foreach ($OpenedFolder in $OpenedFolders) { if (Test-Path -Path $OpenedFolder) { Invoke-Item -Path $OpenedFolder } } Remove-Item -Path $OneDriveFolder -Recurse -Force -ErrorAction Ignore Remove-Item -Path $env:LOCALAPPDATA\OneDrive -Recurse -Force -ErrorAction Ignore Remove-Item -Path $env:LOCALAPPDATA\Microsoft\OneDrive -Recurse -Force -ErrorAction Ignore Remove-Item -Path "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk" -Force -ErrorAction Ignore } } # Install OneDrive (current user only) # Установить OneDrive (только для текущего пользователя) function InstallOneDrive { $OneDrive = Get-Package -Name "Microsoft OneDrive" -ProviderName Programs -Force -ErrorAction Ignore if (-not $OneDrive) { if (Test-Path -Path $env:SystemRoot\SysWOW64\OneDriveSetup.exe) { Write-Verbose -Message $Localization.OneDriveInstalling -Verbose Start-Process -FilePath $env:SystemRoot\SysWOW64\OneDriveSetup.exe } else { # Downloading the latest OneDrive # Скачивание последней версии OneDrive try { if ((Invoke-WebRequest -Uri https://www.google.com -UseBasicParsing -DisableKeepAlive -Method Head).StatusDescription) { Write-Verbose -Message $Localization.OneDriveDownloading -Verbose [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $DownloadsFolder = Get-ItemPropertyValue -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}" $Parameters = @{ Uri = "https://go.microsoft.com/fwlink/p/?LinkID=2121808" OutFile = "$DownloadsFolder\OneDriveSetup.exe" Verbose = [switch]::Present } Invoke-WebRequest @Parameters Start-Process -FilePath "$DownloadsFolder\OneDriveSetup.exe" } } catch [System.Net.WebException] { Write-Warning -Message $Localization.NoInternetConnection } } Get-ScheduledTask -TaskName "Onedrive* Update*" | Start-ScheduledTask } } #endregion OneDrive #region System #region StorageSense <# .SYNOPSIS Turn on/turn off Storage Sense Включить/выключить Контроль памяти .PARAMETER Disable Turn off Storage Sense Выключить Контроль памяти .PARAMETER Enable Turn on off Storage Sense Включить Контроль памяти .EXAMPLE StorageSense -Disable .EXAMPLE StorageSense -Enable .NOTES Current user only Только для текущего пользователя #> function StorageSense { param ( [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable, [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) { New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force } New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 0 -Force } "Enable" { if (-not (Test-Path -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) { New-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force } New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Run Storage Sense every month/during low free disk space Запускать Контроль памяти каждый месяц/когда остается мало место на диске .PARAMETER Disable Run Storage Sense every month/during low free disk space Запускать Контроль памяти каждый месяц/когда остается мало место на диске .PARAMETER Enable Run Storage Sense every month/during low free disk space Запускать Контроль памяти каждый месяц/когда остается мало место на диске .EXAMPLE StorageSenseFrequency -Month .EXAMPLE StorageSenseFrequency -Default .NOTES Current user only Только для текущего пользователя #> function StorageSenseFrequency { param ( [Parameter( Mandatory = $true, ParameterSetName = "Month" )] [switch] $Month, [Parameter( Mandatory = $true, ParameterSetName = "Default" )] [switch] $Default ) switch ($PSCmdlet.ParameterSetName) { "Month" { if ((Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1") { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 2048 -PropertyType DWord -Value 30 -Force } } "Default" { if ((Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1") { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 2048 -PropertyType DWord -Value 0 -Force } } } } <# .SYNOPSIS Delete/do not delete temporary files that apps aren't using Удалять/не удалять временные файлы, не используемые в приложениях .PARAMETER Enable Delete temporary files that apps aren't using Удалять временные файлы, не используемые в приложениях .PARAMETER Disable Do not delete temporary files that apps aren't using Не удалять временные файлы, не используемые в приложениях .EXAMPLE StorageSenseTempFiles -Enable .EXAMPLE StorageSenseTempFiles -Disable .NOTES Current user only Только для текущего пользователя #> function StorageSenseTempFiles { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { if ((Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1") { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 04 -PropertyType DWord -Value 1 -Force } } "Disable" { if ((Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1") { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 04 -PropertyType DWord -Value 0 -Force } } } } <# .SYNOPSIS Delete/do not delete files in recycle bin if they have been there for over 30 days Удалять/не удалять файлы из корзины, если они находятся в корзине более 30 дней .PARAMETER Disable Delete files in recycle bin if they have been there for over 30 days Удалять файлы из корзины, если они находятся в корзине более 30 дней .PARAMETER Enable Do not delete files in recycle bin if they have been there for over 30 days Не удалять файлы из корзины, если они находятся в корзине более 30 дней .EXAMPLE StorageSenseRecycleBin -Enable .EXAMPLE StorageSenseRecycleBin -Disable .NOTES Current user only Только для текущего пользователя #> function StorageSenseRecycleBin { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { if ((Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1") { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 08 -PropertyType DWord -Value 1 -Force New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 256 -PropertyType DWord -Value 30 -Force } } "Disable" { if ((Get-ItemPropertyValue -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1") { New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 08 -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 256 -PropertyType DWord -Value 0 -Force } } } } #endregion StorageSense <# .SYNOPSIS Disable (if the device is not a laptop)/enable hibernation Отключить (если устройство не является ноутбуком)/включить режим гибернации .PARAMETER Disable Disable hibernation if the device is not a laptop Отключить режим гибернации, если устройство не является ноутбуком .PARAMETER Enable Enable hibernation Включить режим гибернации .EXAMPLE Hibernate -Enable .EXAMPLE Hibernate -Disable #> function Hibernate { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Enable" { POWERCFG /HIBERNATE ON } "Disable" { if ((Get-CimInstance -ClassName Win32_ComputerSystem).PCSystemType -ne 2) { POWERCFG /HIBERNATE OFF } } } } <# .SYNOPSIS Change the %TEMP% environment variable path to the %SystemDrive%\Temp/default value Изменить путь переменной среды для %TEMP% на %SystemDrive%\Temp/по умолчанию .PARAMETER SystemDrive Change the %TEMP% environment variable path to the %SystemDrive%\Temp Изменить путь переменной среды для %TEMP% на %SystemDrive%\Temp .PARAMETER Default Change the %TEMP% environment variable path to the %LOCALAPPDATA%\Temp Изменить путь переменной среды для %TEMP% на %LOCALAPPDATA%\Temp .EXAMPLE TempPath -SystemDrive .EXAMPLE TempPath -Default .NOTES Machine-wide Для всех пользователей #> function TempPath { param ( [Parameter( Mandatory = $true, ParameterSetName = "SystemDrive" )] [switch] $SystemDrive, [Parameter( Mandatory = $true, ParameterSetName = "Default" )] [switch] $Default ) switch ($PSCmdlet.ParameterSetName) { "SystemDrive" { if (-not (Test-Path -Path $env:SystemDrive\Temp)) { New-Item -Path $env:SystemDrive\Temp -ItemType Directory -Force } [Environment]::SetEnvironmentVariable("TMP", "$env:SystemDrive\Temp", "User") [Environment]::SetEnvironmentVariable("TMP", "$env:SystemDrive\Temp", "Machine") [Environment]::SetEnvironmentVariable("TMP", "$env:SystemDrive\Temp", "Process") New-ItemProperty -Path HKCU:\Environment -Name TMP -PropertyType ExpandString -Value $env:SystemDrive\Temp -Force [Environment]::SetEnvironmentVariable("TEMP", "$env:SystemDrive\Temp", "User") [Environment]::SetEnvironmentVariable("TEMP", "$env:SystemDrive\Temp", "Machine") [Environment]::SetEnvironmentVariable("TEMP", "$env:SystemDrive\Temp", "Process") New-ItemProperty -Path HKCU:\Environment -Name TEMP -PropertyType ExpandString -Value $env:SystemDrive\Temp -Force New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name TMP -PropertyType ExpandString -Value $env:SystemDrive\Temp -Force New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name TEMP -PropertyType ExpandString -Value $env:SystemDrive\Temp -Force # Restart the Printer Spooler service (Spooler) # Перезапустить службу "Диспетчер печати" (Spooler) Restart-Service -Name Spooler -Force Stop-Process -Name OneDrive -Force -ErrorAction Ignore Stop-Process -Name FileCoAuth -Force -ErrorAction Ignore Remove-Item -Path $env:SystemRoot\Temp -Recurse -Force -ErrorAction Ignore Get-Item -Path $env:LOCALAPPDATA\Temp | Where-Object -FilterScript {$_.LinkType -ne "SymbolicLink"} | Remove-Item -Recurse -Force -ErrorAction Ignore # Create a symbolic link to the %SystemDrive%\Temp folder # Создать символическую ссылку к папке %SystemDrive%\Temp try { New-Item -Path $env:LOCALAPPDATA\Temp -ItemType SymbolicLink -Value $env:SystemDrive\Temp -Force } catch [System.Exception] { $Message = Invoke-Command -ScriptBlock ([ScriptBlock]::Create($Localization.LOCALAPPDATANotEmpty)) Write-Error -Message $Message -ErrorAction SilentlyContinue } finally { Invoke-Item -Path $env:LOCALAPPDATA\Temp } } "Default" { # Remove a symbolic link to the %SystemDrive%\Temp folder # Удалить символическую ссылку к папке %SystemDrive%\Temp (Get-Item -Path $env:LOCALAPPDATA\Temp -Force).Delete() if (-not (Test-Path -Path $env:SystemRoot\Temp)) { New-Item -Path $env:SystemRoot\Temp } if (-not (Test-Path -Path $env:LOCALAPPDATA\Temp)) { New-Item -Path $env:LOCALAPPDATA\Temp -ItemType Directory -Force } [Environment]::SetEnvironmentVariable("TMP", "$env:LOCALAPPDATA\Temp", "User") [Environment]::SetEnvironmentVariable("TMP", "$env:SystemRoot\TEMP", "Machine") [Environment]::SetEnvironmentVariable("TMP", "$env:LOCALAPPDATA\Temp", "Process") New-ItemProperty -Path HKCU:\Environment -Name TMP -PropertyType ExpandString -Value $env:LOCALAPPDATA\Temp -Force [Environment]::SetEnvironmentVariable("TEMP", "$env:LOCALAPPDATA\Temp", "User") [Environment]::SetEnvironmentVariable("TEMP", "$env:SystemRoot\TEMP", "Machine") [Environment]::SetEnvironmentVariable("TEMP", "$env:LOCALAPPDATA\Temp", "Process") New-ItemProperty -Path HKCU:\Environment -Name TEMP -PropertyType ExpandString -Value $env:LOCALAPPDATA\Temp -Force New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name TMP -PropertyType ExpandString -Value $env:SystemRoot\TEMP -Force New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name TEMP -PropertyType ExpandString -Value $env:SystemRoot\TEMP -Force # Restart the Printer Spooler service (Spooler) # Перезапустить службу "Диспетчер печати" (Spooler) Restart-Service -Name Spooler -Force Stop-Process -Name OneDrive -Force -ErrorAction Ignore Stop-Process -Name FileCoAuth -Force -ErrorAction Ignore Remove-Item -Path $env:SystemDrive\Temp -Recurse -Force -ErrorAction Ignore } } } <# .SYNOPSIS Disable/enable Windows 260 character path limit Выключить/включить ограничение Windows на 260 символов в пути .PARAMETER Disable Disable Windows 260 character path limit Включить ограничение Windows на 260 символов в пути .PARAMETER Enable Enable Windows 260 character path limit Включить ограничение Windows на 260 символов в пути .EXAMPLE Win32LongPathLimit -Disable .EXAMPLE Win32LongPathLimit -Enable #> function Win32LongPathLimit { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name LongPathsEnabled -PropertyType DWord -Value 1 -Force } "Enable" { New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem -Name LongPathsEnabled -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Display/do not dispaly the Stop error information on the BSoD Отображать/не отображать Stop-ошибку при появлении BSoD .PARAMETER Disable Disable Windows 260 character path limit Включить ограничение Windows на 260 символов в пути .PARAMETER Enable Enable Windows 260 character path limit Включить ограничение Windows на 260 символов в пути .EXAMPLE BSoDStopError -Disable .EXAMPLE BSoDStopError -Enable #> function BSoDStopError { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl -Name DisplayParameters -PropertyType DWord -Value 0 -Force } "Enable" { New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl -Name DisplayParameters -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Change "Behavior of the elevation prompt for administrators in Admin Approval Mode" to "Elevate without prompting"/"Prompt for consent for non-Windows binaries" Изменить "Поведение запроса на повышение прав для администраторов в режиме одобрения администратором" на "Повышение прав без запроса"/"Запрос согласия для исполняемых файлов, отличных от Windows" .PARAMETER Disable Change "Behavior of the elevation prompt for administrators in Admin Approval Mode" to "Elevate without prompting" Изменить "Поведение запроса на повышение прав для администраторов в режиме одобрения администратором" на "Повышение прав без запроса" .PARAMETER Enable Change "Behavior of the elevation prompt for administrators in Admin Approval Mode" to "Prompt for consent for non-Windows binaries" Изменить "Поведение запроса на повышение прав для администраторов в режиме одобрения администратором" на "Запрос согласия для исполняемых файлов, отличных от Windows" .EXAMPLE AdminApprovalMode -Disable .EXAMPLE AdminApprovalMode -Enable #> function AdminApprovalMode { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name ConsentPromptBehaviorAdmin -PropertyType DWord -Value 0 -Force } "Enable" { New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name ConsentPromptBehaviorAdmin -PropertyType DWord -Value 5 -Force } } } <# .SYNOPSIS Turn on/turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled Включить/выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами .PARAMETER Disable Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled Выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами .PARAMETER Enable Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами .EXAMPLE MappedDrivesAppElevatedAccess -Disable .EXAMPLE MappedDrivesAppElevatedAccess -Enable #> function MappedDrivesAppElevatedAccess { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 0 -Force } "Enable" { New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Opt-out of/opt-in to the Delivery Optimization-assisted updates downloading Выключить/включить загрузку обновлений с помощью оптимизации доставки .PARAMETER Disable Opt-out of to the Delivery Optimization-assisted updates downloading Отказаться от загрузки обновлений с помощью оптимизации доставки .PARAMETER Enable Opt-in to the Delivery Optimization-assisted updates downloading Включить загрузку обновлений с помощью оптимизации доставки .EXAMPLE DeliveryOptimization -Disable .EXAMPLE DeliveryOptimization -Enable #> function DeliveryOptimization { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { New-ItemProperty -Path Registry::HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Settings -Name DownloadMode -PropertyType DWord -Value 0 -Force Delete-DeliveryOptimizationCache -Force } "Enable" { New-ItemProperty -Path Registry::HKEY_USERS\S-1-5-20\SOFTWARE\Microsoft\Windows\CurrentVersion\DeliveryOptimization\Settings -Name DownloadMode -PropertyType DWord -Value 1 -Force } } } <# .SYNOPSIS Always/never wait for the network at computer startup and logon for workgroup networks Всегда/никогда не ждать сеть при запуске и входе в систему для рабочих групп .PARAMETER Disable Never wait for the network at computer startup and logon for workgroup networks Никогда не ждать сеть при запуске и входе в систему для рабочих групп .PARAMETER Enable Always wait for the network at computer startup and logon for workgroup networks Всегда ждать сеть при запуске и входе в систему для рабочих групп .EXAMPLE WaitNetworkStartup -Disable .EXAMPLE WaitNetworkStartup -Enable #> function WaitNetworkStartup { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { if ((Get-CimInstance -ClassName CIM_ComputerSystem).PartOfDomain -eq $true) { Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name SyncForegroundPolicy -Force -ErrorAction SilentlyContinue } } "Enable" { if ((Get-CimInstance -ClassName CIM_ComputerSystem).PartOfDomain -eq $true) { 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 } } } } <# .SYNOPSIS Do not let/let Windows decide which printer should be the default one Не разрешать/разрешать Windows решать, какой принтер должен использоваться по умолчанию .PARAMETER Disable Do not let Windows decide which printer should be the default one Не разрешать Windows решать, какой принтер должен использоваться по умолчанию .PARAMETER Enable Let Windows decide which printer should be the default one Разрешать Windows решать, какой принтер должен использоваться по умолчанию .EXAMPLE WindowsManageDefaultPrinter -Disable .EXAMPLE WindowsManageDefaultPrinter -Enable .NOTES Current user only Только для текущего пользователя #> function WindowsManageDefaultPrinter { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) switch ($PSCmdlet.ParameterSetName) { "Disable" { New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" -Name LegacyDefaultPrinterMode -PropertyType DWord -Value 1 -Force } "Enable" { New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" -Name LegacyDefaultPrinterMode -PropertyType DWord -Value 0 -Force } } } <# .SYNOPSIS Disable/enable the following Windows features Отключить/включить следующие компоненты Windows .PARAMETER Disable Disable the following Windows features Отключить следующие компоненты Windows .PARAMETER Enable Enable the following Windows features Включить следующие компоненты Windows .EXAMPLE WindowsFeatures -Disable .EXAMPLE WindowsFeatures -Enable .NOTES Current user only Только для текущего пользователя #> function WindowsFeatures { param ( [Parameter( Mandatory = $true, ParameterSetName = "Enable" )] [switch] $Enable, [Parameter( Mandatory = $true, ParameterSetName = "Disable" )] [switch] $Disable ) $WindowsOptionalFeatures = @( # Legacy Components # Компоненты прежних версий "LegacyComponents", # Media Features # Компоненты работы с мультимедиа "MediaPlayback", # PowerShell 2.0 "MicrosoftWindowsPowerShellV2", "MicrosoftWindowsPowershellV2Root", # Microsoft XPS Document Writer # Средство записи XPS-документов (Microsoft) "Printing-XPSServices-Features", # Work Folders Client # Клиент рабочих папок "WorkFolders-Client" ) switch ($PSCmdlet.ParameterSetName) { "Disable" { Disable-WindowsOptionalFeature -Online -FeatureName $WindowsOptionalFeatures -NoRestart } "Enable" { Enable-WindowsOptionalFeature -Online -FeatureName $WindowsOptionalFeatures -NoRestart } } } # Disable the following Feature On Demand v2 (FODv2) capabilities # Отключить следующие компоненты "Функции по требованию" (FODv2) function DisableWindowsCapabilities { Add-Type -AssemblyName PresentationCore, PresentationFramework #region Variables # Initialize an array list to store the FODv2 items to remove # Создать массив имен дополнительных компонентов для удаления $Capabilities = New-Object -TypeName System.Collections.ArrayList($null) # The following FODv2 items will have their checkboxes checked, recommending the user to remove them # Следующие дополнительные компоненты будут иметь чекбоксы отмеченными. Рекомендуются к удалению $CheckedCapabilities = @( # Steps Recorder # Средство записи действий "App.StepsRecorder*", # Microsoft Quick Assist # Быстрая поддержка (Майкрософт) "App.Support.QuickAssist*", # Windows Media Player # Проигрыватель Windows Media "Media.WindowsMediaPlayer*", # Microsoft Paint "Microsoft.Windows.MSPaint*", # WordPad "Microsoft.Windows.WordPad*", # Integrated faxing and scanning application for Windows # Факсы и сканирование Windows "Print.Fax.Scan*" ) # If device is not a laptop disable "Hello.Face*" too # Если устройство не является ноутбуком, отключить также и "Hello.Face" if ((Get-CimInstance -ClassName Win32_ComputerSystem).PCSystemType -ne 2) { # Windows Hello Face $CheckedCapabilities += "Hello.Face*" } # The following FODv2 items will be shown, but their checkboxes would be clear # Следующие дополнительные компоненты будут видны, но их чекбоксы не будут отмечены $ExcludedCapabilities = @( # The DirectX Database to configure and optimize apps when multiple Graphics Adapters are present # База данных DirectX для настройки и оптимизации приложений при наличии нескольких графических адаптеров "DirectX\.Configuration\.Database", # Language components # Языковые компоненты "Language\.", # Notepad # Блокнот "Microsoft.Windows.Notepad*", # Mail, contacts, and calendar sync component # Компонент синхронизации почты, контактов и календаря "OneCoreUAP\.OneSync", # Management of printers, printer drivers, and printer servers # Управление принтерами, драйверами принтеров и принт-серверами "Print\.Management\.Console", # Features critical to Windows functionality # Компоненты, критичные для работоспособности Windows "Windows\.Client\.ShellComponents" ) #endregion Variables #region XAML Markup # The section defines the design of the upcoming dialog box # Раздел, определяющий форму диалогового окна [xml]$XAML = '