Last active
October 9, 2023 09:30
-
-
Save leporel/2c0eb9aa059aad0eb0a5f2026dd1c372 to your computer and use it in GitHub Desktop.
windows-setup
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## | |
# Windows 10/11 | |
# | |
# Для начала, выполните команду `"Set-ExecutionPolicy RemoteSigned`", после вы сможите запустить скрипт. | |
# После всех действий, можете вернуть как было `"Restricted`" вместо RemoteSigned | |
# | |
# Для режима применения настроек требуется выполнять этот скрипт с правами администратора. | |
## | |
#Requires -RunAsAdministrator | |
#Requires -Version 5.1 | |
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Подолжить" | |
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "Прекратить" | |
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no) | |
$decision = $host.ui.PromptForChoice("Предупреждение:", "Для запуска скрипта требуются права администратора, сам пользователь должен быть администратором, | |
иначе настройки применятся тому пользователю, от имени которого запущен скрипт, продолжить?", $options, 1) | |
if ($decision -eq 1) { | |
return | |
} | |
## Функция для проверки установки winget | |
function CheckWingetInstall{ | |
try { | |
$wingetVersion = winget --version | |
Write-Host "Winget установлен. Версия: $wingetVersion" | |
} catch { | |
Write-Host "Winget не установлен, скачиваем нужные компоненты..." | |
## C++ Runtime framework packages | |
Write-Host "Установка C++ библиотек для компонентов windows." | |
Add-AppxPackage 'https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx' | |
Add-AppxPackage 'https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx' | |
Invoke-WebRequest https://www.nuget.org/api/v2/package/Microsoft.UI.Xaml/2.7.1 -OutFile ".\UI.Xaml.zip" | |
Expand-Archive .\UI.Xaml.zip -DestinationPath ".\uixaml" | |
Add-AppxPackage -Path ".\uixaml\tools\AppX\x64\Release\Microsoft.UI.Xaml.2.7.appx" | |
Remove-Item .\uixaml\ -Recurse | |
Remove-Item .\UI.Xaml.zip | |
Add-AppxPackage 'https://github.com/microsoft/winget-cli/releases/download/v1.5.1881/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle' | |
$wingetVersion = winget --version | |
Write-Host "Winget установлен. Версия: $wingetVersion" | |
} | |
} | |
## Функция для проверки и установки значений в реестр | |
function SetRegistryValue { | |
param( | |
[string]$RegistryPath, | |
[string]$Name, | |
[string]$Value, | |
[string]$Description, | |
[switch]$Force, | |
[switch]$Ask | |
) | |
# Если параметр -Ask указан, запрашиваем разрешение у пользователя | |
if ($Ask) { | |
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Yes" | |
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "No" | |
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no) | |
$decision = $host.ui.PromptForChoice("Подтверждение настройки:", "$Description", $options, 1) | |
if ($decision -eq 1) { | |
Write-Host "...пропущено пользователем" | |
return | |
} | |
} else { | |
Write-Host "---------`n $Description" | |
} | |
# Если параметр -Force указан, создаем указанный путь в реестре, если он не существует | |
if ($Force -and -not (Test-Path $RegistryPath)) { | |
New-Item -Path $RegistryPath -Force | Out-Null | |
} | |
if (Test-Path $RegistryPath) { | |
Set-ItemProperty -Path $RegistryPath -Name $Name -Value $Value | |
Write-Host "...ok" | |
} else { | |
Write-Host "...указанный $RegistryPath путь в реестре не существует." | |
} | |
Write-Host "" | |
} | |
#################################### | |
# Удаление программ | |
#################################### | |
function RemoveGarbage{ | |
## Проверка установки winget | |
CheckWingetInstall | |
# Получаем список программ | |
$Apps = DISM /Online /Get-ProvisionedAppxPackages | Select-String Packagename | ForEach-Object {$_ -replace "PackageName : ", ""} | Select-String "^((?!WindowsStore).)*$" | Select-String "^((?!DesktopAppInstaller).)*$" | |
# Выводим список программ для удаления | |
Write-Host "`nНайдены стандартные пакеты программ:`n----------------------------" | |
$Apps | ForEach-Object { Write-Host $_} | |
Write-Host "----------------------------" | |
# Запрашиваем у пользователя разрешение на удаление программ | |
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Yes" | |
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "No" | |
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no) | |
$decision = $host.ui.PromptForChoice("Подтверждение", "Вы хотите удалить указанные программы?", $options, 1) | |
# Если пользователь выбрал "Yes" (или ввод - 0), удаляем программы | |
if ($decision -eq 0) { | |
$Apps | ForEach-Object { Remove-AppxPackage -allusers -package $_ } | |
Write-Host "Удаление стандартных пакетов завершено." | |
} else { | |
Write-Host "Удаление стандартных пакетов пропущено." | |
} | |
## Удаление не православных программ | |
Write-Host("Удаление Cortana+"); winget uninstall "Cortana" --silent --accept-source-agreements | |
Write-Host("Disney+"); winget uninstall "Disney+" --silent --accept-source-agreements | |
Write-Host("Mail and Calendar"); winget uninstall "Mail and Calendar" --silent --accept-source-agreements | |
Write-Host("Удаление Microsoft News"); winget uninstall "Microsoft News" --silent --accept-source-agreements | |
Write-Host("Удаление Microsoft OneDrive"); winget uninstall "Microsoft OneDrive" --silent --accept-source-agreements | |
Write-Host("Удаление Microsoft Tips"); winget uninstall "Microsoft Tips" --silent --accept-source-agreements | |
Write-Host("Удаление MSN Weather"); winget uninstall "MSN Weather" --silent --accept-source-agreements | |
Write-Host("Удаление Movies & TV"); winget uninstall "Movies & TV" --silent --accept-source-agreements | |
Write-Host("Удаление Office"); winget uninstall "Office" --silent --accept-source-agreements | |
Write-Host("Удаление OneDrive"); winget uninstall "OneDrive" --silent --accept-source-agreements | |
Write-Host("Удаление Spotify Music"); winget uninstall "Spotify Music" --silent --accept-source-agreements | |
Write-Host("Удаление Windows Maps"); winget uninstall "Windows Maps" --silent --accept-source-agreements | |
Write-Host("Удаление Xbox TCUI"); winget uninstall "Xbox TCUI" --silent --accept-source-agreements | |
Write-Host("Удаление Xbox Game Bar Plugin"); winget uninstall "Xbox Game Bar Plugin" --silent --accept-source-agreements | |
Write-Host("Удаление Xbox Game Bar"); winget uninstall "Xbox Game Bar" --silent --accept-source-agreements | |
Write-Host("Удаление Xbox Identity Provider"); winget uninstall "Xbox Identity Provider" --silent --accept-source-agreements | |
Write-Host("Удаление Xbox Game Speech Windows"); winget uninstall "Xbox Game Speech Windows" --silent --accept-source-agreements | |
} | |
#################################### | |
# Настрока внешнего вида для ноутбука | |
#################################### | |
function SetupVisualSettingsForNotebook{ | |
SetRegistryValue -Force -Description 'Выборочный режим визуальных эффектов' -RegistryPath 'HKCU:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects' -Name 'VisualFXSetting' -Value '3' | |
SetRegistryValue -Force -Description 'Отключаем Peek' -RegistryPath 'HKCU:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\DWM' -Name 'EnableAeroPeek' -Value '0' | |
SetRegistryValue -Force -Description 'Рабочий стол выкл TaskbarAnimations' -RegistryPath 'HKCU:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced ' -Name 'TaskbarAnimations' -Value '0' | |
SetRegistryValue -Force -Description 'Рабочий стол выкл IconsOnly' -RegistryPath 'HKCU:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced ' -Name 'IconsOnly' -Value '0' | |
SetRegistryValue -Force -Description 'Рабочий стол выкл ListviewAlphaSelect' -RegistryPath 'HKCU:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced ' -Name 'ListviewAlphaSelect' -Value '0' | |
SetRegistryValue -Force -Description 'Рабочий стол выкл ListviewShadow' -RegistryPath 'HKCU:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced ' -Name 'ListviewShadow' -Value '0' | |
$mask = "90,12,03,80,10,00,00,00" -split ',' | ForEach-Object { [byte]([convert]::ToInt32($_, 16)) } | |
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "UserPreferencesMask" -Type Binary -Value $mask | |
#DragFullWindows 0 | |
} | |
#################################### | |
# Настрока внешнего вида | |
#################################### | |
function SetupVisualSettings{ | |
SetRegistryValue -Description 'Панель задач, комбинировать программы только при переполнении' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'TaskbarGlomLevel' -Value '1' | |
SetRegistryValue -Description 'Панель задач, отображение окон на открытом мониторе' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'MMTaskbarMode' -Value '2' | |
SetRegistryValue -Description 'Панель задач, комбинировать программы только при переполнении на других мониторах' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'MMTaskbarGlomLevel' -Value '1' | |
SetRegistryValue -Description 'Панель задач, использовать маленькие иконки' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'TaskbarSmallIcons' -Value '1' | |
SetRegistryValue -Description 'Показывать расширение файлов' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'HideFileExt' -Value '0' | |
SetRegistryValue -Ask -Description 'Выключаем прозрачность таскбара' -RegistryPath 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize' -Name 'EnableTransparency' -Value '0' | |
SetRegistryValue -Description 'Унпиним кортану' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'OnboardUnpinCortana' -Value '1' | |
SetRegistryValue -Description 'Убираем значек кортаны' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'ShowCortanaButton' -Value '0' | |
SetRegistryValue -Description 'Убираем чат из таскбара' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'TaskbarMn' -Value '0' | |
SetRegistryValue -Description 'Убираем виджеты из таскбара' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'TaskbarDa' -Value '0' | |
SetRegistryValue -Description 'Убираем поиск из таскбара' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Search' -Name 'SearchboxTaskbarMode' -Value '0' | |
SetRegistryValue -Description 'Убираем значек люди из таскбара' -RegistryPath 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People' -Name 'PeopleBand' -Value '0' | |
SetRegistryValue -Description 'Открывать проводник для "Этот компьютер"' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'LaunchTo' -Value '1' | |
SetRegistryValue -Description 'Выключаем уведомления сторонних сервисов майкрософта в file explorer' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced' -Name 'ShowSyncProviderNotifications' -Value '0' | |
SetRegistryValue -Description 'Выключаем уведомления сторонних сервисов майкрософта' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion' -Name 'ShowSyncProviderNotifications' -Value '0' | |
SetRegistryValue -Force -Description 'Убираем предложения поиска из интернета в меню пуск' -RegistryPath 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Explorer' -Name 'DisableSearchBoxSuggestions ' -Value '1' | |
SetRegistryValue -Description 'ads / nonsense on the lockscreen' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' -Name 'ContentDeliveryAllowed' -Value '1' | |
SetRegistryValue -Description 'ads / nonsense on the lockscreen' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' -Name 'RotatingLockScreenEnabled' -Value '1' | |
SetRegistryValue -Description 'ads / nonsense on the lockscreen' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' -Name 'RotatingLockScreenOverlayEnabled' -Value '0' | |
SetRegistryValue -Description 'ads / nonsense on the lockscreen' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' -Name 'SubscribedContent-338387Enabled' -Value '0' | |
SetRegistryValue -Description 'ads / nonsense on the lockscreen' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' -Name 'SubscribedContent-338389Enabled' -Value '0' | |
SetRegistryValue -Description 'ads / nonsense on the lockscreen' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' -Name 'SubscribedContent-88000326Enabled' -Value '0' | |
# This will disable UAC | |
# SetRegistryValue -Description 'Отключаем назойлевое предложение создать аккаунт майкрософт' -RegistryPath 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System' -Name 'EnableLUA' -Value '0' | |
SetRegistryValue -Description 'Отключаем назойлевое предложение создать аккаунт майкрософт от дефендера' -RegistryPath 'HKCU:\Software\Microsoft\Windows Security Health\State' -Name 'AccountProtection_MicrosoftAccount_Disconnected' -Value '1' | |
SetRegistryValue -Ask -Description 'Скрывать экран приветствия Windows при входе, чтобы сообщить о новых функциях и предложениях' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager' -Name 'SubscribedContent-310093Enabled' -Value '0' | |
SetRegistryValue -Ask -Description 'Скрыть недавно использовавшиеся файлы на панели быстрого доступа' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer' -Name 'ShowRecent' -Value '0' | |
SetRegistryValue -Ask -Description 'Скрыть часто используемые папки на панели быстрого доступа' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer' -Name 'ShowFrequent' -Value '0' | |
SetRegistryValue -Ask -Description 'Включить темную тему для системы' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize' -Name 'SystemUsesLightTheme' -Value '0' | |
SetRegistryValue -Ask -Description 'Включить темную тему для приложений' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize' -Name 'AppsUseLightTheme ' -Value '0' | |
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Yes" | |
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "No" | |
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no) | |
$decision = $host.ui.PromptForChoice("`n--------`nНастройки визуальных эффектов рабочего стола", "Вы хотите отключить визуальные эфекты (для ноутбука или слабой системы)?", $options, 1) | |
if ($decision -eq 0) { | |
SetupVisualSettingsForNotebook | |
} | |
} | |
#################################### | |
# Настройка системных параметров | |
#################################### | |
function SetupDefender { | |
param( | |
[string]$Mode | |
) | |
if ([Microsoft.Win32.Registry]::GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection", "DisableBehaviorMonitoring", $null) -eq 1) | |
{ | |
$Script:DisableBehaviorMonitoring = $true | |
} | |
if ([Microsoft.Win32.Registry]::GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection", "DisableRealtimeMonitoring", $null) -eq 1) | |
{ | |
$Script:DisableRealtimeMonitoring = $true | |
} | |
if ([Microsoft.Win32.Registry]::GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender", "DisableAntiSpyware", $null) -eq 1) | |
{ | |
$Script:DisableAntiSpyware = $true | |
} | |
$Script:DefenderServices = ($Services | Where-Object -FilterScript {$_.Status -ne "running"} | Measure-Object).Count -lt $Services.Count | |
if ($Script:DefenderServices-and (-not $Script:DisableAntiSpyware) -and (-not $Script:DisableRealtimeMonitoring) -and (-not $Script:DisableBehaviorMonitoring)) | |
{ | |
# Defender is enabled | |
if ($Mode -eq "on") { | |
Set-MpPreference -PUAProtection Enabled | |
Set-MpPreference -EnableNetworkProtection Enabled | |
} | |
if ($Mode -eq "off") { | |
Set-MpPreference -DisableRealtimeMonitoring 1 | |
Set-MpPreference -DisableIOAVProtection 1 | |
} | |
} | |
else { | |
Write-Host "Defender is disablend, применить настройку не получилось" | |
} | |
} | |
function SetupSystemParameters{ | |
SetRegistryValue -Description 'Не уменьшать громкость при разговоре' -RegistryPath 'HKCU:\SOFTWARE\Microsoft\Multimedia\Audio' -Name 'UserDuckingPreference' -Value '3' | |
SetRegistryValue -Description 'Отключаем игровой оверлей' -RegistryPath 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\GameDVR' -Name 'AppCaptureEnabled' -Value '0' | |
SetRegistryValue -Description 'Отключаем GameDVR' -RegistryPath 'HKCU:\System\GameConfigStore' -Name 'GameDVR_Enabled' -Value '0' | |
SetRegistryValue -Ask -Force -Description 'Отключить автозапуск подсоеденяемых устройств' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers' -Name 'DisableAutoplay' -Value '1' | |
SetRegistryValue -Ask -Description 'Отключить автоматическое скачивание драйверов для устройств' -RegistryPath 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Device Metadata' -Name 'PreventDeviceMetadataFromNetwork' -Value '1' | |
SetRegistryValue -Description 'Выключение акселирации мыши' -RegistryPath 'HKCU:\Control Panel\Mouse' -Name 'MouseSpeed' -Value '0' | |
SetRegistryValue -Description 'Выключение акселирации мыши' -RegistryPath 'HKCU:\Control Panel\Mouse' -Name 'MouseThreshold1' -Value '0' | |
SetRegistryValue -Description 'Выключение акселирации мыши' -RegistryPath 'HKCU:\Control Panel\Mouse' -Name 'MouseThreshold2' -Value '0' | |
SetRegistryValue -Description 'Скорость по умолчанию (6 из 11)' -RegistryPath 'HKCU:\Control Panel\Mouse' -Name 'MouseSensitivity' -Value '10' | |
# Запрашивать подтверждение при удалении в корзину | |
$ShellState = Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState | |
$ShellState[4] = 51 | |
New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState -PropertyType Binary -Value $ShellState -Force | |
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Yes" | |
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "No" | |
$disable = New-Object System.Management.Automation.Host.ChoiceDescription "&Disable", "Torn off" | |
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no) | |
$decision = $host.ui.PromptForChoice("`n--------`nЗащита", "- Включить защиту сети в Microsoft Defender Exploit Guard `n- Включить обнаружение потенциально нежелательных приложений", $options, 0) | |
if ($decision -eq 0) { | |
SetupDefender -Mode "on" | |
} | |
if ($decision -eq 2) { | |
SetupDefender -Mode "off" | |
} | |
# Restart explorer | |
Get-Process -Name explorer | Stop-Process | |
start explorer.exe | |
} | |
#################################### | |
# Телеметрия | |
#################################### | |
function DisableTelemetry{ | |
SetRegistryValue -Description 'Отправка данных о рукописном/печатном вводе' -RegistryPath 'HKCU:\Software\Microsoft\Input\TIPC' -Name 'Enabled' -Value '0' | |
SetRegistryValue -Description 'Отключение отправки данных об подозрительных программах' -RegistryPath 'HKLM:\Software\Policies\Microsoft\MRT' -Name 'DontReportInfectionInformation' -Value '0' | |
SetRegistryValue -Description 'Отключение общей телеметрии' -RegistryPath 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection' -Name 'AllowTelemetry' -Value '0' | |
SetRegistryValue -Force -Description 'Отключение сбора данных для рекламы' -RegistryPath 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Privacy' -Name 'TailoredExperiencesWithDiagnosticDataEnabled' -Value '0' | |
SetRegistryValue -Force -Description 'Не разрешать приложениям использовать идентификатор рекламы' -RegistryPath 'HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo' -Name 'Enabled' -Value '0' | |
Get-Service -Name DiagTrack | Stop-Service -Force | |
Get-Service DiagTrack | Set-Service -StartupType Disabled | |
Get-Service dmwappushservice | Set-Service -StartupType Disabled | |
} | |
#################################### | |
# Установка программ | |
#################################### | |
function InstallPrograms{ | |
## Проверка установки winget | |
CheckWingetInstall | |
$programsToInstall = @() | |
$webBrowsers = @( | |
@{ Name = "Google.Chrome"; DisplayName = "Google Chrome"; Scope = ""}, | |
@{ Name = "Yandex.Browser"; DisplayName = "Yandex Browser"; Scope = "" }, | |
@{ Name = "Mozilla.Firefox"; DisplayName = "Mozilla Firefox"; Scope = "" } | |
) | |
Write-Host "Выберите веб-браузер для установки:" | |
for ($i = 0; $i -lt $webBrowsers.Count; $i++) { | |
Write-Host "$($i + 1): $($webBrowsers[$i].DisplayName)" | |
} | |
Write-Host "$($webBrowsers.Count + 1): Ничего" | |
$choice = Read-Host "Введите номер (1, 2 или 3) браузера для установки:" | |
$index = $choice - 1 | |
if ($index -ge 0 -and $index -lt $webBrowsers.Count) { | |
$selectedBrowser = $webBrowsers[$index] | |
Write-Host "Вы выбрали '$($selectedBrowser.DisplayName)'." | |
$programsToInstall += $selectedBrowser | |
} else { | |
Write-Host "Пропуск..." | |
} | |
$programs = @( | |
@{ Name = "7zip.7zip"; DisplayName = "7-Zip"; Scope = "machine" }, | |
@{ Name = "Notepad++.Notepad++"; DisplayName = "Notepad++"; Scope = "machine" }, | |
@{ Name = "qBittorrent.qBittorrent"; DisplayName = "qBittorrent"; Scope = "machine" }, | |
@{ Name = "VideoLAN.VLC"; DisplayName = "VLC"; Scope = "machine" }, | |
@{ Name = "Adobe.Acrobat.Reader.64-bit"; DisplayName = "Adobe Acrobat Reader"; Scope = "machine" }, | |
@{ Name = "TheDocumentFoundation.LibreOffice"; DisplayName = "LibreOffice"; Scope = "machine" }, | |
@{ Name = "Discord.Discord"; DisplayName = "Discord"; Scope = "" }, | |
@{ Name = "Telegram.TelegramDesktop"; DisplayName = "Telegram Desktop"; Scope = "" }, | |
@{ Name = "Valve.Steam"; DisplayName = "Steam"; Scope = "machine" }, | |
@{ Name = "CPUID.HWMonitor"; DisplayName = "CPUID HWMonitor"; Scope = "machine" }, | |
@{ Name = "WinDirStat.WinDirStat"; DisplayName = "WinDirStat"; Scope = "machine" }, | |
@{ Name = "Microsoft.PowerToys"; DisplayName = "Microsoft PowerToys"; Scope = "machine" }, | |
@{ Name = "Microsoft.PowerShell"; DisplayName = "Microsoft PowerShell"; Scope = "machine" }, | |
@{ Name = "Microsoft.WindowsTerminal"; DisplayName = "Microsoft Windows Terminal"; Scope = "" } | |
) | |
foreach ($program in $programs) { | |
$install = Read-Host "Хотите установить '$($program.DisplayName)'? (Введите 'y' или 'n')" | |
if ($install -eq "y") { | |
$programsToInstall += $program | |
} | |
} | |
if ($programsToInstall.Count -gt 0) { | |
$programsToInstall | ForEach-Object { | |
if ($_.Scope -eq "") { | |
winget install -e --source winget --id $_.Name | |
} | |
else { | |
winget install -e --source winget --id $_.Name --scope $_.Scope | |
} | |
} | |
Write-Host "Установка выбранных программ завершена." | |
} else { | |
Write-Host "Вы не выбрали программы для установки." | |
} | |
} | |
function ShowMenu { | |
Write-Host "`n--------`n" | |
Write-Host "Выберите одну из функций:" | |
Write-Host "1: Удаление стандартных программ" | |
Write-Host "2: Применение настроек" | |
Write-Host "3: Установка программ" | |
Write-Host "`n--------`n" | |
} | |
function Get-Choice { | |
$validChoices = 1..3 | |
$choice = Read-Host "Введите номер (1, 2 или 3) функции:" | |
if ($choice -in $validChoices) { | |
return $choice | |
} else { | |
Write-Host "Ошибка: Недопустимый номер. Пожалуйста, введите номер (1, 2 или 3) функции." | |
return $null | |
} | |
} | |
function Run-SelectedFunction { | |
$choice = Get-Choice | |
if ($choice) { | |
switch ($choice) { | |
1 { RemoveGarbage } | |
2 { | |
SetupVisualSettings | |
SetupSystemParameters | |
DisableTelemetry | |
Write-Host "Рабочий стол перезапущен, но всетаки лучше перезагрузить компьютер." | |
} | |
3 { InstallPrograms } | |
} | |
} else { | |
Run-SelectedFunction | |
} | |
} | |
ShowMenu | |
Run-SelectedFunction | |
Write-Host "Скрипт завершился." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment