Хочу поделиться с вами простыми шагами по настройке Winodows после ее установки с помощью PowerShell. Все шаги я выполнял неоднократно на Windows 11, думаю, что ошибок с Windows 10 не должно возникнуть.
Справка
Windows PowerShell - финальная версия 5.1, по умолчанию установлен в Windows.
PowerShell - форк Windows PowerShell версии 5.1 с последующим развитием, доступен на Windows, Linux и macOS.
Настройки подключения к интернету по умолчанию
Первое, что полезно выполнить, если в процессе будут использоваться различные ВПН - это сделать подключение по умолчанию самым приоритетным.
Проверьте какие подключения у вас доступны, с помощью Windows PowerShell, запущенного от имени Администратора в терминале Windows:
Get-NetIPInterface -AddressFamily IPv4
Установите минимальное значение InterfaceMetric для вашего текущего подключения:
Set-NetIPInterface -InterfaceIndex 19 -InterfaceMetric 5
Перезагрузите сетевой интерфейс, метрику которому вы изменили:
Restart-NetAdapter -InterfaceAlias "Ethernet"
Установка PowerShell
Запустите Windows терминал и обновите два системных приложения, сам терминал и Windows App Installer с помощью менеджера пакетов Winget:
winget update --id Microsoft.WindowsTerminal -e --accept-source-agreements --source winget; if ($?) { winget update --id Microsoft.AppInstaller -e --source winget };
После обновления перезапустите терминал Windows и установите PowerShell:
winget install --id Microsoft.PowerShell -e --source winget
Перезагрузите терминал, перейдите в настройки и установите PowerShell профилем по умолчанию.
После этого можно перейти к третьему шагу.
Установка приложений
Запустите Windows терминал от имени Администратора и создайте список приложений с помощью блокнота. Вот мой текущий список:
notepad.exe .\PowerShellInstall_Winget_Machine.ps1
# ## PowerShell ### Winget's apps installation # winget install --id Git.Git -e --source winget; if ($?) { winget install --id Microsoft.VCRedist.2015+.x64 -e --source winget }; if ($?) { winget install --id Skillbrains.Lightshot -e --source winget }; if ($?) { winget install --id qBittorrent.qBittorrent -e --source winget }; if ($?) { winget install --id Google.Chrome -e --source winget }; if ($?) { winget install --id Neovim.Neovim -e --source winget }; # Neovim is a refactor, and sometimes redactor, in the tradition of Vim if ($?) { winget install --id 7zip.7zip -e --source winget }; if ($?) { winget install --id DEVCOM.JetBrainsMonoNerdFont -e --source winget }; if ($?) { winget install --id Mozilla.Thunderbird -e --source winget }; if ($?) { winget install --id gerardog.gsudo -e --source winget }; # sudo for Powershell if ($?) { winget install --id ALCPU.CoreTemp --source winget }; # Program to monitor processor temperature and other vital information if ($?) { winget install --id FxSound.FxSound --source winget }; # Equalizer for Windows if ($?) { winget install --id Bitwarden.Bitwarden -e --source winget --scope user }; if ($?) { winget install --id Telegram.TelegramDesktop -e --source winget --scope user }; if ($?) { winget install --id Microsoft.VisualStudioCode -e --source winget --scope user }; if ($?) { winget install --id Obsidian.Obsidian -e --source winget --scope user }; if ($?) { winget install --id Yandex.Browser -e --source winget --scope user };
Выполните скрипт PowerShell:
.\PowerShellInstall_Winget_Machine.ps1
Включение WSL и Hyper-V
Шаг №4.
Для работы мне нужен гипервизор, так как в Windows уже есть свой - его я и использую, а для полноценной поддержки Ansible в VS Code - WSL.
Для включения модулей необходимо запустить PowerShell от имени Администратора и выполнить команду:
wsl --install
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
И остался заключительный пятый шаг - настройка самого PowerShell для удобства использования.
Настройка PowerShell
Установка модулей PowerShell
Создайте скрипт с необходимыми модулями:
notepad.exe .\PowerShellInstall_Modules.ps1
# ## PowerShell ### PowerShell modules installation # Install-Module -Name posh-git -Scope CurrentUser; # для работы с Git if ($?) { Install-Module -Name z -Scope CurrentUser }; # Для быстрого перемещения по папкам if ($?) { Install-Module -Name PSReadLine -Scope CurrentUser }; # Настройка промпта PowerShell if ($?) { Install-Module -Name Terminal-Icons -Scope CurrentUser }; # Отображения иконок в темирнале с помощью Nerd Font (в моем случает JeBrainsMonoNerdFont)
Выполните скрипт:
.\PowerShellInstall_Modules.ps1
Удалите файлы со списками приложений и модулей:
Remove-Item $env:USERPROFILE\PowerShellInstall_*.ps1
Создание и настройка профиля
Есть несколько типов профилей для PowerShell:
Current User, Current Host -
$PROFILE,$PROFILE.CurrentUserCurrentHostCurrent User, All Hosts -
$PROFILE.CurrentUserAllHostsAll Users, Current Host -
$PROFILE.AllUsersCurrentHostAll Users, All Hosts -
$PROFILE.AllUsersAllHosts
Как правило, я использую $PROFILE. Для его создания нужно выполнить команду:
if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
Теперь можно перейти к настройкам самого профиля, вот мой текущий:
notepad.exe $PROFILE
# ## PowerShell ### PowerShell User Profile # ### Alias Set-Alias -Name vim -Value $env:ProgramFiles\Neovim\bin\nvim.exe Set-Alias -Name cle -Value Clear-Host Set-Alias -Name ll -Value Get-ChildItem Set-Alias -Name cln -Value CleanTemp Set-Alias -Name touch -Value New-Item Set-Alias -Name sudo -Value $env:LOCALAPPDATA\Microsoft\WinGet\Packages\gerardog.gsudo_Microsoft.Winget.Source_8wekyb3d8bbwe\x64\gsudo.exe Set-Alias -Name ua -Value UpdateAll Set-Alias -Name gst -Value GitStatus Set-Alias -Name gsh -Value GitPush Set-Alias -Name gll -Value GitPull Set-Alias -Name hosts -Value ChangeHosts Set-Alias -Name pubkey -Value SSHPubkey ### Functions Function SSHPubkey { Get-Content $env:USERPROFILE\.ssh\id_rsa.pub | ssh $(Read-Host -Prompt 'Enter user@ip-address') 'cat >> $HOME/.ssh/authorized_keys' } Function ChangeHosts { sudo nvim $env:SystemRoot\System32\drivers\etc\hosts } Function GitPull { git.exe pull; if ($?) { Clear-Host } } Function GitStatus { git.exe status } Function CleanTemp { Remove-Item -Path $env:TEMP\* -Recurse -ErrorAction SilentlyContinue } Function Which ($command) { Get-Command -Name $command -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Path -ErrorAction SilentlyContinue } Function UpdateAll { winget.exe upgrade --recurse --source winget --verbose } Function GitPush { git.exe add .; if ($?) { git.exe commit -am "." }; if ($?) { git.exe push }; if ($?) { Clear-Host } } ### Import-Module Import-Module -Name PSReadLine Import-Module -Name z Import-Module -Name Terminal-Icons Import-Module -Name posh-git ### Setup PSReadLineOption Set-PSReadLineOption -EditMode Emacs Set-PSReadLineOption -PredictionSource HistoryAndPlugin Set-PSReadLineOption -PredictionViewStyle ListView Set-PSReadLineOption -HistoryNoDuplicates:$True Set-PSReadLineOption -ShowToolTips:$True # Get KeyHandlers 'Get-PSReadLineKeyHandler -Bound -Unbound' Set-PSReadlineKeyHandler -Chord 'Ctrl+d' -Function DeleteChar Set-PSReadLineKeyHandler -Chord 'Ctrl+f' -Function ForwardWord Set-PSReadLineKeyHandler -Chord 'Enter' -Function ValidateAndAcceptLine
Основные настройки
Настройки доступны через файл settings.json, который можно открыть из меню Settings:
"defaults": { "bellStyle": "taskbar", "colorScheme": "One Half Dark Edited", "cursorShape": "filledBox", "font": { "face": "JetBrainsMono Nerd Font Mono", "size": 20 }, "opacity": 80, "padding": "14", "scrollbarState": "hidden", "useAcrylic": true },
Настройка темы
Я использую отредактированную тему "One Half Dark Edited", для того, чтобы применить ее, откройте настройки PowerShell через json-файл и внутри брекетов в разделе "schemes" вставьте данный блок (если вам интересно, что за тема):
{ "background": "#2C2845", "black": "#5E5D5D", "blue": "#61AFEF", "brightBlack": "#757575", "brightBlue": "#61AFEF", "brightCyan": "#56B6C2", "brightGreen": "#98C379", "brightPurple": "#C678DD", "brightRed": "#E06C75", "brightWhite": "#DCDFE4", "brightYellow": "#FFFD58", "cursorColor": "#0CFF93", "cyan": "#56B6C2", "foreground": "#FCFCFC", "green": "#98C379", "name": "One Half Dark Edited", "purple": "#C678DD", "red": "#E06C75", "selectionBackground": "#FFFFFF", "white": "#DCDFE4", "yellow": "#E5E34F" }
На данный момент мне этого достаточно для повседневного использования. Периодически я добавляю полезные alias. Какое-то время использовал темы от Oh my posh, пробовал промпт Starship и терминал WezTerm, но в итоге вернулся к стандартному интерфейсу PowerShell.
Создание ключевой пары для SSH
Откройте Windows Terminal от имени Администратора, установите автоматический запуск для службы ssh-agent и запустите ее:
Get-Service -Name ssh-agent | Set-Service -StartupType Automatic; if ($?) { Start-Service ssh-agent };
Создайте ключевую пару для SSH и добавьте ее в ssh-agent:
ssh-keygen -t ed25519 -C "ivan.a.lobanov"
-C - добавляет комментарий к ключевой паре.
ssh-add $env:USERPROFILE\.ssh\id_ed25519
На этом первоначальная настройка Windows закончена.
