Skip to content

Instantly share code, notes, and snippets.

@leporel
Last active October 9, 2023 09:30
Show Gist options
  • Save leporel/2c0eb9aa059aad0eb0a5f2026dd1c372 to your computer and use it in GitHub Desktop.
Save leporel/2c0eb9aa059aad0eb0a5f2026dd1c372 to your computer and use it in GitHub Desktop.
windows-setup
##
# 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